一、原理
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)
(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近鄰的基本思想進行介紹,簡潔扼要的加以總結。最近鄰的基本思想 儲存所有觀察到的有標籤的樣本,然後對新來的測試樣本,在標籤樣本集中找到與測試...