K最近鄰演算法

2022-08-24 23:42:08 字數 2327 閱讀 4086

一、原理

k最近鄰演算法(k-nearest neighbor, knn)是最基本的分類演算法,其基本原理是:從最近的k個鄰居(樣本)中,選擇出現次數最多的類別作為判定類別。k最近鄰演算法可以理解為是乙個分類演算法,常用於標籤的**,如性別。

實現knn演算法核心的一般思路:

相似度計算——計算未知樣本和每個訓練樣本的距離;

排序——按照距離的遞增關係排序;

統計標籤——得到距離最小的前k個樣本,統計k最近鄰樣本中每個樣本出現的次數;

**標籤——選擇出現頻率最高的類標號作為未知樣本的類標號;

k值的選擇是選擇統計的樣本數量,k值得選擇會對knn演算法產生較大得影響。

在實際上,k值一般選擇較小的數,也可以選擇交叉驗證的方法尋找最優k值。

二、例項python實現

利用knn演算法實現性別判定:很多時候,使用者在註冊的時候,沒有填寫性別,這個時候,可以通過knn**。

import

numpy as np

class

knn:

def__init__

(self, k):

self.k =k

defcreatedata(self):

features = np.array([[180,76],[158,43],[176,78],[161,49]])

labels = ["

男","

女","

男","女"

]

return

features, labels

defnormalization(self, data):

#print("data:\n",data)

maxs = np.max(data, axis=0)

#print("maxs:\n",maxs)

mins = np.min(data, axis=0)

#print("mins\n",mins)

new_data = (data - mins) / (maxs -mins)

#print("new_data:\n",new_data)

return

new_data, maxs, mins

defclassify(self, one, data, labels):

#計算新樣本與資料集每個樣本之間的距離,這裡採用歐式距離

differencedata = data -one

squaredata = (differencedata ** 2).sum(axis=1)

distance = squaredata ** 0.5

#從小到大排序

sortdistanceindex =distance.argsort()

labelcount =dict()

for i in

range(self.k):

label =labels[sortdistanceindex[i]]

labelcount.setdefault(label,0)

labelcount[label] += 1

print("

labelcount:\n

",labelcount)

sortlabelcount = sorted(labelcount.items(),key=lambda x:x[1], reverse=true)

print

(sortlabelcount)

return

sortlabelcount[0][0] if

__name__ == '

__main__':

#初始化類物件,前k個裡面,哪個標籤最多,就預計是那個

knn = knn(3)

#建立資料集

features, labels =knn.createdata()

#資料集標準化

new_data, maxs, mins =knn.normalization(features)

#新資料的標準化

one = np.array([176,76])

new_one = (one - mins) / (maxs -mins)

result =knn.classify(new_one, new_data, labels)

print("

資料{}的**性別為:{}

".format(one, result))

執行結果:

K最近鄰演算法

參考 所謂k最近鄰,就是k個最近的鄰居的意思,說的是每個樣本都可以用它最接近的k個鄰居來代表。cover和hart在1968年提出了最初的鄰近演算法。knn是一種分類 classification 演算法,它輸入基於例項的學習 instance based learning 屬於懶惰學習 lazy ...

K最近鄰演算法(介紹)

問題 用k最近鄰演算法建立分類系統 學習特徵抽取 學習回歸,即 數值 學習k最近鄰演算法的應用案例和侷限性k最近鄰 k nearest neighbours,knn 演算法 k最近鄰演算法是指在乙個座標系中 前提是把元素放入座標系 so,問題來了,怎麼把他們放入座標系?他們在座標系的位置怎麼確定?其...

最近鄰與K近鄰演算法思想

在關於徑向基神經網路的一篇博文機器學習之徑向基神經網路 rbf nn 中已經對最近鄰思想進行過描述,但是寫到了rbf中有些重點不夠突出,所以,這裡重新對最近鄰和k近鄰的基本思想進行介紹,簡潔扼要的加以總結。最近鄰的基本思想 儲存所有觀察到的有標籤的樣本,然後對新來的測試樣本,在標籤樣本集中找到與測試...