原文鏈接:https://blog.csdn.net/weixin_39175124/article/details/79463993
數據在前處理的時候,經常會涉及到數據標准化。將現有的數據通過某種關系,映射到某一空間內。常用的標准化方式是,減去平均值,然后通過標准差映射到均至為0的空間內。系統會記錄每個輸入參數的平均數和標准差,以便數據可以還原。
很多ML的算法要求訓練的輸入參數的平均值是0並且有相同階數的方差例如:RBF核的SVM,L1和L2正則的線性回歸
sklearn.preprocessing.StandardScaler能夠輕松的實現上述功能。
調用方式為:
首先定義一個對象:
ss = sklearn.preprocessing.StandardScaler(copy=True, with_mean=True, with_std=True)
在這里
copy; with_mean;with_std
默認的值都是True.
copy 如果為false,就會用歸一化的值替代原來的值;如果被標准化的數據不是np.array或scipy.sparse CSR matrix, 原來的數據還是被copy而不是被替代
with_mean 在處理sparse CSR或者 CSC matrices 一定要設置False不然會超內存
能夠查詢的屬性:
scale_: 縮放比例,同時也是標准差
mean_: 每個特征的平均值
var_:每個特征的方差
n_sample_seen_:樣本數量,可以通過patial_fit 增加
舉個例子:
import numpy as np import matplotlib.pyplot as plt import pandas as pd from sklearn.preprocessing import StandardScaler #data = pd.read_csv("C:/學習/python/creditcard/creditcard.csv") x = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9]).reshape((3, 3)) ss = StandardScaler() print(x) ss.fit(X=x) print(ss.n_samples_seen_) print(ss.mean_) print(ss.var_) print(ss.scale_) y = ss.fit_transform(x) print(y) z = ss.inverse_transform(y) print(z)
運行結果為:

能夠被調用的Methods:
fit(X,y=None):計算輸入數據各特征的平均值,標准差以及之后的縮放系數 ,以后就可以按照這個數據調用transofrm()
X:訓練集
y: 傳入為了使得和Pipeline兼容
fit_transform(X,y=None,**fit_params): 通過fit_params調整數據X,y得到一個調整后的X ,使得每個特征的數據分布平均值為0,方差為1
X 為array:訓練集
y 為標簽
返回一個改變后的X
get_params(deep=True): 返回StandardScaler對象的設置參數,
inverse_transform(X,copy=None):顧名思義,就是按照縮放規律反向還原當前數據
transform(X, y=’deprecated’, copy=None):基於現有的對象規則,標准化新的參數
可以認為fit_transform()是fit()和transform()的合體。
