KNN算法-sklearn庫實現

KNN算法

1.定義 
       在模式識別中,k-鄰近算法(k-nn)是用於分類和迴歸的非參數方法。所謂K鄰近,就是k個最近的鄰居,意思是每個樣本都可以用它最接近的k個鄰居來代表。 
2.k-nn核心思想 
        knn算法的核心思想是如果一個樣本在特徵空間中的k個最相鄰的樣本中的大多數屬於某一個類別,則該樣本也屬於這個類別,並具有這個類別上樣本的特性。(給定一個待分類數據,通過距離計算得到離它最近的k個樣本,由k個樣本投票決定待分類數據歸爲哪一類—”少數服從多數“) 
3.算法流程

  • 計算樣本數據和待分類數據的距離。

  • 選擇k個與待分類數據距離最近的樣本。

  • 統計出k個樣本中大多數樣本所屬的分類,將該類記作category。

  • 待分類數據屬於category。

4.算法優缺點

(1)優點

  • 簡單,易理解,易實現。

  • 適合對稀有事件進行分類。

  • 適合多分類問題(multi-modal,對象有多個類別標籤),k-nn比svm更合適。

(2)缺點

  • 當樣本不平衡時,如一個類的樣本容量很大,而其他類樣本容量很小時,有可能導致當輸入一個新樣本時,該樣本的K個鄰居中大容量類的樣本佔多數。 該算法只計算“最近的”鄰居樣本,某一類的樣本數量很大,那麼或者這類樣本並不接近目標樣本,或者這類樣本很靠近目標樣本。無論怎樣,數量並不能影響運行結果。

  • 計算量較大,因爲對每一個待分類的文本都要計算它到全體已知樣本的距離,才能求得它的K個最近鄰點。

鳶尾花數據集爲例講述k-nn算法

from sklean import datasets,neighbors

iris = datasets.load_iris()
X = iris.data
y = iris.target

kn_clf = neighbors.KNeighborsClassifier()
kn_clf.fit(X,y)
kn_y = kn_clf.predict(X)
print(kn_y)
print(y)

accuracy_knn = (kn_y == y).astype(int).mean()
print(accuracy_knn)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • kn_y 和 y的輸出結果: 
    這裏寫圖片描述

  • 準確率accuracy_knn: 
    這裏寫圖片描述

鳶尾

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章