「作者主頁」:士別三日wyx
「作者簡介」:CSDN top100、阿里云博客專家、華為云享專家、網(wǎng)絡安全領域優(yōu)質(zhì)創(chuàng)作者
「推薦專欄」:對網(wǎng)絡安全感興趣的小伙伴可以關注專欄《網(wǎng)絡安全入門到精通》
處理數(shù)據(jù)之前,通常會使用一些轉(zhuǎn)換函數(shù)將「特征數(shù)據(jù)」轉(zhuǎn)換成更適合「算法模型」的特征數(shù)據(jù)。這個過程,也叫數(shù)據(jù)預處理。
比如,我們在擇偶時,有身高、體重、存款三個特征,身高是180、體重是180、存款是180000;存款的數(shù)值跟其他數(shù)據(jù)不在一個數(shù)量級,這意味著存款的對擇偶結果的影響比較大,但我們認為這三個特征同樣重要,這時候就需要把這些規(guī)格不同的數(shù)據(jù)轉(zhuǎn)換到同一規(guī)格。
「歸一化」是常用的預處理方式之一,就是把數(shù)據(jù)轉(zhuǎn)換到 0~1 之間。
一、數(shù)據(jù)預處理API
sklearn.preprocessing 是數(shù)據(jù)預處理的 API
sklearn.preprocessing.MinMaxScaler( feature_range=(0,1) )
- MinMaxScaler.fit_transform( data ):接收array類型數(shù)據(jù),返回歸一化后的array類型數(shù)據(jù)。
參數(shù):
- feature_range=(0,1):(可選,默認0~1)指定歸一化的范圍,。
二、準備數(shù)據(jù)集
準備一個測試用的「數(shù)據(jù)集」,這里我們用 datasets 自帶的 鳶尾花數(shù)據(jù)集
from sklearn import datasets
# 獲取數(shù)據(jù)源
iris = datasets.load_iris()
# 打印數(shù)據(jù)
print(iris.data)
輸出:
[[5.1 3.5 1.4 0.2]
[4.9 3. 1.4 0.2]
......
[5.9 3. 5.1 1.8]]
從輸出結果可以看到,數(shù)據(jù)規(guī)格都是有「差異」的,接下來,我們對數(shù)據(jù)進行歸一。
三、歸一化處理
fit_transform() 可以對數(shù)據(jù)進行「歸一」處理
from sklearn import preprocessing
from sklearn import datasets
# 初始化
mm = preprocessing.MinMaxScaler()
# 獲取數(shù)據(jù)源
iris = datasets.load_iris()
# 歸一化處理
new_data = mm.fit_transform(iris.data)
print(new_data)
輸出:
[[0.22222222 0.625 0.06779661 0.04166667]
[0.16666667 0.41666667 0.06779661 0.04166667]
......
[0.44444444 0.41666667 0.69491525 0.70833333]]
從結果可以看到,歸一后的結果,數(shù)據(jù)規(guī)格都在 0~1 之間。
實際上,fit_transform() 不只可以 “歸1” ,我們自己設置歸一的范圍。
四、設置歸一化范圍
實例化 MinMaxScaler 時,指定 feature_range 參數(shù)的值,可以設置歸一的「范圍」。
from sklearn import preprocessing
from sklearn import datasets
# 初始化
mm = preprocessing.MinMaxScaler(feature_range=(2,3))
# 獲取數(shù)據(jù)源
iris = datasets.load_iris()
# 歸一化處理
new_data = mm.fit_transform(iris.data)
print(new_data)
輸出:
[[2.22222222 2.625 2.06779661 2.04166667]
[2.16666667 2.41666667 2.06779661 2.04166667]
......
[2.44444444 2.41666667 2.69491525 2.70833333]]
從輸出結果可以看到,數(shù)據(jù)的范圍變成 2~3 區(qū)間。
接下來,我們了解一下,MinMaxScaler 是如何進行歸一的。
五、歸一化原理
MinMaxScaler 根據(jù)以下「公式」進行歸一:
- 以列為基準,max為一列的最大值,min為一列的最小值
- mx、mi是歸一指定的區(qū)間,默認mx=1,mi=0
我們準備一些測試數(shù)據(jù):
我們拿特征一這一列舉例,第一個數(shù)是90,先帶入第一個公式:X‘=(90-60)/(90-60)=1
再帶入第二個公式:X"=1*1+0=1
那么第一個數(shù)就轉(zhuǎn)換成1.
知道了歸一化的計算方式后,可以發(fā)現(xiàn)歸一化存在一定的「局限性」。
歸一化是根據(jù)最大值和最小值來計算的,當最大值/最小值出現(xiàn)異常時,比如最大值跟其他數(shù)據(jù)差的非常多,那么這種計算方式就會存在較大的誤差。只適合傳統(tǒng)精確小數(shù)據(jù)場景,對于其他場景,可以使用標準化的方式。
六、標準化
sklearn.preprocessing.StandardScaler()
- StandardScaler.fit_transform( data ):接收array類型數(shù)據(jù),返回保準化后的array類型數(shù)據(jù)。
我們將歸一化的案例,用「標準化」函數(shù)再處理一遍
from sklearn import preprocessing
from sklearn import datasets
# 初始化
ss = preprocessing.StandardScaler()
# 獲取數(shù)據(jù)源
iris = datasets.load_iris()
# 標準化處理
new_data = ss.fit_transform(iris.data)
print(new_data)
輸出:
[[-9.00681170e-01 1.01900435e+00 -1.34022653e+00 -1.31544430e+00]
[-1.14301691e+00 -1.31979479e-01 -1.34022653e+00 -1.31544430e+00]
......
[ 6.86617933e-02 -1.31979479e-01 7.62758269e-01 7.90670654e-01]]
標準化的計算方式和概率論的標準化公式一樣:文章來源:http://www.zghlxwxcb.cn/news/detail-554554.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-554554.html
- 以列為基準,mean是平均值,0是標準差
到了這里,關于【機器學習】數(shù)據(jù)預處理 - 歸一化和標準化的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!