「千克」和「毫升」:單位不同就不能做朋友了嗎?

2020-12-11 讀芯術

全文共3819字,預計學習時長18分鐘

圖源:unsplash

你一定曾遇到過這樣一個數據集,它具有多個特徵,涵蓋了不同程度的數量級、範圍和單位。這會是一個巨大的阻礙,很少的機器學習算法對這些特徵高度敏感。

其實類似的問題並不少見。例如,一個特徵的單位是千克,另一個的單位是克,還有一個的單位是升。當它們所呈現的內容差異如此之大時,該如何使用這些特徵呢?

該是特徵縮放上場的時候了。這是數據預處理階段的關鍵部分,但很多初學者忽視了這一點,這會損害他們的機器學習模型。

特性縮放可以顯著提高某些機器學習算法的性能,而對其他算法則完全不起作用。這種怪事背後的原因可能是什麼?

另外,歸一化和標準化的區別是什麼?這是機器學習中最常用的兩種特徵縮放技術,但它們不易理解。什麼時候應該使用哪種技術?

本文將解答你關於特徵縮放的疑問,將在Python中實現特性縮放,讓你對它如何適用於不同的機器學習算法有一個實踐上的理解。

為什麼要使用特徵縮放?

需要解決的第一個問題是,為什麼需要縮放數據集中的變量。一些機器學習算法對特徵縮放敏感,而另一些則幾乎不變。

基於距離的算法

距離算法(例如KNN、K-means和SVM)受特徵範圍的影響最大。這是因為在後臺,算法使用數據點之間的距離來確定它們的相似性。

例如,假如有一些數據,其中包含高中學生的CGPA分數(從0到5)和他們的未來收入(以千盧比為單位):

由於這兩個特徵具有不同的縮放程度,所以有可能給更高量級的特徵更高的權重。這將影響機器學習算法的性能,顯然,我們不希望算法偏向於一個特徵。

因此,我們在使用基於距離的算法之前對數據進行縮放,這樣所有的特徵對結果的影響都是相等的。

當比較學生A和B的數據點之間的歐氏距離、B和C的數據點之間的歐氏距離,縮放前後的效果是明顯的,如下所示:

· 縮放前AB距離 =>

· 縮放前BC距離 =>

· 縮放後AB距離 =>

· 縮放後BC距離 =>

縮放將所有特徵都帶入計算,並且現在的距離比縮放之前更具有可比性。

基於梯度下降的算法

使用梯度下降作為優化技術的機器學習算法(例如線性回歸、邏輯回歸、神經網絡等)要求對數據進行縮放。請看下面的梯度下降公式:

公式中特徵值X的存在將影響梯度下降的步長。特徵範圍的差異將導致每個特徵的步長不同。為確保梯度下降平穩地向最小值移動,並確保所有特徵的梯度下降步驟均以相同的速率更新,我們在將數據輸入模型之前先對數據進行縮放。

具有相似縮放程度的特徵可以幫助梯度下降更快地收斂到最小值。

基於樹的算法

另一方面,基於樹的算法對特徵縮放非常不敏感。考慮一下,決策樹僅基於單個特徵拆分節點。決策樹在特徵上分割節點,從而增加了節點的同質性。特徵上的拆分不受其他特徵影響。

圖源:unsplash

因此,其餘特徵對拆分幾乎沒有影響。這就是特徵縮放不改變算法性能的原因!

什麼是歸一化?

歸一化是一種縮放技術,對值進行移位和重新縮放,以使它們最終在0到1之間變化。這也稱為「最小-最大」縮放。

這是歸一化的公式:

其中,Xmax和Xmin分別為特徵的最大值和最小值。

· 當X的值是列中的最小值時,分子為0,因此X '為0

· 相反,當X的值是列中的最大值時,分子等於分母,因此X '的值是1

· 如果X的值在最小值和最大值之間,那麼X '的值在0和1之間

什麼是標準化?

標準化是另一種縮放技術,其中值以具有單位標準偏差的平均值為中心。這意味著特徵的均值變為零,結果分布具有單位標準差。

這是標準化的公式:

μ為特徵值的均值,σ為特徵值的標準差。注意,在這種情況下,值並不局限於特定的範圍。

圖源:unsplash

現在,你腦海中最大的問題一定是什麼時候應該使用歸一化,什麼時候應該使用標準化?下面就來看看!

最大的問題——歸一化還是標準化?

歸一化與標準化是機器學習初學者的一個永恆的問題。

