1、數據標準化
sklearn.perprocessing.scale
sklearn.preprocessing.StandScaler
2、數據縮放
2.1 MinMaxScaler MaxAbsScaler
2.2稀疏數據 縮放
2.3帶有異常值得數據縮放
2.4縮放和百花
3、非線性轉換
4、 規範化
5、二值化
6、分類數據連續化
7、估算缺失值
1、數據標準化
sklearn.preprocessing .scale
函數scale提供了一種在單個類似數組的數據集上執行標準化操作的快捷方法
歸一化,又稱標準化,指特徵數據減去均值,再除以標準差
意義:通過中心化和歸一化處理,得到均值爲0,標準差爲1的服從正太分佈的數據。
z-zero 歸一化後的數據均值爲0,標準差爲1
from sklearn import preprocessing
import numpy as np
X_train=np.array([[ 1., -1., 2.],
[ 2., 0., 0.],
[ 0., 1., -1.]])
X_scaled=preprocessing.scale(X_train)
print(X_scaled)
##垂直方向上做標準化
#均值
print(X_scaled.mean(axis=0))
#方差
print(X_scaled.std(axis=0))
X_train.mean(axis=0)
sklearn.preprocessing.StandardScaler
我們經常需要保存訓練階段使用的標準差和平均值。StandardScaler 實現了Transformer API 來計算訓練集上的平均值和標準差,一遍稍後可以再測試集上重新應用相同的轉換
scaler=preprocessing.StandardScaler().fit(X_train)
scaler
scaler.mean_
scaler.scale_
scaler.transform(X_train)
X_test = [[-1., 1., 0.]]
scaler.transform(X_test)
2、數據縮放
最小最大規範化 對原始數據進行線性變換
X_train = np.array([[ 1., -1., 2.],
[ 2., 0., 0.],
[ 0., 1., -1.]])
min_max_scaler=preprocessing.MinMaxScaler()
X_train_minmax=min_max_scaler.fit_transform(X_train)
X_train_minmax
2.1 MinMax的轉換類似於:
X_std=(X-X.min)/(X.max-X.min)
2.2 稀疏數據的縮放
將稀疏數據中心化會破壞數據的稀疏結構,然而,將稀疏數據縮放是有意義的,特別是特徵向量在不同的尺度上
MAxAbScalar和maxabs_scale 專門用於縮放稀疏數據,並且是推薦的方法。
from sklearn.preprocessing import MaxAbsScaler
X = [[ 1., -1., 2.],
[ 2., 0., 0.],
[ 0., 1., 0.]]
transformer=MaxAbsScaler().fit(X)
transformer
transformer.transform(X)
2.3 異常值的縮放
如果數據集包括很多異常值,則使用robust_scale
和RobustScaler
2.4縮放和白化
由於下游模型可以進一步對特徵的線性獨立性作出一些假設,所以只做標準化是不夠的。所以纔有白化(whitening)的技術要求。它就是將特徵向量之間的相關性消除。
要解決此問題,您可以使用sklearn.decomposition.PCA
或sklearn.decomposition.RandomizedPCA
設置 whiten = True
來進一步刪除跨特徵的線性相關性
3、 非線性轉化
與縮放器不同,QuantileTransformer將每個特性放入相同的範圍或分u,然後通過執行等級轉換,可以消除不尋常的分佈,並且比縮放方法更少受異常值的影響。但是,會扭曲特徵內和特徵之間的相關性和距離、
QuantileTransformer
和quantile_transform
提供基於分位數函數的非參數變換,以便將數據映射到0到1之間的均勻分佈。他的方法將功能轉換爲均勻或正態分佈。因此,對於一個給定的特徵,這種轉換傾向於分散高頻值。它也減少了(邊際)異常值的影響:因此這是一個強大的預處理方案。
該轉換是獨立應用於每個功能的。特徵的累積密度函數用於投影原始值。低於或高於擬合範圍的新/未見數據的特徵值將被映射到輸出分佈的邊界。請注意,這種轉換是非線性的。它可能會扭曲在相同規模下測量的變量之間的線性相關性,但會使得在不同規模下測量的變量更加直接可比
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
iris=load_iris()
X,y=iris.data,iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)
qt=preprocessing.QuantileTransformer(random_state=0)
X_train_trans=qt.fit_transform(X_train)
X_test_trans=qt.fit_transform(X_test)
4、規範化
規範化是將不同變化範圍的值映射到相同的固定範圍,常見的是[0,1],此時也稱爲歸一化
X = np.random.rand(3,3)
X_normalized = preprocessing.normalize(X, norm='l2')
X_normalized
normalizer = preprocessing.Normalizer()
normalizer.transform(X)
5、二值化
bibarizer=preprocessing.Binarizer(threshold=0.5)
bibarizer.transform(X_train)
6、分類數據連續化
# 這是三列分類數據
# 在我們的數據集中有兩種性別,三種可能的大陸和四種網頁瀏覽器。
X = [[0, 0, 3],
[1, 1, 0],
[0, 2, 1],
[1, 0, 2]]
enc = preprocessing.OneHotEncoder()
enc.fit(X)
enc.transform([[0, 1, 3]]).toarray()
設置分類特徵數
enc = preprocessing.OneHotEncoder(n_values=[3, 3, 4])
enc.fit(X)
enc.transform([[0, 1, 3]]).toarray()
7、估算缺失值
import numpy as np
from sklearn.preprocessing import Imputer
X=[[1,2],[6,np.nan],[7,6]]
##使用均值代替缺失值
imp=Imputer(missing_values='NaN',strategy='mean',axis=0)
imp.fit(X)
imp.transform(X)