logo
Loading...

【QA】正規化(Normalization)為什麼能夠提升機器學習的成效? - 【教材專區】學習AI有困難? 讓Cupoy助教來幫你! - Cupoy

直接舉例來說明,有兩筆資料,分別如下表 用網路流量當範例,平常在傳輸的都是正常流量(Normal),少數時候會遇到攻擊流量(Attack),上表顯示的封包大小和傳輸速度是分別在正常和攻擊下的數值,...

直接舉例來說明,有兩筆資料,分別如下表 用網路流量當範例,平常在傳輸的都是正常流量(Normal),少數時候會遇到攻擊流量(Attack),上表顯示的封包大小和傳輸速度是分別在正常和攻擊下的數值,可以發現第一個現象為封包大小的最大值跟最小值差距較大,而傳輸速度中的最大值和最小值差距較小。 第二個現象為當今天要分辨是否為正常或攻擊時,兩個特徵都是可以觀察的,以封包大小為例,正常流量傳輸時封包都會有一定內容,而攻擊者只是為了傳輸大量封包,因此攻擊的封包大小較小。傳輸速度則是攻擊者希望用越快的速度去傳輸,以癱瘓受害者頻寬。簡單來說就是兩個特徵都是很重要的。 了解以上兩個現象後,從機器學習的角度切入,機器在學習分類正常和攻擊時不是像我們用上述文字來推敲,而是學習上表中的數值,而這些數值也能畫成如下的座標 以最直接的KNN來說,該模型會需要計算每一個點和其他點的距離來做分群,計算距離就會有問題,第一個特徵為封包大小,差距為980,而傳輸速度差距僅有50,看起來就像是這兩筆數據的傳輸速度是接近的,而能真正比較出兩者差距的是封包大小,但事實上兩筆數據的兩個特徵都有很大的差距,只是在於特徵值的大小或標準不同。 如何讓不同的特徵都有相同的標準去給機器學習,就會用到正規化(Normalization),將數值縮放到[0, 1],公式如下列所示,這個方法基本上是所有的數據在訓練前都會經過的預處理,常常看到範例程式碼中會有這個動作就是為了讓後續學習能更好。接著看經過正規化後的數據長怎樣 因為現在每個特徵只有兩個數值,因此最大值會變1,最小值會變0,當每個特徵的數值更多時會看到所有數值在轉換後都介在0~1之間,可以發現兩個特徵的差值都變成1,也代表機器在看這兩個特徵時會是相同的距離,不會像前面一樣A特徵的差值較大因此較能夠分類兩者。 總結 正規化後的數據分布並不會改變, 一樣保持相同的分布,從範例也能看到,因此並不影響數據在空間上的分布情況。 能夠有效地讓所有特徵都有相同的單位標準,不會因為數值範圍不同而有所影響。 範例 from sklearn import preprocessing from sklearn.datasets import make_classification import matplotlib.pyplot as plt ## 生成具有兩個特徵,共100筆數據 X, y = make_classification( n_samples=300, n_features=2, n_redundant=0, n_informative=2, random_state=20, n_clusters_per_class=1, scale=100) ## 可視化數據 plt.scatter(X[:,0], X[:,1], c=y) plt.show() #################################### # 將數據標準化 X = preprocessing.minmax_scale(X, feature_range=(0,1)) ## 可視化數據 plt.scatter(X[:,0], X[:,1], c=y) plt.show() https://drive.google.com/drive/folders/1qktFFBon0BzfmNuqIHEVq5V3p9TJR2xp?usp=sharing