機器學習 kNN 資料歸一化

2022-03-01 03:15:02 字數 4791 閱讀 4795

不同資料之間因為單位不同,導致數值差距十分大,容易導致**結果被某項資料主導,所以需要進行資料的歸一化。

解決方案:將所有資料對映到同一尺度

最值歸一化:把所有資料對映到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列的均值和方差

print

(np.mean(x[:,0]))

print

(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()

#列印對應列的均值和方差

print

(np.mean(x2[:,0]))

print

(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 近鄰演算法為例,發現時間 的數值比 腫瘤大小 的數值大很多,樣本間的距離被 發...