機器學習 歸一化數值

2022-07-25 08:48:08 字數 1659 閱讀 7318

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倍。如果將這種不同種類 不同量綱 數值大小差別很大的資料組合在一...