KNN算法原理

k-NearestNeighbor,翻譯爲K最近鄰算法,是數據挖掘算法中最簡單的一種算法。

我們先用一個例子體會下。
在這裏插入圖片描述
我們很容易知道,這些電影的類型,那麼當有一部新電影出現的時候, 可不可以對其進行自動分類了?

我們可以把打鬥次數看成 X 軸,接吻次數看成 Y 軸,然後在二維的座標軸上,對這幾部電影進行標記,如下圖所示。

在這裏插入圖片描述

對於未知的電影 A,座標爲 (x,y),我們需要看下離電影 A 最近的都有哪些電影,這些電影中的大多數屬於哪個分類,那麼電影 A就屬於哪個分類。實際操作中,我們還需要確定一個 K 值,也就是我們要觀察離電影 A 最近的電影有多少個。

KNN 的工作原理

1、計算待分類物體與其他物體之間的距離;
2、統計距離最近的 K 個鄰居;
3、對於 K 個最近的鄰居,它們屬於哪個分類最多,待分類物體就屬於哪一類。

K 值如何選擇?

如果 K 值比較小,就相當於未分類物體與它的鄰居非常接近才行。這樣產生的一個問題就是,如果鄰居點是個噪聲點,那麼未分類物體的分類也會產生誤差,這樣 KNN 分類就會產生過擬合。
如果 K 值比較大,相當於距離過遠的點也會對未知物體的分類產生影響,雖然這種情況的好處是魯棒性強,但是不足也很明顯,會產生欠擬合情況,也就是沒有把未分類物體真正分類出來。

所以 K 值應該是個實踐出來的結果,並不是我們事先而定的。在工程上,我們一般採用交叉驗證的方式選取 K 值。

交叉驗證的思路就是,把樣本集中的大部分樣本作爲訓練集,剩餘的小部分樣本用於預測,來驗證分類模型的準確性。所以在 KNN 算法中,我們一般會把 K 值選取在較小的範圍內,同時在驗證集上準確率最高的那一個最終確定作爲 K 值。

距離如何計算?

在 KNN 算法中,還有一個重要的計算就是關於距離的度量。兩個樣本點之間的距離代表了這兩個樣本之間的相似度。距離越大,差異性越大;距離越小,相似度越大。

歐氏距離;
曼哈頓距離;
閔可夫斯基距離;
切比雪夫距離;
餘弦距離

其中前三種距離是 KNN 中最常用的距離,我給你分別講解下。
歐氏距離:
在這裏插入圖片描述

A(x1,x2),B(y1,y2)

同理,我們也可以求得兩點在 n 維空間中的距離:
在這裏插入圖片描述
曼哈頓距離在幾何空間中用的比較多。以下圖爲例,綠色的直線代表兩點之間的歐式距離,而紅色和黃色的線爲兩點的曼哈頓距離。所以曼哈頓距離等於兩個點在座標系上絕對軸距總和。用公式表示就是:
在這裏插入圖片描述
在這裏插入圖片描述
閔可夫斯基距離不是一個距離,而是一組距離的定義。對於 n 維空間中的兩個點 x(x1,x2,…,xn) 和 y(y1,y2,…,yn) , x 和 y 兩點之間的閔可夫斯基距離爲:
在這裏插入圖片描述
其中 p 代表空間的維數,當 p=1 時,就是曼哈頓距離;當 p→∞時,就是切比雪夫距離。

二個點之間的切比雪夫距離就是這兩個點座標數值差的絕對值的最大值,用數學表示就是:max(|x1-y1|,|x2-y2|)。

餘弦距離實際上計算的是兩個向量的夾角,是在方向上計算兩者之間的差異,對絕對數值不敏感。在興趣相關性比較上,角度關係比距離的絕對值更重要,因此餘弦距離可以用於衡量用戶對內容興趣的區分度。
比如我們用搜索引擎搜索某個關鍵詞,它還會給你推薦其他的相關搜索,這些推薦的關鍵詞就是採用餘弦距離計算得出的。

KD 樹

其實從上文你也能看出來,KNN 的計算過程是大量計算樣本點之間的距離。爲了減少計算距離次數,提升 KNN 的搜索效率,人們提出了 KD 樹(K-Dimensional)。

KD 樹是對數據點在 K 維空間中劃分的一種數據結構。在 KD 樹的構造中,每個節點都是 k 維數值點的二叉樹。既然是二叉樹,就可以採用二叉樹的增刪改查操作,這樣就大大提升了搜索效率。

我們不需要對 KD 樹的數學原理了解太多,你只需要知道它是一個二叉樹的數據結構,方便存儲 K 維空間的數據就可以了。而且在 sklearn 中,我們直接可以調用 KD 樹,很方便。

用 KNN 做迴歸

KNN 不僅可以做分類,還可以做迴歸。如何理解什麼是分類什麼是迴歸?
同一個特徵集,我們關注的目標變量決定了我們選用的是分類,亦或是迴歸;對於開頭提到的數據集,

如果,我們要根據打鬥次數,接吻次數來判斷電影類型----分類問題
如果,我們知道電影類型,想知道打鬥次數,接吻次數—迴歸問題

那麼 KNN 如何做迴歸呢?

對於一個新點,我們需要找出這個點的 K 個最近鄰居,然後將這些鄰居的屬性的平均值賦給該點,就可以得到該點的屬性。

舉個例子:
在這裏插入圖片描述
比如一部電影 A,已知它是動作片,當 K=3 時,最近的 3 部電影是《戰狼》,《紅海行動》和《碟中諜 6》,那麼它的打鬥次數和接吻次數的預估值分別爲(100+95+105)/3=100 次、(5+3+31)/3=13 次。

總結

1、knn最重要的是k的選擇與距離公式的選擇,我們爲了防止過擬合與欠擬合,採用交叉驗證的思維確定k;不同的需求,選用的距離公式也不同,比如對於推薦算法,採用餘弦距離最爲合適。
2、knn可以用作分類,也可以用作迴歸
3、knn的底層之一是距離計算過程的效率,這裏我們使用KD樹–二叉樹的數據結構,方便存儲 K 維空間的數據。
4、KNN是最基本的數據挖掘方法,同時也是推薦算法的基礎;如今推薦系統的算法會使用 TD-IDF、協同過濾、Apriori 算法

在這裏插入圖片描述

參看文獻

《數據分析實戰45講》
想要深入理解,參考
機器學習(周志華教授)
統計學習方法(李航博士)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章