數據歸一化的兩種方法:最值歸一化和0均值歸一化


前言

在機器學習的算法訓練數據前,一般要進行數據歸一化,統一量綱。

以上圖為例,樣本間的距離被發現時間所主導,腫瘤大小就被忽略了。

將天換算成年之后,樣本間的距離又被腫瘤大小所主導,發現時間被忽略了。
解決方法就是將所有數據映射到同一尺度。

最值歸一化

將數據映射到0-1之間,適用於數據有明顯邊界的情況,如學生成績,圖片像素點等。

代碼實現

import numpy as np

x = np.random.randint(0, 10, 10)
print(x)
print((x - np.min(x)) / (np.max(x) - np.min(x)))

輸出結果為

[6 5 7 6 3 3 8 5 1 0]
[0.75  0.625 0.875 0.75  0.375 0.375 1.    0.625 0.125 0.   ]

都在0-1之間

0均值歸一化

將數據映射到均值為0,標准差為1的分布中

mean表示數據的均值,S表示標准差

代碼實現

import numpy as np

x = np.random.randint(0, 10, 10)
print(x)
x2 = (x - np.mean(x)) / np.std(x)
print(x2)
print(np.mean(x2))
print(np.std(x2))

輸出結果為

[4 1 9 3 7 3 0 1 2 0]
[ 0.35355339 -0.70710678  2.12132034  0.          1.41421356  0.
 -1.06066017 -0.70710678 -0.35355339 -1.06066017]
0.0
0.9999999999999999

均值為0,標准差為1

sklearn中的數據歸一化

sklearn是機器學習常用的第三方模塊,封裝了常用的機器學習算法。

import numpy as np
from sklearn.preprocessing import StandardScaler

x = np.random.randint(0, 10, 10)
x = np.array(x, dtype=float).reshape(2, 5)
print(x)
scaler = StandardScaler()
scaler.fit(x)
x = scaler.transform(x)
print(np.mean(x))
print(np.std(x))

StandardScaler就是sklearn提供的進行數據歸一化的工具,內部也是使用0均值歸一化的方法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM