KNN 演算法-理論篇-如何給電影進行分類
阿新 • • 發佈:2020-12-02
> **公號:碼農充電站pro**
> **主頁:**
**KNN 演算法**的全稱是**K-Nearest Neighbor**,中文為**K 近鄰**演算法,它是基於**距離**的一種演算法,簡單有效。
**KNN 演算法**即可用於分類問題,也可用於迴歸問題。
### 1,準備電影資料
假如我們統計了一些**電影資料,包括電影名稱,打鬥次數,接吻次數,電影型別**,如下:
| 電影名稱 | 打鬥次數 | 接吻次數 | 電影型別 |
|--|--|--|--|
| 黑客帝國 | 115 | 6 | 動作片 |
| 功夫 | 109 | 8 | 動作片 |
| 戰狼 | 120 | 9 | 動作片 |
| 戀戀筆記本 | 5 | 78 | 愛情片 |
| 泰坦尼克號 | 6 | 60 | 愛情片 |
| 花樣年華 | 8 | 69 | 愛情片 |
可以看到,電影分成了兩類,分別是動作片和愛情片。
### 2,用KNN 演算法處理分類問題
如果現在有一部新的電影A,它的打鬥和接吻次數分別是80 和7,那如何用KNN 演算法對齊進行分類呢?
我們可以將打鬥次數作為**X 軸**,接吻次數作為**Y 軸**,將上述電影資料畫在一個座標系中,如下:
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20201129201227525.png?)
> 關於如何用Python 畫圖,可以參考文章[《如何使用Python 進行資料視覺化》](https://www.cnblogs.com/codeshell/p/14066350.html)
通過上圖可以直觀的看出,動作電影與愛情電影的分佈範圍是不同的。
**KNN 演算法**基於距離,它的原理是:**選擇與待分類資料最近的K 個點,這K 個點屬於哪個分類最多,那麼待分類資料就屬於哪個分類**。
所以,要判斷電影A 屬於哪一類電影,就要從已知的電影樣本中,選出距離電影A 最近的K 個點:
- 如果這K 個點中,屬於動作電影較多,那麼電影A 就屬於動作電影。
- 如果這K 個點中,屬於愛情電影較多,那麼電影A 就屬於愛情電影。
比如,我們從樣本中選出三個點(即 K 為 3),那麼距離電影A 最近的三個點是《功夫》,《黑客帝國》和《戰狼》,而這三部電影都是動作電影。因此,可以判斷電影A 也是動作電影。
另外,我們還要處理兩個問題:
1. 如何判斷點之間的距離。
2. 如何確定K 的值。
關於點之間的距離判斷,可以參考文章[《計算機如何理解事物的相關性》](https://www.cnblogs.com/codeshell/p/14046415.html)。
至於K 值的選擇,K 值較大或者較小都會對模型的訓練造成負面影響,K 值較小會造成**過擬合**,K 值較大**欠擬合**。
因此,K 值的選擇,一般採用**交叉驗證**的方式。
交叉驗證的思路是,把樣本集中的大部分樣本作為訓練集,剩餘部分用於預測,來驗證分類模型的準確度。一般會把 K 值選取在較小範圍內,逐一嘗試K 的值,當模型準確度最高時,就是最合適的K 值。
可以總結出,**KNN 演算法**用於分類問題時,一般的步驟是:
1. 計算待分類物體與其他物體之間的距離;
2. 按照距離進行排序,統計出距離最近的 K 個鄰居;
3. K 個最近的鄰居,屬於哪個分類最多,待分類物體就屬於哪一類。
### 3,用KNN 演算法處理迴歸問題
如果,我們現在有一部電影B,知道該電影屬於動作電影,並且知道該電影的接吻次數是**7**,現在想預測該電影的打鬥次數是多少?
這個問題就屬於**迴歸問題**。
> 分類問題的預測結果是離散值,
> 迴歸問題的預測結果是連續值。
首先看下,根據已知資料,如何判斷出距離電影B 最近的K 個點。
我們依然設定K 為3,已知資料為:
- 電影B 屬於動作電影。
- 電影B 的接吻次數是 7。
根據已知資料可以畫出下圖:
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20201129210315929.png?)
圖中我畫出了一條水平線,這條線代表所有接吻次數是7 的電影,接下來就是要找到距離**這條線**最近的三部(K 為 3)動作電影。
可以看到,距離這條水平線最近的三部動作電影是《功夫》,《黑客帝國》和《戰狼》,那麼這三部電影的打鬥次數的平均值,就是我們預測的電影B 的打鬥次數。
所以,電影B 的打鬥次數是:
- `(115 + 109 +120) / 3 ≈ 115`
### 4,總結
本篇文章主要介紹了**KNN 演算法**的基本原理,它簡單易懂,即可處理分類問題,又可處理迴歸問題。
**KNN 演算法**是基於**距離**的一種機器學習演算法,需要計算測試點與樣本點之間的距離。因此,當資料量大的時候,計算量就會非常龐大,需要大量的儲存空間和計算時間。
另外,如果樣本資料分類不均衡,比如有些分類的樣本非常少,那麼該類別的分類準確率就會很低。因此,在實際應用中,要特別注意這一點。
(本節完。)
---
**推薦閱讀:**
[***決策樹演算法-理論篇-如何計算資訊純度***](https://www.cnblogs.com/codeshell/p/13948083.html)
[***決策樹演算法-實戰篇-鳶尾花及波士頓房價預測***](https://www.cnblogs.com/codeshell/p/13984334.html)
[***樸素貝葉斯分類-理論篇-如何通過概率解決分類問題***](https://www.cnblogs.com/codeshell/p/13999440.html)
[***樸素貝葉斯分類-實戰篇-如何進行文字分類***](https://www.cnblogs.com/codeshell/p/14034097.html)
---
歡迎關注作者公眾號,獲取更多技術乾貨。
![碼農充電站pro](https://img-blog.csdnimg.cn/20200505082843773.png?#pic