k近鄰演算法 5 資料歸一化

2022-08-04 00:48:21 字數 3725 閱讀 8727

多個特徵值時,其中某個特徵數量級比較大,其他特徵較小時,分類結果會被特徵值所主導,而弱化了其他特徵的影響,這是各個特徵值的量綱不同所致,需要將資料歸一化處理

如上圖所示,樣本間的距離,被發現時間所主導

解決辦法:將所有的資料對映到同一尺度

把所有的資料對映到0-1之間,適用於有明顯的邊界,受outlier極值影響較大,比如收入的分布

歸一化後的平均值和方差:

把所有資料歸一化到均值為0,方差為1的分布中,適用於資料分布沒有明顯的邊界,存在極端資料值的資料集

歸一化後的平均值和方差:

從預處理模組匯入標準 標量器

預處理檔案

import numpy as np

class standardscaler:

def __init__(self):

self.mean_ = none

self.scale_ = none

#求出傳入的x資料集的每一列的均值和標準差

def fit(self, x):

assert x.ndim == 2, "the dimension of x must be 2"

self.mean_ = np.array([np.mean(x[:,i]) for i in range(x.shape[1])])

self.scale_ = np.array([np.std(x[:,i]) for i in range(x.shape[1])])

return self

#對x進行資料歸一化

def transform(self, x):

assert x.ndim == 2, "the dimension of x must be 2"

assert self.mean_ is not none and self.scale_ is not none,\

"must fit before transform!"

assert x.shape[1] == len(self.mean_), \

"the feature number os x must be equal to mean_ and std_"

res_x = np.empty(shape=x.shape, dtype=float)

for col in range(x.shape[1]):

res_x[:,col] = (x[:,col] - self.mean_[col]) / self.scale_[col]

return res_x

呼叫封裝的預處理庫

from mylib import preprocessing

standscaler = preprocessing.standardscaler() #建立乙個均值方差歸一化的類

standscaler.fit(x_train) #找出樣本的均值和標準差

x_train = standscaler.transform(x_train) #根據均值,標準差,求出歸一化的值

x_test = standscaler.transform(x_test) #針對測試資料,也是一樣用訓練集的均值,標準差

knn = kneighborsclassifier(n_neighbors=3) #knn演算法分類器

knn.fit(x_train,y_train)

knn.score(x_test,y_test)

機器學習之k近鄰演算法 4 特徵值歸一化

為什麼需要做特徵值歸一化 對於特徵是年齡 身高 年薪,標籤是擇偶觀的樣本資料而言,顯然利用特徵的差值來估算擇偶觀來看,年薪這一特徵值對於計算結果的影響最大。因此,我們需要對樣本資料做歸一化處理。對於每一行樣本資料來說,歸一化處理公式如下 normdataset data min max min 就上...

k近鄰演算法matlab實現 K 近鄰演算法(一)

k 近鄰演算法是採用不同特徵之間的距離方法進行分類。優點 精度高 對異常值不敏感 無資料輸入假定 缺點 計算複雜度高 空間複雜度高 k 近鄰演算法的一般流程 1 收集資料集 可以使用任何方法 2 準備資料集 距離計算所需要的數值,最好是結構化的資料格式 3 分析資料 可以使用任何方法 4 訓練資料集...

K近鄰演算法(一)

k 近鄰演算法思想 尋找該點周圍最近的k個點。根據這k 個點的類別來判斷該點的類別 核心 資料歸一化。在必要的時候必須進行資料歸一化處理,防止某一特徵在計算資料時佔比較重 計算尤拉距離。使用python中 np的向量相減後的平方再開根號 distances for x train in x trai...