K最近鄰(KNN)演算法(二)

2021-09-29 22:11:52 字數 1428 閱讀 9252

2. 待補充

通過knn演算法的實踐中,樣本的不同特徵的單位不同,會在求距離時造成很大的影響。比如:在兩個樣本中腫瘤大小的分別為1cm和5cm,發現時間分別為100天和200天,那麼在求距離時,時間差為100、大小差為4,那麼其結果會被時間所主導,因為腫瘤大小的差距太小了。但是如果我們把時間用年做單位,0.27年與0.55年的差距又遠小於腫瘤大小的差距,結果又會被大小主導

通過資料歸一化,可以把有量綱的資料,經過變換,轉化為沒有量綱的資料。利用資料歸一化的方法,可以把數字統一對映到比較小的區間裡面,這樣就不會受到單位不同的影響

對測試資料集進行歸一化時,仍然要使用訓練資料集的均值train_mean和方差std_train。這是因為測試資料是模擬的真實環境,真實環境中可能無法得到均值和方差,對資料進行歸一化。所以後面所有的資料,也應該做同樣的處理,sklearn中處理方法即:

x_test_scale = stardardscaler.transform(x_test)

from sklearn import datasets

from sklearn.model_selection import train_test_split

from sklearn.preprocessing import standardscaler

from sklearn.neighbors import kneighborsclassifier

# 載入鳶尾花資料集

iris = datasets.load_iris()

# 提取資料集中的特徵資料

x = iris.data

y = iris.target

# 把資料集劃分為訓練資料集和測試資料集

x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=0)

# 物件例項化

stardardscaler = standardscaler()

# 類似於模型的訓練過程

stardardscaler.fit(x_train)

# 使用 transform 實現均值方差歸一化

x_train_scale = stardardscaler.transform(x_train)

# 不要對x_test進行訓練,直接呼叫前面訓練好的模型進行歸一化

x_test_scale = stardardscaler.transform(x_test)

# 呼叫 k-近鄰演算法

knn = kneighborsclassifier(n_neighbors=3)

knn.fit(x_train_scale, y_train)

# 對演算法進行評分

print('演算法評分:', knn.score(x_test_scale, y_test))

演算法二 K 近鄰(KNN)演算法

k近鄰法 k nearest neighbor,k nn 是1967年由cover t和hart p提出的一種基本分類與回歸方法。它的工作原理是 存在乙個樣本資料集合,也稱作為訓練樣本集,並且樣本集中每個資料都存在標籤,即我們知道樣本集中每乙個資料與所屬分類的對應關係。輸入沒有標籤的新資料後,將新的...

K 近鄰演算法 KNN

knn k nearest neighbor 假設訓練集有記錄 r1 r2,rn共n條,訓練集的特徵向量及其對應的類別都是已知的,每個記錄的特徵向量為 t1 t2,tk共k個特徵,待測試的記錄為ru 1 計算ru 的特徵向量與訓練集的每條記錄 即r1 r2,rn 的特徵向量的歐式距離,選取距離最小的...

k近鄰演算法 kNN

核心思想 前k個最相似資料中出現次數最多的類別,作為新資料的類別。核心函式 計算距離函式,投票函式 coding utf 8 import random import sys from collections import counter from operator import itemgette...