python實現K近鄰

2021-07-10 22:15:56 字數 1478 閱讀 6363

k近鄰演算法的具體思想如下:

(1)計算已知類別資料集中的樣本與當前樣本之間的距離

(2)按照距離遞增次序排序

(3)選取與當前點距離最小的k個樣本

(4)確定前k個樣本所在類別的出現頻率

(5)返回前k個樣本中出現頻率最高的類別作為當前點的**分類

python實現

def define_classification(self, sample, trainset, labels, k=1):

sortdiffidx = self.calc_distance_between_sample_trainset(sample, trainset, labels)

vote = {}

for i in range(k):

ith_label = labels[sortdiffidx[i]]

vote[ith_label] = vote.get(ith_label, 0) + 1

sortedvote = self.dict_sort(vote)

return sortedvote[0][0]

def calc_distance_between_sample_trainset(self, sample, trainset, labels):

n = trainset.shape[0]

difference = tile(sample, (n, 1)) - trainset

squared_difference = difference**2

squared_difference = sum(squared_difference, axis=1)

distance = squared_difference**0.5

sorted_differ = distance.argsort()

return sorted_differ

def dict_sort(self, dict_for_sort):

return sorted(dict_for_sort.iteritems(), key=lambda x: x[1], reverse=true)

def knnclassify(self, testx, trainx, labels, k=1):

return self.define_classification(testx, trainx, labels, k)

其中testx是需要進行識別的樣本,trainx是已知類別的訓練集樣本集合,labels對應著樣本集合中每個樣本的類別,返回的是類別

testx形如[1,2,3..........]

trainx形如

[1,2,3..........]

[1,2,3..........]

labels形如['c1','c2','c3',........]

實際上,python庫中已經做好的相應的封裝,只要匯入sklearn這個庫,就能使用其提供的k近鄰演算法介面。

k近鄰演算法 python實現

k近鄰演算法 k nearest neighbor,knn 是一種非常直觀的,易於理解的有監督的演算法 對於乙個待分類的樣本,在已知的樣本集合中尋 找與它距離最近的k個樣本,及所謂的k近鄰。通過這這k個近鄰的所述類別來決定分類結果。距離度量距離度量方法有很多種,例如 歐式距離 曼哈頓距離 切比雪夫距...

k近鄰演算法 python實現

特徵距離計算 距離計算方法有很多,這裡先列三種 簡單例子 電影型別 根據歐氏距離計算公式,算出未知電影與已知電影型別之間的距離。電影名稱 打鬥鏡頭 接吻鏡頭 電影型別 歐式距離13 104愛情片 20.522 100愛情片 18.731 81愛情片 19.2 4101 10動作片 115.3599 ...

K近鄰演算法 python實現

k近鄰演算法 演算法原理 將資料轉換成向量形式 計算輸入向量與樣本中的距離 比如歐式距離等 對距離計算結果排序 取前k個 根據指定規則 多數或者按照一定權重進行計算 確定輸入向量類別。python實現 import numpy as np import operator class knnmetho...