資料預處理之資料標準特徵化

2021-09-11 18:08:09 字數 3531 閱讀 8291

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為...