不同資料之間因為單位不同,導致數值差距十分大,容易導致**結果被某項資料主導,所以需要進行資料的歸一化。
解決方案:將所有資料對映到同一尺度
最值歸一化:把所有資料對映到0-1之間
適用於分布有明顯邊界的情況;受outlier影響較大
import輸出結果:numpy as np
import
matplotlib.pyplot as plt
x = np.random.randint(0,100,100)
#一維矩陣的最值歸一化
print((x - np.min(x)) / (np.max(x) - np.min(x))) #
最值歸一化
#二維矩陣中分別對每列進行最值歸一化
x = np.random.randint(0,100,(50,2))
x = np.array(x,dtype=float)
x[:,0] = (x[:,0] - np.min(x[:,0])) / (np.max(x[:,0]) -np.min(x[:,0]))
x[:,1] = (x[:,1] - np.min(x[:,1])) / (np.max(x[:,1]) - np.min(x[:,1]))
#繪製散點圖
plt.scatter(x[:,0],x[:,1])
plt.show()
#第0列的均值和方差
(np.mean(x[:,0]))
(np.std(x[:,0]))
#第1列的均值和方差
print(np.mean(x[:,1]))
print(np.std(x[:,1]))
均值方差歸一化:把所有資料歸一到均值為0方差為1的分布中
適用於資料分布沒有明顯的邊界,有可能存在極端資料值
import執行結果:numpy as np
import
matplotlib.pyplot as plt
#二維矩陣中分別對每列進行均值方差歸一化
x2 = np.random.randint(0,100,(50,2))
x2 = np.array(x2,dtype=float)
x2[:,0] = (x2[:,0] - np.mean(x2[:,0])) /np.std(x2[:,0])
x2[:,1] = (x2[:,1] - np.mean(x2[:,1])) / np.std(x2[:,1])
plt.scatter(x2[:,0],x2[:,1])
plt.show()
#列印對應列的均值和方差
(np.mean(x2[:,0]))
(np.std(x2[:,0]))
print(np.mean(x2[:,1]))
print(np.std(x2[:,1]))
利用scikit-learn中的standardscaler對資料進行均值方差歸一化演示:
import執行結果:numpy as np
from sklearn import
datasets
iris =datasets.load_iris()
x =iris.data
y =iris.target
from sklearn.model_selection import
train_test_split
#建立訓練資料集和測試資料集
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.2,random_state = 666)
from sklearn.preprocessing import
standardscaler
#構造均值方差歸一化物件
standardscaler =standardscaler()
#把自身返回回來,現在standardscaler中存放了計算均值方差歸一化的關鍵資訊
standardscaler.fit(x_train) #均值
print('
訓練資料均值:
',standardscaler.mean_ )
#描述資料分布範圍 包括:方差 標準差等
print('
訓練資料方差:
',standardscaler.scale_)
#對訓練資料進行歸一化處理
x_train =standardscaler.transform(x_train)
#對測試資料進行歸一化處理,並賦值給 x_test_standard
x_test_standard =standardscaler.transform(x_test)
from sklearn.neighbors import
kneighborsclassifier
#建立乙個knn分類器
knn_clf = kneighborsclassifier(n_neighbors=3)
#將均值方差歸一化後的資料進行寫入
knn_clf.fit(x_train,y_train)
#計算分類器準確度
print("
測試資料經過均值方差歸一化後 準確度:
",knn_clf.score(x_test_standard,y_test))
#測試資料集沒有進行歸一化處理
print("
測試資料未經過均值方差歸一化後 準確度:
",knn_clf.score(x_test,y_test))
訓練資料均值: [5.83416667 3.0825 3.70916667 1.16916667]訓練資料方差: [0.81019502 0.44076874 1.76295187 0.75429833]
測試資料經過均值方差歸一化後 準確度: 1.0
測試資料未經過均值方差歸一化後 準確度: 0.3333333333333333
機器學習 資料歸一化
機器學習中,在資料預處理過程中,通過將資料歸一化可以加快梯度下降求最優解的速度,也有可能提高模型計算的精度。常用的歸一化方法主要有兩種 最值歸一化。比如把最大值歸一化成1,最小值歸一化成 1 或把最大值歸一化成1,最小值歸一化成0。適用於本來就分布在有限範圍內的資料。其中常用的方法有 線性比例變換法...
機器學習 資料歸一化方法
原文 本文主要介紹兩種基本的資料歸一化方法。歸一化方法有兩種形式,一種是把數變為 0,1 之間的小數,一種是把有量綱表示式變為無量綱表示式。資料標準化 歸一化 處理是資料探勘的一項基礎工作,不同評價指標往往具有不同的量綱和量綱單位,這樣的情況會影響到資料分析的結果,為了消除指標之間的量綱影響,需要進...
機器學習之資料歸一化
機器學習中,資料歸一化是非常重要,如果不進行資料歸一化,可能會導致模型壞掉或者訓練出乙個奇怪的模型。現在有乙個訓練資料集,包含兩個樣本,內容如下 腫瘤大小 cm 發現時間 day 樣本11 200樣本2 5100 以 k 近鄰演算法為例,發現時間 的數值比 腫瘤大小 的數值大很多,樣本間的距離被 發...