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)
假如3個屬性最大和最小值如下:
屬性 | 最大值 | 最小值 |
身高 | 1.2 | 2.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