分類演算法之鄰近演算法:KNN(理論篇)

起步

今天介紹另一種分類演算法,k鄰近演算法( k-nearest neighbors ),即 KNN 演算法。

概述

Cover 和 Hart 在 1968 年提出了最初的鄰近演算法,用於解決分類( classification )的問題。關於這個演算法在維基百科中也有介紹:https://zh.wikipedia.org/wiki/最近鄰居法 。

KNN是一種基於實例學習( instance-based learning ),或者所是將所有計算推遲到分類之後的惰性學習( lazy learning )的一種演算法,KNN是所有機器學習演算法中最簡單演算法之一。

從案例中說起

一個有關電影分類的例子:

這個一個根據打鬥次數和接吻次數作為特徵來進行類型的分類。最後一條的記錄就是待分類的數據。

KNN這個分類過程比較簡單的一個原因是它不需要創建模型,也不需要進行訓練,並且非常容易理解。把例子中打鬥次數和接吻次數看成是x軸和y軸,那麼就很容易能建立一個二維坐標,每條記錄都是坐標中的點。對於未知點來說,尋找其最近的幾個點,哪種分類數較多,未知點就屬於哪一類。

演算法說明

KNN演算法的思路是: 如果一個樣本在特徵空間中的 k 個最相似(即特徵空間中最鄰近)的樣本中的大多數屬於某一個類別,則該樣本也屬於這個類別。通常 K 的取值比較小,不會超過 20。

演算法步驟為:

  • 計算未知實例到所有已知實例的距離;
  • 選擇參數 K;
  • 根據多數表決( majority-voting )規則,將未知實例歸類為樣本中最多數的類別。

距離的衡量方法

關於距離的測量方式有多種,這裡只介紹兩種。

歐拉距離 這種測量方式就是簡單的平面幾何中兩點之間的直線距離。

並且這種方法可以延伸至三維或更多維的情況。它的公式可以總結為:

曼哈頓距離 顧名思義,城市街區的距離就不能是點和點的直線距離,而是街區的距離。如棋盤上也會使用曼哈頓距離的計算方法:

K 值的選擇

K值的選擇會影響結果,有一個經典的圖如下:

圖中的數據集是良好的數據,即都打好了 label ,一類是藍色的正方形,一類是紅色的三角形,那個綠色的圓形是待分類的數據。

  • K = 3 時,範圍內紅色三角形多,這個待分類點屬於紅色三角形。
  • K = 5 時,範圍內藍色正方形多,這個待分類點屬於藍色正方形。

如何選擇一個最佳的K值取決於數據。一般情況下,在分類時較大的 K 值能夠減小雜訊的影響,但會使類別之間的界限變得模糊。因此 K 的取值一般比較小 ( K < 20 )。

改進

在下面一種情況中:

在點Y的預測中,改範圍內三角形分類數量佔優,因此將Y點歸為三角形。但是從視覺上觀測,應該是分為圓形分類更為合理。根據這種情況就在距離測量中加上權重,比如 1/d (d: 距離)。

KNN 的優缺點

優點:

  • 簡單,易於理解,無需建模與訓練,易於實現;
  • 適合對稀有事件進行分類;
  • 適合與多分類問題,例如根據基因特徵來判斷其功能分類,kNN比SVM的表現要好。

缺點:

  • 惰性演算法,內存開銷大,對測試樣本分類時計算量大,性能較低;
  • 可解釋性差,無法給出決策樹那樣的規則。

推薦閱讀:

Kmeans文本聚類
跟蹤置信度與Long-term
DeepMind聲稱通過AI為Google全球機房節能15%的新聞有多少可信度?
李宏毅機器學習2016 第十六講 生成對抗網路 GAN
K-means聚類演算法中K值如何選擇?

TAG:分类算法 | 机器学习 |