· 如果數據分布不遵循高斯分布,歸一化是很有用的。這在不假設數據分布的算法(如k近鄰和神經網絡)中很有用。

· 相反,如果數據服從高斯分布,標準化是有用的。然而,這並不一定對。另外,與歸一化不同,標準化沒有邊界範圍。因此,即使數據中有異常值,也不會受到標準化的影響。

然而,最終使用歸一化還是標準化將取決於問題和正在使用的機器學習算法。沒有硬性的規則來確定何時將數據歸一化或標準化。可以從將模型擬合為原始的、歸一化的和標準化的數據開始,並比較性能以獲得最佳結果。

好的做法是將縮放器與訓練數據進行擬合,然後利用縮放器對測試數據進行轉換。這將避免模型測試過程中的任何數據洩漏。此外,通常不需要調整目標值。

在Python中實現特徵縮放

現在是有趣的部分,將學到的東西付諸實踐。採用DataHack平臺的BigMart數據集,可將特徵縮放應用於一些機器學習算法。

圖源:unsplash

跳過預處理步驟,因為它們超出了本教程的範圍。但是可以在這篇文章中找到預處理的詳細解釋。這些步驟將使你能夠在黑客馬拉松排行榜上排名前20位,因此值得一試!

因此,首先將數據分為訓練和測試集:

# spliting training and testing data

from sklearn.model_selection import train_test_split

X= df

y= target

X_train, X_test, y_train, y_test =train_test_split(X,y,test_size=0.2,random_state=27)

在轉到特徵縮放部分之前,使用pd.describe()方法瀏覽有關數據的詳細信息:

可以看到,特徵的值範圍存在巨大差異:Item_Visibility,Item_Weight,Item_MRP和Outlet_ Establishmentment_Year。嘗試使用特徵縮放來解決該問題!

注意:特徵Item_Visibility中有負值,這是因為已採用對數轉換來處理特徵中的偏斜度。

使用sklearn進行歸一化

為了歸一化數據,需要從sklearn庫導入MinMaxScalar並將其應用於數據集。所以,下面就開始吧!

# data normalization with sklearn

from sklearn.preprocessing importMinMaxScaler

# fitscaler on training data

norm=MinMaxScaler().fit(X_train)

#transform training data

X_train_norm= norm.transform(X_train)

#transform testing dataabs

X_test_norm= norm.transform(X_test)

請看歸一化如何影響數據集:

現在,所有特徵的最小值均為0,最大值為1。完美!

接下來,嘗試對數據進行標準化。

使用sklearn進行標準化

為了對數據進行標準化,需要從sklearn庫中導入StandardScalar並將其應用於數據集。方法如下:

# data standardization with sklearn

from sklearn.preprocessing importStandardScaler

#numerical features

num_cols= ['Item_Weight','Item_Visibility','Item_MRP','Outlet_Establishment_Year']

# applystandardization on numerical features

for i in num_cols:

# fit on trainingdata

scale =StandardScaler().fit(X_train[[i]])

# transform thetraining data

X_train_stand[i] = scale.transform(X_train_stand[[i]])

# transform thetesting data

X_test_stand[i] = scale.transform(X_test_stand[[i]])

可以發現,只對數字列應用了標準化,而沒有對其他的單一熱編碼(One-HotEncoded)特徵應用標準化。標準化單一熱編碼特徵意味著將類別特徵重新分布。你不會想這麼做的!

但是為什麼在對數據進行歸一化時沒有做同樣的事情呢?因為單一熱編碼的特徵已經在0到1之間了。所以,標準化不會影響它們的值。

好的,來看看標準化是如何改變數據的:

現在,特徵的值以平均值為中心,具有單位標準偏差分布。太棒了!

比較未縮放、歸一化和標準化的數據

可視化數據以了解當前分布總是很不錯的。可以使用箱線圖來比較未縮放數據和已縮放數據。

你會注意到,特徵縮放考慮到了方方面面。這些特徵現在更具可比性,並且會對學習模型產生類似的影響。

將縮放應用於機器學習算法

是時候在數據上訓練一些機器學習算法,以比較不同縮放技術對算法性能的影響。特別注意縮放對三種算法的影響:K-近鄰、支持向量回歸和決策樹。

K-近鄰(KNN)

如前所述,KNN是一種基於距離的算法,受特徵範圍的影響。來看看縮放前後數據對性能的影響:

# training a KNN model

from sklearn.neighbors importKNeighborsRegressor

# measuring RMSE score

from sklearn.metrics import mean_squared_error

