standardization即標準化,盡量將資料轉化為均值為零,方差為一的資料,形如標準正態分佈(高斯分布)。實際中我們會忽略資料的分布情況,僅僅是通過改變均值來集中資料,然後將非連續特徵除以他們的標準差。sklearn中 scale函式提供了簡單快速的singlearray-like資料集操作。
一、標準化,均值去除和按方差比例縮放(standardization, or mean removal and variance scaling)
資料集的標準化:當個體特徵太過或明顯不遵從高斯正態分佈時,標準化表現的效果較差。實際操作中,經常忽略特徵資料的分布形狀,移除每個特徵均值,劃分離散特徵的標準差,從而等級化,進而實現資料中心化。
1. 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.])
2.standardscaler計算訓練集的平均值和標準差,以便測試資料集使用相同的變換。
scaler = preprocessing.standardscaler().fit(x) #out: standardscaler(copy=true, with_mean=true, with_std=true)
scaler.mean_ #out: array([ 1., 0. , 0.33333333])
scaler.std_ #out: array([ 0.81649658, 0.81649658, 1.24721913])
#測試將該scaler用於輸入資料,變換之後得到的結果同上
scaler.transform(x) #out: array([[ 0., -1.22474487, 1.33630621], [ 1.22474487, 0. , -0.26726124], [-1.22474487,1.22474487, -1.06904497]])
scaler.transform([[-1., 1., 0.]]) #scale the new data, out: array([[-2.44948974, 1.22474487, -0.26726124]])
注 :1)若設定with_mean=false 或者 with_std=false,則不做centering 或者scaling處理。
2)scale和standardscaler可以用於回歸模型中的目標值處理。
二、將資料特徵縮放至某一範圍(scalingfeatures to a range)
另外一種標準化方法是將資料縮放至給定的最小值與最大值之間,通常是0與1之間,可用minmaxscaler
實現。或者將最大的絕對值縮放至單位大小,可用maxabsscaler實現。
使用這種標準化方法的原因是,有時資料集的標準差非常非常小,有時資料中有很多很多零(稀疏資料)需要儲存住0元素。
1.minmaxscaler(最小最大值標準化)
公式:x_std = (x - x.min(axis=0)) / (x.max(axis=0) - x.min(axis=0)) ;
x_scaler = x_std/ (max - min) + min
#例子:將資料縮放至[0, 1]間。訓練過程: fit_transform()
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)
#out: array([[ 0.5 , 0. , 1. ],
[ 1. , 0.5 , 0.33333333],
[ 0. , 1. , 0. ]])
#將上述得到的scale引數應用至測試資料
x_test = np.array([[ -3., -1., 4.]])
x_test_minmax = min_max_scaler.transform(x_test) #out: array([[-1.5 , 0. , 1.66666667]])
#可以用以下方法檢視scaler的屬性
min_max_scaler.scale_ #out: array([ 0.5 , 0.5, 0.33...])
min_max_scaler.min_ #out: array([ 0., 0.5, 0.33...])
2. maxabsscaler(絕對值最大標準化)
與上述標準化方法相似,但是它通過除以最大值將訓練集縮放至[-1,1]。這意味著資料已經以0為中心或者是含有非常非常多0的稀疏資料。
x_train = np.array([[ 1., -1., 2.],
[ 2., 0., 0.],
[ 0., 1., -1.]])
max_abs_scaler = preprocessing.maxabsscaler()
x_train_maxabs = max_abs_scaler.fit_transform(x_train)
# doctest +normalize_whitespace^, out: array([[ 0.5, -1., 1. ], [ 1. , 0. , 0. ], [ 0. , 1. , -0.5]])
x_test = np.array([[ -3., -1., 4.]])
x_test_maxabs = max_abs_scaler.transform(x_test) #out: array([[-1.5, -1. , 2. ]])
max_abs_scaler.scale_ #out: array([ 2., 1., 2.])
更多的資料預處理方法參考官方文件:
參考官方文件:
官網:
資料預處理之特徵標準化
在資料分析之前,我們通常需要先將資料標準化 normalization 利用標準化後的資料進行資料分析。資料標準化也就是統計資料的指數化。資料標準化處理主要包括資料同趨化處理和無量綱化處理兩個方面。資料同趨化處理主要解決不同性質資料問題,對不同性質指標直接加總不能正確反映不同作用力的綜合結果,須先考...
資料預處理方法 特徵標準化
普遍採用的最佳實踐是對每 個特徵做標準化,即對於輸入資料的每個特徵 輸入資料矩陣中的列 減去特徵平均值,再除 以標準差,這樣得到的特徵平均值為 0,標準差為 1。用 numpy 可以很容易實現標準化。from keras.datasets import boston housing train da...
資料預處理之資料標準化
在對資料集建模前,常常要對資料的某一特徵或幾個特徵進行規範化處理,其目的在於將特徵值歸一到同乙個維度,消除比重不平衡的問題。常用的標準化方法有最大 最小標準化 零 均值標準化和小數定標標準化。最大 最小標準化又稱為離差標準化,將原始資料進行線性變換,對映到 0,1 區間。轉換公式如下 其中,max為...