KNN 算法 的全稱是 K-Nearest Neighbor ,中文為 K 近鄰 算法,它是基於 距離 的壹種算法,簡單有效。
KNN 算法 即可用於分類問題,也可用於回歸問題。
假如我們統計了壹些 電影數據,包括電影名稱,打鬥次數,接吻次數,電影類型 ,如下:
可以看到,電影分成了兩類,分別是動作片和愛情片。
如果現在有壹部新的電影A,它的打鬥和接吻次數分別是80 和7,那如何用KNN 算法對齊進行分類呢?
我們可以將打鬥次數作為 X 軸 ,接吻次數作為 Y 軸 ,將上述電影數據畫在壹個坐標系中,如下:
通過上圖可以直觀的看出,動作電影與愛情電影的分布範圍是不同的。
KNN 算法 基於距離,它的原理是: 選擇與待分類數據最近的K 個點,這K 個點屬於哪個分類最多,那麽待分類數據就屬於哪個分類 。
所以,要判斷電影A 屬於哪壹類電影,就要從已知的電影樣本中,選出距離電影A 最近的K 個點:
比如,我們從樣本中選出三個點(即 K 為 3),那麽距離電影A 最近的三個點是《功夫》,《黑客帝國》和《戰狼》,而這三部電影都是動作電影。因此,可以判斷電影A 也是動作電影。
另外,我們還要處理兩個問題:
關於點之間的距離判斷,可以參考文章 《計算機如何理解事物的相關性》 。
至於K 值的選擇,K 值較大或者較小都會對模型的訓練造成負面影響,K 值較小會造成 過擬合 ,K 值較大 欠擬合 。
因此,K 值的選擇,壹般采用 交叉驗證 的方式。
交叉驗證的思路是,把樣本集中的大部分樣本作為訓練集,剩余部分用於預測,來驗證分類模型的準確度。壹般會把 K 值選取在較小範圍內,逐壹嘗試K 的值,當模型準確度最高時,就是最合適的K 值。
可以總結出, KNN 算法 用於分類問題時,壹般的步驟是:
如果,我們現在有壹部電影B,知道該電影屬於動作電影,並且知道該電影的接吻次數是 7 ,現在想預測該電影的打鬥次數是多少?
這個問題就屬於 回歸問題 。
首先看下,根據已知數據,如何判斷出距離電影B 最近的K 個點。
我們依然設置K 為3,已知數據為:
根據已知數據可以畫出下圖:
圖中我畫出了壹條水平線,這條線代表所有接吻次數是7 的電影,接下來就是要找到距離 這條線 最近的三部(K 為 3)動作電影。
可以看到,距離這條水平線最近的三部動作電影是《功夫》,《黑客帝國》和《戰狼》,那麽這三部電影的打鬥次數的平均值,就是我們預測的電影B 的打鬥次數。
所以,電影B 的打鬥次數是:
本篇文章主要介紹了 KNN 算法 的基本原理,它簡單易懂,即可處理分類問題,又可處理回歸問題。
KNN 算法 是基於 距離 的壹種機器學習算法,需要計算測試點與樣本點之間的距離。因此,當數據量大的時候,計算量就會非常龐大,需要大量的存儲空間和計算時間。
另外,如果樣本數據分類不均衡,比如有些分類的樣本非常少,那麽該類別的分類準確率就會很低。因此,在實際應用中,要特別註意這壹點。
(本節完。)
推薦閱讀:
決策樹算法-理論篇-如何計算信息純度
決策樹算法-實戰篇-鳶尾花及波士頓房價預測
樸素貝葉斯分類-理論篇-如何通過概率解決分類問題
樸素貝葉斯分類-實戰篇-如何進行文本分類
計算機如何理解事物的相關性-文檔的相似度判斷