# knn

knn=KNeighborsRegressor(n_neighbors=7)

rmse= []

# raw,normalized and standardized training and testing data

trainX= [X_train, X_train_norm, X_train_stand]

testX= [X_test, X_test_norm, X_test_stand]

# modelfitting and measuring RMSE

for i inrange(len(trainX)):

# fit

knn.fit(trainX[i],y_train)

# predict

pred = knn.predict(testX[i])

# RMSE

rmse.append(np.sqrt(mean_squared_error(y_test,pred)))

#visualizing the result

df_knn= pd.DataFrame({'RMSE':rmse},index=['Original','Normalized','Standardized'])

df_knn

可以看到,特徵縮放降低了KNN模型的RMSE分數。具體來說,歸一化數據的性能比標準化數據稍好一些。

注意:之所以測量RMSE,因為這個比賽中評估RMSE。

圖源:unsplash

支持向量回歸(SVR)

SVR是另一種基於距離的算法。所以,來看看它是在歸一還是或標準化的情況下工作得更好:

# training an SVR model

from sklearn.svm importSVR

# measuring RMSE score

from sklearn.metrics import mean_squared_error

# SVR

svr=SVR(kernel='rbf',C=5)

rmse= []

# raw,normalized and standardized training and testing data

trainX= [X_train, X_train_norm, X_train_stand]

testX= [X_test, X_test_norm, X_test_stand]

# modelfitting and measuring RMSE

for i inrange(len(trainX)):

# fit

svr.fit(trainX[i],y_train)

# predict

pred = svr.predict(testX[i])

# RMSE

rmse.append(np.sqrt(mean_squared_error(y_test,pred)))

#visualizing the result

df_svr= pd.DataFrame({'RMSE':rmse},index=['Original','Normalized','Standardized'])

df_svr

可以看到特徵縮放確實降低了RMSE的分數。標準化數據的表現優於歸一化數據。為什麼會這樣呢?

sklearn文檔表明,SVR使用RBF核,假設所有特徵都以0為中心,方差相同。這是因為一個方差大於其他方差的特徵會阻止評估器從這些特徵中學習。

決策樹

已知特徵縮放對於決策樹沒有影響。此處展示一個實例,展示決策樹是如何操作數據的:

# training a Decision Tree model

from sklearn.tree importDecisionTreeRegressor

# measuring RMSE score

from sklearn.metrics import mean_squared_error

#Decision tree

dt=DecisionTreeRegressor(max_depth=10,random_state=27)

rmse= []

# raw,normalized and standardized training and testing data

trainX= [X_train,X_train_norm,X_train_stand]

testX= [X_test,X_test_norm,X_test_stand]

# modelfitting and measuring RMSE

for i inrange(len(trainX)):

# fit

dt.fit(trainX[i],y_train)

# predict

pred = dt.predict(testX[i])

# RMSE

rmse.append(np.sqrt(mean_squared_error(y_test,pred)))

#visualizing the result

df_dt= pd.DataFrame({'RMSE':rmse},index=['Original','Normalized','Standardized'])

df_dt

可以看到,RMSE分數在特徵縮放時並一點也沒變。因此,可以放心在數據上使用基於樹的算法!

圖源:unsplash

要記住的是,何時使用歸一化還是標準化永遠沒有標準答案。這完全取決於數據和使用的算法。接下來輪到你了,試試用其他算法進行特徵縮放吧。

留言點讚關注

我們一起分享AI學習與發展的乾貨

如轉載,請後臺留言,遵守轉載規範

