機器學習算法(一)——KNN算法

1、算法簡介

k鄰近算法( k-nearest neighbors ),即 KNN 算法。算法

KNN是一種基於實例學習( instance-based learning ),或者所是將全部計算推遲到分類以後的惰性學習( lazy learning )的一種算法,KNN能夠說是最簡單的分類算法之一,同時,它也是最經常使用的分類算法之一,注意KNN算法是有監督學習中的分類算法。性能

2、算法原理

KNN算法的思路是:若是一個樣本在特徵空間中的 k 個最類似(即特徵空間中最鄰近)的樣本中的大多數屬於某一個類別,則該樣本也屬於這個類別。一般 K 是不大於20的奇數。學習

用一句咱們中國的古話來講,就是「近朱者赤,近墨者黑。」測試

舉個例子:rest

一隻小鷹出生怎麼判斷本身是一隻鷹仍是一隻雞呢?對象

以下圖,咱們假設綠色表明這隻小鷹。紅色表明雞,藍色表明鷹。blog

它睜開眼看了一下週圍3只動物,兩隻是雞,一直是鷹。他就把本身分類爲雞。當他看的比較遠的時候,他看到了周圍5只動物。發現三隻是鷹,兩隻是雞。他就把本身分類爲鷹。排序

從上面的例子中,咱們能夠看出該算法涉及3個主要因素:訓練集、距離或類似的衡量、k的大小。事件

該算法的基本步驟

  1. 算距離:給定測試對象,計算它與訓練集中的每一個對象的距離
  2. 找鄰居:圈定距離最近的k個訓練對象,做爲測試對象的近鄰
  3. 作分類:根據這k個近鄰歸屬的主要類別,來對測試對象分類

3、算法要點

一、距離計算

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

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

而且這種方法能夠延伸至三維或更多維的狀況。它的公式能夠總結爲:

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

這樣咱們就明白瞭如何計算距離,一般KNN算法中使用的是歐式距離。KNN算法最簡單粗暴的就是將預測點與全部點距離進行計算,而後保存並排序,選出前面K個值看看哪些類別比較多。

爲何KNN使用歐式距離而不是曼哈頓距離?

KNN不用曼哈頓距離,由於它只計算水平或垂直距離,有維度的限制。另外一方面,歐氏距離可用於任何空間的距離計算問題。由於,數據點能夠存在於任何空間,歐氏距離是更可行的選擇。例如:想象一下國際象棋棋盤,象或車所作的移動是由曼哈頓距離計算的,由於它們是在各自的水平和垂直方向作的運動。

二、K值選擇

經過小雞和老鷹的案例咱們知道了,KNN算法的關鍵點K值選取很重要。 那麼,K究竟應該怎麼取值呢?

答案是經過交叉驗證(將樣本數據按照必定比例,拆分出訓練用的數據和驗證用的數據,好比6:4拆分出部分訓練數據和驗證數據),從選取一個較小的K值開始,不斷增長K的值,而後計算驗證集合的方差,最終找到一個比較合適的K值。

經驗規則:k通常低於訓練樣本數的平方根

4、優缺點

  • 優勢

簡單,易於理解,無需建模與訓練,易於實現;

適合對稀有事件進行分類;

適合與多分類問題,例如根據基因特徵來判斷其功能分類,kNN比SVM的表現要好。

  • 缺點

惰性算法,內存開銷大,對測試樣本分類時計算量大,性能較低;

可解釋性差,沒法給出決策樹那樣的規則。

相關文章
相關標籤/搜索