sklearn_scaler
生活随笔
收集整理的這篇文章主要介紹了
sklearn_scaler
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- sklearn_scaler
- ref
- note
- 1. scale 和 StandardScaler
sklearn_scaler
sklearn 縮放
from sklearn.preprocessing import scale from sklearn.preprocessing import StandardScalerref
ref1:關于使用sklearn進行數據預處理 —— 歸一化/標準化/正則化
代碼demo和原理說明
ref2:真的明白sklearn.preprocessing中的scale和StandardScaler兩種標準化方式的區別嗎?
講述了scaler方法和StandardScaler類的不同,和參數意義
ref3:Sklearn-scaler對比
各種縮放結果的圖示
note
1. scale 和 StandardScaler
公式為:(X-mean)/std 計算時對**每個屬性/每列**分別進行。
得到的結果是,對于每個屬性/每列來說所有數據都聚集在0附近,方差為1。
這個也就是z-score方法
**方法一:**直接使用scaler方法,對數據處理
from sklearn import preprocessing import numpy as np """ 把訓練集和測試集放在一塊進行標準化處理,求出共同的均值和方差,然后X減去均值再除以方差。 處理成均值為0, 方差為1的數據。 參考了測試集本身。 """ X = np.array([[1., -1., 2.],[2., 0., 0.],[0., 1., -1.]])# 標準化縮放(按列處理,即每個特征) X_scaled = preprocessing.scale(X) print(X_scaled) # array([[0., -1.22, 1.33], # [1.22, 0., -0.26], # [-1.22, 1.22, -1.06]])# 處理后數據的均值和方差 print(X_scaled.mean(axis=0)) # array([0., 0., 0.])print(X_scaled.std(axis=0)) # array([1., 1., 1.])# 等價于這個計算過程(axis=0表示對列處理) print(X.mean(axis=0)) print(X.std(axis=0)) print((X - X.mean(axis=0))) print((X - X.mean(axis=0)) / X.std(axis=0))**方法二:**采用StandardScaler類,可以保存訓練集中的參數(均值、方差)直接使用其對象轉換測試集數據
from sklearn import preprocessing import numpy as np """ 只求出訓練集的均值和方差,然后讓訓練集和測試集的X都減去這個均值然后除以方差。 均值和方差的計算沒有參考測試集。 """ X_train = np.array([[1., -1., 2.],[2., 0., 0.],[0., 1., -1.]]) X_test = np.array([[-1., 3., 0.], [2., 1., 1.]])scaler = preprocessing.StandardScaler() # fit這一步是為了得到訓練數據的mean、std等參數 scaler.fit(X_train) print(scaler) print(scaler.mean_) print(scaler.var_) # variance print(scaler.scale_) # std # 對訓練集進行標準化 X_train_scaled = scaler.transform(X_train) print(X_train_scaled) print(X_train_scaled.mean(axis=0)) print(X_train_scaled.std(axis=0))# 可以直接使用訓練集對測試集數據進行轉換 X_test_scaled = scaler.transform(X_test) print(X_test_scaled) # 因為使用的是訓練集的mean和std,所以測試集數據轉換后并不是正態分布 print(X_test_scaled.mean(axis=0)) print(X_test_scaled.std(axis=0)) # 對測試集的transform等價于這個計算過程(axis=0表示對列處理) print(X_train.mean(axis=0)) print(X_train.std(axis=0)) print((X_test - X_train.mean(axis=0)) / X_train.std(axis=0))總結[ref2]:
在機器學習中,我們是從整體中采用抽樣的方式抽出訓練集,這意味著我們默認,這部分訓練集可以代替整體,也就是訓練集的期望就是整體的期望,測試集標準化的時候,它的期望采用的正是訓練集的期望.
所以StandardScaler()才是我們經常用的方式。
也有人訓練和測試都使用scale方法,而且是在數據拼接之前。
總結
以上是生活随笔為你收集整理的sklearn_scaler的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sqoop编写
- 下一篇: 现在接受参加国际创业节 DOer Exp