相關焦點

  • 你不能不知的獸藥計量單位和算法!
    在畜禽疾病治療中,用藥劑量過大或過小都不能有效地達到治療的目的。藥物的含量、計量單位及其換算關係,對正確合理用藥、降低病原菌對藥物產生耐藥性、降低成本、減少或避免對生態環境的汙染具有重要意義。目前,一些基層獸醫及養殖場(戶),對藥物的計量單位、計算方法存在一些模糊認識,給治療帶來了一定影響。
  • 摸了10年方向盤,1升汽油是多少千克你懂嗎?加油工這次說了實話
    學過物理的都知道,汽油都是靠升為單位,很多用千克來衡量,這兩種本來就不相同,升是體積單位,而千克則是重量單位,這兩者是不能混為一談的,但是這兩者可以不同的角度來判斷同一件物體,那些摸了10年方向盤的司機們,1升汽油是多少千克你懂嗎?
  • 小學數學單位換算大全:方法、例題、練習題,家長朋友記得收藏
    單位換算可以說是貫穿小學1至6年的重要知識點,尤其是在小升初應用題中常以隱藏的形式出現,很多同學在考試中因為沒有統一單位出現了求解錯誤的情況。單位換算這部分知識從難度上來說並不大,關鍵是掌握單位與單位之間的進率,和換算的基本方法。
  • 克和千克
    克和千克教學目標1.在具體生活情境中,使學生感受並認識質量單位「克」和「千克」,知道1千克=1000克。
  • 一升汽油是多少千克?開了這麼多年車,常識了解一下
    在買了汽車以後,主要的費用應該就是汽車的油費吧,而且在加油的時候,機器上面都是顯示汽車加了多少升汽油,而並不是多少千克的汽油。那麼大家知道一升汽油是多少千克嗎?開了這麼多年車,這個常識了解一下。首先我們需要知道的時候,升是容積單位,而千克是質量單位,兩者所表示的物理量並不相同。不過這兩者之間也存在通用的一面,中間有一個叫「密度」的物理量,有了密度便可以將升和千克做轉換。一般來說,物質的密度會隨著溫度的升高而變化,尤其是汽油溫度的升高,其密度的變化還比較大。
  • 南京市民欲獻血200毫升遭拒絕
    這時旁邊的一位曹姓工作人員立即提醒記者,只要體重達到45千克以上,就可以獻300毫升的血液量,建議記者獻血300毫升。面對工作人員的要求,記者表示由於個人原因,自己只想獻200毫升血時,這位工作人員就說,他們不能滿足記者的獻血要求。
  • 獸藥使用說明書上沒標明每千克體重用量是多少怎麼辦?
    2.藥物的計量單位有哪些固體、半固體劑型藥物常用計量單位有:千克(kg)、克(g)、 毫克(mg)、 微克(ug),1千克=1000克,1克=1000毫克, 1毫克=1000微克。  液體劑型藥物的常用計量單位有:升(L)、毫升(ml)、1升=1000毫升。  一些抗生素、激素、維生素等藥物常用「單位 (U)」「國際單位(IU)」來表示。抗生素多用國際單位表示,有時也以微克、毫克等重量單位表示。
  • 英語度量單位:米,英裡,英尺,平方米,立方米,千克,攝氏度...這些單位怎麼說?
    一、視頻講解更多學習內容歡迎選購傑克視頻資料:《零基礎英語到高手》二、文字講解英語度量單位foot  /fʊt/英尺        feet  /fiːt/ (複數)1 foot = 12 inches yard   /jɑːd/ 碼1 yard = 3 feet = 36 inchesmile   /maɪl/     英裡1 mile = 1760 yards 通用單位
  • 最難的實驗重新定義最基本的單位:1千克有多重?
    這些圓柱體每個都剛好重1千克,其中銀光閃閃的那個由鉑-銥合金製成,價值超過4萬美元(鉑目前的價格在每金衡盎司1000美元上下浮動,金衡盎司是一種稱量貴金屬的常用單位,等於31.1034768 克),其他三個則是由不鏽鋼精心製作而成。普拉特的任務是,將這些圓柱體安全地交給在巴黎郊區的同事,而且不能讓任何人碰到它們。
  • 125毫升是多少斤?
    致四個二十多歲的傻子半夜往海裡扔石頭某燒烤店的一張桌子旁,坐著兩個人,桌子上放著一堆瓜子,其中一個人時不時的拿起手機看看消息,另一個在打電話詢問朋友啥時候能到。「算算不就知道了嗎?」這個聲音又響起。旁邊的人拿出手機給人回消息,無聊的我抓了一把瓜子,邊嗑邊想著:125毫升是多少兩?對面的樓哥陷入了深深的思考:一升=一千克=二斤,怎麼出來的二斤半? 一升=一千毫升,一斤=十兩。「樓哥,能不能整明白了?
  • 走進《千克、克、噸》,帶你了解質量單位
    大家好,歡迎來到好好做教育,我是王老師。今天我就帶領大家走進北師大版三年級數學下冊的第四單元《千克、克、噸》,進一步了解常用的質量用法。一、克和千克的認識圖片展示:1千克有多重小結:克和千克是日常生活中表示物品輕重的單位。表示較輕物品的質量,通常用克作單位,克用「g」表示;表示較重物品的質量,通常用千克作單位,千克用「kg」表示。
  • 各種單位間的進率那麼多,怎麼都記不住啊
    小編曾做過觀察,發現有相當部分孩子的單位換算題目解答不正確的原因並不是掌握不了方法,而是各種單位間的進率記憶不牢固。最基本的進率用錯了,最終題目的計算結果肯定是錯誤的。今天,小編提供三種方法,分別記憶不同類型的單位間進率,希望對你有幫助。
  • 科學界剛剛確定,重新定義千克單位(公斤),以後體重該這樣算了
    在一個多世紀100多年以來,人們一直都是按國際標準質量單位來定義千克(公斤),這個定義是由一個直徑≥1.535英吋(39mm)大小和高爾夫球差不多大的鉑銥合金圓柱體「大K」定義,雖然科學家們這麼長時間一直都是小心又小心的保護「大K」,但是還是受不了時間的侵蝕,這件原本定義千克單位的原器已經逐漸不能應對現在的精密測量了
  • 探尋「克與千克」的秘密——學習「1千克=1000克」前的思考
    (發現了聯繫,又找到了不同,好!) 楊曼寧:幾千g和幾kg的讀音一模一樣。(從不同角度發現了它們之間的聯繫,觀察點不一樣,贊!) 彭浩峰:千克大於克,1000個一克是1000克,所以是1000克=1千克。(貌似證明有道理。)
  • 「千克」變了,你的體重會變輕嗎?
    「一千克」發生大變化!你買菜會缺斤短兩嗎?一千克是多重?在菜市場買過東西的人肯定是「門兒清」。不過由於定義「一千克」的科學儀器「不準」了,明年「千克」的定義就將發生改變!「千克」變了,你的體重會變輕嗎?買菜會缺斤短兩嗎?容小編細細道來。
  • 國際單位制迎來歷史性變革!「千克」被重新定義
    不過,就在11月16日,第26屆國際計量大會(CGPM)經包括中國在內的各成員國表決,全票通過了關於「修訂國際單位制(SI)」的1號決議。根據決議,千克、安培、開爾文和摩爾等4個SI基本單位的定義將改由常數定義,於2019年5月20日起正式生效。這是國際測量體系有史以來第一次全部建立在不變的常數上,保證了SI的長期穩定性和環宇通用性。
  • 1毫升=1立方釐米?毫升和立方釐米的區別
    有些知識點雖然很小,但是,我覺得作為我們專業的數學教師必須要有嚴謹的態度對待每一個問題,所以,我翻閱了一些資料,來發表一些我的看法。要弄清毫升和立方釐米之間的聯繫和區別,首先要搞清楚體積和容積兩個概念。物體所佔的空間的大小叫做體積。箱子、油桶、倉庫等所能容納物體的體積,叫做它們的容積或容量。很明顯,容積和體積是有著密切的聯繫,它們的計算方法是一樣的。
  • 孩子,真的不能和「差生」做朋友嗎?
    因此古有「孟母三遷」,如今也有很多家長私下找老師,看看能不能給孩子安排一個「優等生」做同桌,或是私下告誡孩子多和成績好的同學做朋友,少和成績差的同學接觸。可這樣的行為真的好嗎?正如孩子們所說成績差不代表什麼都差,有的孩子體育好,有的孩子性格好,家長們不妨把交朋友的選擇權交給孩子,讓Ta和不同類型的孩子做朋友,其實也是有利於孩子成長的:可以提升孩子影響力和價值感
  • 國際單位制迎來歷史性變革「千克」等4項基本單位被重新定義
    經各個成員國表決,最終通過了關於「修訂國際單位制(SI)」的1號決議。根據決議,SI基本單位中的4個,即千克、安培、開爾文和摩爾分別改由普朗克常數h、基本電荷常數e、玻爾茲曼常數k和阿佛加德羅常數NA定義。新定義將從2019年5月20日世界計量日起生效。這是SI自1960年創建以來最為重大的變革,是科學進步的裡程碑。
  • 重量單位竟然還能變化!——「千克」被重新定義
    常用的質量單位「千克」,與我們生活息息相關,是人們再熟悉不過的了。但如今,「千克」這一單位要被重新定義了。在2018年11月16日舉行的第二十六屆國際計量大會上,經包括我國在內的53個成員國集體表決,全票通過了關於「修訂國際單位制(SI)」的決議。未來,千克將以符號為h的普朗克常數定義,質量基本單位將會更加穩定,量值傳遞更加可靠。不用再擔心國際千克原器「大K」的質量發生變化,更不必擔心它如果丟失、損壞,可能給全球質量量值統一帶來災難。