機器學習中的資料預處理 資料歸一化

2021-09-26 00:26:22 字數 3502 閱讀 5787

資料歸一化處理就是將所有資料都對映到同一尺度
最值歸一化(normalization)把所有資料對映到0-1之間。
使用這種標準化方法的原因是,有時資料集的標準差非常非常小,有時資料中有很多很多零(稀疏資料)需要儲存住0元素。

xsc

ale=

x−xm

inxm

ax−x

mi

nx_=\frac}-x_}

xscale

​=xm

ax​−

xmin

​x−x

min​

import numpy as np

import matplotlib.pyplot as plt

x = np.random.randint(0,100,size=100)

(x-np.min(x)) / (np.max(x)-np.min(x))

最值歸一化把資料縮放至給定的最小值與最大值之間,通常是0與1之間,可用minmaxscaler實現。或者將最大的絕對值縮放至單位大小,可用maxabsscaler實現。
公式:

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...])

與上述標準化方法相似,但是它通過除以最大值將訓練集縮放至[-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.])

均值方差歸一化是把所有資料歸一到均值為0方差為1的分布中:

xsc

ale=

x−xm

eans

x_=\frac}

xscale

​=sx

−xme

an​​

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計算訓練集的平均值和標準差,以便測試資料集使用相同的變換。

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]])

機器學習 資料預處理

均值為0,標準差為1 from sklearn import preprocessing scaler preprocessing.standardscaler scaler.fit transform x 對原始資料進行線性變換,變換到 0,1 區間 也可以是其他固定最小最大值的區間 from s...

機器學習 資料預處理

1 連續資料特徵離散化的方法 由於lr 中模型表達能力有限,可以通過特徵離散化來提高非線性學習能力。主要方法 1 等距離散 取值範圍均勻劃分成n 等分,每份的間距相等。2 等頻離散 均勻分為n 等分,每份內包含的觀察點數相同 3 優化離散 3 1 卡方檢驗方法 統計樣本的實際觀測值與理論判斷值之間的...

機器學習處理離散資料 機器學習一 資料預處理

為了能更系統的整理到學的知識進行乙個整理,也作為乙個自我監督,接下來就把較為系統的知識點都整理到部落格上。相應的 也會同步到github上。下面所有的 都是使用python寫的,資料預處理主要用到的是sklearn.preprocessing模組 sklearn.apachecn.org cn 0....