数据归一化 - MinMaxScaler()/MaxAbsScaler() - Python代码
目錄
歸一化
數據歸一化的背景介紹
MinMaxScaler:歸一到 [ 0,1 ]?
MaxAbsScaler:歸一到 [ -1,1 ]?
標準化
去均值,方差規模化
歸一化
數據歸一化的背景介紹
在之前做聚類分析的時候我們發現,聚類的效果往往特別受其中一列數據的影響,使得原本應該散布在二維平面圖上的點,變成聚集在一條線上的點,可想而知,其聚類效果肯定不理想。
左圖:為所有數據都歸一化之后的聚類分析散點圖;
右圖:為其中一列是合同金額,并且沒有歸一化數據的散點圖;
歸一化方法有兩種形式,一種是把數變為(0,1)之間的小數,一種是把有量綱表達式變為無量綱表達式,成為純量。后者常見于微波之中,也就是電路分析、信號系統、電磁波傳輸等,研究物理的人會比較熟悉。而像我們這些普通的數據分析師的日常工作中,不太會遇見需要歸一化為無量綱表達式的情況,因此只討論歸一化到 [0,1] 的情況。
歸一化一般是把數據映射到 [ 0,1 ]?,但也有歸一到? [ -1,1 ] 的情況,兩種情況在Python中分別可以通過MinMaxScaler 或者 MaxAbsScaler方法來實現。
?
MinMaxScaler:歸一到 [ 0,1 ]?
原理
從原理中我們注意到有一個axis=0,這表示MinMaxScaler方法默認是對每一列做這樣的歸一化操作,這也比較符合實際應用。
eg:將數據歸一到 [ 0,1 ]?
from sklearn import preprocessing import numpy as npx = np.array([[3., -1., 2., 613.],[2., 0., 0., 232],[0., 1., -1., 113],[1., 2., -3., 489]])min_max_scaler = preprocessing.MinMaxScaler() x_minmax = min_max_scaler.fit_transform(x) print(x_minmax)運行結果:
[[1. 0. 1. 1. ][0.66666667 0.33333333 0.6 0.238 ][0. 0.66666667 0.4 0. ][0.33333333 1. 0. 0.752 ]]?如果有新的測試數據進來,也想做同樣的轉換,那么將新的測試數據添加到原數據末尾即可
from sklearn import preprocessing import pandas as pdmin_max_scaler = preprocessing.MinMaxScaler()x = ([[3., -1., 2., 613.],[2., 0., 0., 232],[0., 1., -1., 113],[1., 2., -3., 489]])#原數據y = [7., 1., -4., 987]#新的測試數據 x.append(y)#將y添加到x的末尾 print('x :\n', x) x_minmax = min_max_scaler.fit_transform(x) print('x_minmax :\n', x_minmax)運行結果:
x :[[3.0, -1.0, 2.0, 613.0], [2.0, 0.0, 0.0, 232], [0.0, 1.0, -1.0, 113], [1.0, 2.0, -3.0, 489], [7.0, 1.0, -4.0, 987]] x_minmax :[[0.42857143 0. 1. 0.57208238][0.28571429 0.33333333 0.66666667 0.13615561][0. 0.66666667 0.5 0. ][0.14285714 1. 0.16666667 0.43020595][1. 0.66666667 0. 1. ]]每一列特征中的最小值變成了0,最大值變成了1.
?
MaxAbsScaler:歸一到 [ -1,1 ]?
原理與MinMaxScaler相似,
from sklearn import preprocessing import numpy as npx = np.array([[3., -1., 2., 613.],[2., 0., 0., 232],[0., 1., -1., 113],[1., 2., -3., 489]]) max_abs_scaler = preprocessing.MaxAbsScaler() x_train_maxsbs = max_abs_scaler.fit_transform(x) x_train_maxsbs運行結果:
array([[ 1. , -0.5 , 0.66666667, 1. ],[ 0.66666667, 0. , 0. , 0.37846656],[ 0. , 0.5 , -0.33333333, 0.18433931],[ 0.33333333, 1. , -1. , 0.79771615]])?如果有新的測試數據進來,和原來的表一起進行歸一化:
from sklearn import preprocessing import pandas as pdmax_abs_scaler = preprocessing.MaxAbsScaler()x = ([[3., -1., 2., 613.],[2., 0., 0., 232],[0., 1., -1., 113],[1., 2., -3., 489]])#原數據y = [5., 1., -4., 888]#新的測試數據 x.append(y) print('x :\n', x) x_train_maxsbs = max_abs_scaler.fit_transform(x) print('x_train_maxsbs :\n', x_train_maxsbs)運行結果:
x :[[3.0, -1.0, 2.0, 613.0], [2.0, 0.0, 0.0, 232], [0.0, 1.0, -1.0, 113], [1.0, 2.0, -3.0, 489], [5.0, 1.0, -4.0, 888]] x_train_maxsbs :[[ 0.6 -0.5 0.5 0.69031532][ 0.4 0. 0. 0.26126126][ 0. 0.5 -0.25 0.12725225][ 0.2 1. -0.75 0.55067568][ 1. 0.5 -1. 1. ]]?
其他數據預處理方法
數據標準化 - scale() - Python代碼
拉格朗日插值法補充缺失值
連續數據離散化(等寬、等頻、聚類離散)
清洗你見過的各種類型的重復
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的数据归一化 - MinMaxScaler()/MaxAbsScaler() - Python代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: springboot整合kafka_sp
- 下一篇: 预训练模型对实体的表示能力差?一个简单有