Python实现kNN算法
生活随笔
收集整理的這篇文章主要介紹了
Python实现kNN算法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Python實現kNN算法
1. 原理
k-最近鄰: kNN(k-NearestNeighbor)分類算法機器學習中最簡單的分類方法之一。所謂K最近鄰,就是k個最近的鄰居的意思,說的是每個樣本都可以用它最接近的k個鄰居來代表。
k-NN算法的核心思想是如果一個樣本在特征空間中的k個最相鄰的樣本中的大多數屬于某一個類別,則該樣本也屬于這個類別,并具有這個類別上樣本的特性。該方法在確定分類決策上只依據最鄰近k個樣本的類別來決定待分樣本所屬的類別。 kNN方法在類別決策時,只與極少量的相鄰樣本有關。由于kNN方法主要靠周圍有限的鄰近的樣本,而不是靠判別類域的方法來確定所屬類別的,因此對于類域的交叉或重疊較多的待分樣本集來說,kNN方法較其他方法更為適合。
- 優點: 簡單,易于理解,無需訓練,對異常值不敏感。
- 缺點:計算時間和空間復雜度高。
2. 算法流程
- 準備數據及數據預處理(類型轉換,歸一化等)
- 計算及分類
- 選擇一種距離計算方式, 計算當前樣本和所有數據集樣本的距離
- 按照距離遞增次序進行排序, 選取與當前距離最小的 k 個點
- 對于離散分類, 返回 k 個點出現頻率最多的類別作為預測分類; 對于回歸, 返回 k 個點的加權值作為預測值
3. python代碼實現及注釋
#導入相關包 import numpy as np#創建數據集 def creatDataset():trainSet=np.array([[0,0],[0.1,0],[1.0,1.0],[1.0,1.1]])labels=['A','A','B','B']return trainSet,labels#k-NN算法分類 def Classify(x,trainSet,labels,k):#計算距離diff=(trainSet-x)**2dist= (diff.sum(axis=1))**0.5#對距離進行排序,升序sortMin=dist.argsort()#字典,用來存放k個相鄰樣本屬于各類別的數量classCount={}for i in range(k): #統計各類別數量classCount[labels[sortMin[i]]]=classCount.get(labels[sortMin[i]], 0)+1#對字典按值排列,降序classCount=sorted(classCount.items(), key = lambda x:x[1], reverse = True)#返回,數量最多的類別return classCount[0][0]if __name__ == "__main__":#測試樣本x=[1,1.2]#調用函數分類X,Y = creatDataset()result=Classify(x,X,Y,2)#輸出分類類別名print(result)總結
以上是生活随笔為你收集整理的Python实现kNN算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TensorFlow 笔记4--使用te
- 下一篇: java计算一个多边形的重心_2D凸多边