1、為什么要做數據規范:
是為了減少數據在可視化是的距離差異:(如:將數據 X1薪水:4023、5000、8000 X2年齡:40、33、30,將這些數據按照一定的比例盡量處理到-1跟1之間),這個句話可能只有我自己能理解,
2、用Python處理數據規范化
#數據分割 1、驗證模型做得對不對? (一塊用了訓練模型,一塊數據用來驗證模型的正確性)
from sklearn.cross_validation import train_test_split
X_train, X_text, Y_train, Y_test = train_test_split(X,Y,test_size = 0.2,random_state = 0)
#數據規范化(減少數據之間的差異,如 4000 100 200 ,-1到1之間,按照一定比例縮放)
from sklearn.preprocessing import StandardScaler
sc_X = StandardScaler()
X_train = sc_X.fit_transform(X_train)
X_text = sc_X.fit_transform(X_text)
3、R語言處理數據規范化
datasets = read.csv('Data.csv')
#missData 缺失數據填充
datasets$Age = ifelse(is.na(datasets$Age),ave(datasets$Age,FUN = function(x) mean(x, na.rm = TRUE)),
datasets$Age)
datasets$Salary = ifelse(is.na(datasets$Salary),ave(datasets$Salary,FUN = function(x) mean(x, na.rm = TRUE)),
datasets$Salary)
#數據明確
datasets$Country = factor(datasets$Country,levels = c('France','Spain','Germany'), labels = c(1,2,3))
datasets$Purchased = factor(datasets$Purchased,levels = c('No','Yes'), labels = c(1,2))
#數據分割
#用
library(caTools)
#set.seed(123)里面有數據就是隨機處理
set.seed(123)
split = sample.split(datasets$Purchased, SplitRatio = 0.8)
training_set = subset(datasets, split == TRUE) #80%
test_set = subset(datasets, split == FALSE) #20%
#數據規范化(縮放)
training_set= scale(training_set)
test_set= scale(test_set)
這個數據在R數據處理數據規范化得時候會遇到一個坑,提示‘X’必需為數值
數值?數字?
因為原本datasets$Purchased是True false 我們轉成了1、2, 這個時候的1、2是數字,還不是數值,所以這個時候我們要注意,
因為這個 時候我們是需要對Age 和 Salary 處理就可以
training_set[,2:3 ] = scale(training_set[, 2:3])
test_set[,2:3 ] = scale(test_set[,2:3 ])
運行代碼后,這個時候看到規范后的數據了,數值很靠近,接近-1和1之間。
training_set
Country? ? ? ? Age? ? Salary Purchased
2? ? ? 2 -1.42857869 -1.1397581? ? ? ? 2
3? ? ? 3 -1.05088836 -0.6631119? ? ? ? 1
4? ? ? 2 -0.04371416 -0.1070247? ? ? ? 1
5? ? ? 3? 0.20807939? 0.1136448? ? ? ? 2
6? ? ? 1 -0.42140448 -0.3453478? ? ? ? 2
7? ? ? 2? 0.05420556 -0.8219940? ? ? ? 1
8? ? ? 1? 1.21525360? 1.3229138? ? ? ? 2
9? ? ? 3? 1.46704715? 1.6406780? ? ? ? 1
ok,這就是Pythonh和R語言的數據規范化。