1. 為什麼要歸一化?
表示乙個事物有不同的維度{即:屬性},每個屬性的取值範圍不同,導致計算時此屬性占用的權重不同,即資料的量綱不同,量綱小的資料容易受到量綱大的資料影響。
如:兩個人的屬性對比
屬性a-person
b-persion
身高1.75
1.81
年齡41
26收入
40000
10000
計算兩個人的差異:
diff = (a.身高-b.身高)2 + (a.年齡-b.年齡)2 + (a.收入-b.收入)2
= (1.75-1.81)2 + (41-26)2 + (40000-10000)2
= 0.0036 + 225 + 900000000
距離 = diff1/2 = 30000.00375
問題來了,看這些屬性,發現收入占用的權重太高,身高和年齡占用的權重相對較低,怎麼弱化收入占用的權重呢?
我們把身高,年齡和收入這些屬性對映到乙個單位區間(0,1)中。
圖中,根據梯形的特點可以得到如下公式
(1 - 0) / (max - min) = (歸一化值 - 0) / (屬性值 - min)
所以,歸一化值 = (屬性值 - min) / (max - min)
備註:這種方法的優點是:可以把資料壓縮到0-1空間內,但是對量綱大的資料壓縮比例比較大。
假如3個屬性最大和最小值如下:
屬性最大值
最小值身高
1.22.1
年齡101
16收入
100000
500經過歸一化操作後:
a-person
b-person
身高歸一化值
= (1.75-1.2)/(2.1-1.2)
= 0.55 / 0.9
= 0.61
= (1.81-1.2)/(2.1-1.2)
= 0.61 / 0.9
= 0.678
年齡歸一化值
= (41-16)/(101-16)
= 25 / 85
= 0.294
= (26-16)/(101-16)
= 20 / 85
= 0.235
收入歸一化值
= (40000-500)/(100000-500)
= 39500 / 99500
= 0.397
= (10000-500)/(100000-500)
= 19500 / 99500
= 0.196
使用歸一化值計算兩個人的差異:
diff = (a.身高歸一化值-b.身高歸一化值)2 + (a.年齡歸一化值-b.年齡歸一化值)2 + (a.收入歸一化值-b.收入歸一化值)2
= (0.61-0.678)2 + (0.294-0.235)2 + (0.397-0.196)2
= 0.004624 + 0.003481 + 0.040401
計算的值可以看出,3個屬性占用的權重在乙個數量級上,每個屬性都不會獨大。
距離 = diff1/2 = 0.2202
機器學習 歸一化數值
在計算歐氏距離的過程中,數值較大的屬性對結果的貢獻大,如果認為不同屬性權重應該相同的話,就需要將數值歸一化處理。from numpy import def autonorm dataset minvals dataset.min 0 取每列的最小值,返回陣列 print minvals maxval...
機器學習演算法 歸一化數值
coding utf 8 author whf import numpy from knn import file2matrix from numpy import def autonorm dataset 將每列的最小值放在minvals中 minvals dataset.min 0 將每列的最大...
數值歸一化
當資料報含不同量綱的多種變數時,數值間的差別可能很大,例如有些有機酸的離解常數 pka 數值大約為個位數或為負數,沸點資料則約為幾十攝氏度或數百攝氏度。再如所採用的單位不同,資料的大小也會有很大的差別,如毫摩爾濃度與摩爾濃度相差1000倍。如果將這種不同種類 不同量綱 數值大小差別很大的資料組合在一...