我們知道,在訓練模型的時候,要輸入features,即因子,也叫特徵。對於同乙個特徵,不同的樣本中的取值可能會相差非常大,一些異常小或異常大的資料會誤導模型的正確訓練;另外,如果資料的分布很分散也會影響訓練結果。以上兩種方式都體現在方差會非常大。此時,我們可以將特徵中的值進行標準差標準化,即轉換為均值為0,方差為1的正態分佈。所以在訓練模型之前,一定要對特徵的資料分布進行探索,並考慮是否有必要將資料進行標準化。
標準化的方式一:
使用preprocessing.scale()
from sklearn import preprocessing
import numpy as np
x = np.array([[1., -1., 2.], [2., 0., 0.], [0., 1., -1.]])
x_scaled = preprocessing.scale(x)
#output :x_scaled = [[ 0. -1.22474487 1.33630621]
[ 1.22474487
0. -0.26726124]
[-1.22474487
1.22474487 -1.06904497]]
#scaled之後的資料零均值,單位方差
x_scaled.mean(axis=0) # column mean: array([ 0., 0., 0.])
x_scaled.std(axis=0) #column standard deviation: array([ 1., 1., 1.])
標準化的方式二:
使用standardscaler,fit(),transform();或者fit_transform()
from sklearn.preprocessing import standardscaler
import numpy as np
x = np.array([[1., -1., 2.],
[2., 0., 0.],
[0., 1., -1.]])
ss = standardscaler()
ss2 = standardscaler()
print(x)
scaler = ss.fit(x) #
# print(ss is scaler) # true
print(scaler)
print(scaler.mean_)
transform = scaler.transform(x)
print(transform)
# ss_transform = ss.transform(x) # 同上,完全一樣
# print(ss_transform)
# fit_transform = ss.fit_transform(x) # 重新學習了一遍,當然結果是一樣的
# print(fit_transform)
# ss2_transform = ss2.transform(x) # 沒有通過fit得到元資料的均值和方差,無法進行0-1標準化。直接使用是錯誤的
# print(ss2_transform)
ML Data Processing資料預處理
資料歸一化 引數 arrays list np.array matrices padas dataframes 需被分割的樣本集 options test size 在0.0和1.0之間,表示要從樣本集拆分到測試集的比例,預設為0.25 train size 在0.0和1.0之間,表示要從樣本集拆分...
StandardScalers資料預處理
我們知道,在訓練模型的時候,要輸入features,即因子,也叫特徵。對於同乙個特徵,不同的樣本中的取值可能會相差非常大,一些異常小或異常大的資料會誤導模型的正確訓練 另外,如果資料的分布很分散也會影響訓練結果。以上兩種方式都體現在方差會非常大。此時,我們可以將特徵中的值進行標準差標準化,即轉換為均...
Python 使用Pandas進行資料預處理
利用pandas庫中的get dummies函式對類別型特徵進行啞變數處理。get dummies語法 pandas.get dummies data,prefix none,prefix sep dummy na false,columns none,sparse false,drop first...