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:
鳶尾