k-nearestneighbor,翻譯為k最近鄰演算法,是資料探勘演算法中最簡單的一種演算法。
我們先用乙個例子體會下。
我們很容易知道,這些電影的型別,那麼當有一部新電影出現的時候, 可不可以對其進行自動分類了?
我們可以把打鬥次數看成 x 軸,接吻次數看成 y 軸,然後在二維的座標軸上,對這幾部電影進行標記,如下圖所示。
對於未知的電影 a,座標為 (x,y),我們需要看下離電影 a 最近的都有哪些電影,這些電影中的大多數屬於哪個分類,那麼電影 a就屬於哪個分類。實際操作中,我們還需要確定乙個 k 值,也就是我們要觀察離電影 a 最近的電影有多少個。1、計算待分類物體與其他物體之間的距離;
2、統計距離最近的 k 個鄰居;
3、對於 k 個最近的鄰居,它們屬於哪個分類最多,待分類物體就屬於哪一類。
如果 k 值比較小,就相當於未分類物體與它的鄰居非常接近才行。這樣產生的乙個問題就是,如果鄰居點是個雜訊點,那麼未分類物體的分類也會產生誤差,這樣 knn 分類就會產生過擬合。
如果 k 值比較大,相當於距離過遠的點也會對未知物體的分類產生影響,雖然這種情況的好處是魯棒性強,但是不足也很明顯,會產生欠擬合情況,也就是沒有把未分類物體真正分類出來。
所以 k 值應該是個實踐出來的結果,並不是我們事先而定的。在工程上,我們一般採用交叉驗證的方式選取 k 值。
交叉驗證的思路就是,把樣本集中的大部分樣本作為訓練集,剩餘的小部分樣本用於**,來驗證分類模型的準確性。所以在 knn 演算法中,我們一般會把 k 值選取在較小的範圍內,同時在驗證集上準確率最高的那乙個最終確定作為 k 值。
在 knn 演算法中,還有乙個重要的計算就是關於距離的度量。兩個樣本點之間的距離代表了這兩個樣本之間的相似度。距離越大,差異性越大;距離越小,相似度越大。
歐氏距離;
曼哈頓距離;
閔可夫斯基距離;
切比雪夫距離;
余弦距離
其中前三種距離是 knn 中最常用的距離,我給你分別講解下。
歐氏距離:
同理,我們也可以求得兩點在 n 維空間中的距離:
曼哈頓距離在幾何空間中用的比較多。以下圖為例,綠色的直線代表兩點之間的歐式距離,而紅色和黃色的線為兩點的曼哈頓距離。所以曼哈頓距離等於兩個點在座標系上絕對軸距總和。用公式表示就是:
閔可夫斯基距離不是乙個距離,而是一組距離的定義。對於 n 維空間中的兩個點 x(x1,x2,…,xn) 和 y(y1,y2,…,yn) , x 和 y 兩點之間的閔可夫斯基距離為:
其中 p 代表空間的維數,當 p=1 時,就是曼哈頓距離;當 p→∞時,就是切比雪夫距離。
二個點之間的切比雪夫距離就是這兩個點座標數值差的絕對值的最大值,用數學表示就是:max(|x1-y1|,|x2-y2|)。余弦距離實際上計算的是兩個向量的夾角,是在方向上計算兩者之間的差異,對絕對數值不敏感。在興趣相關性比較上,角度關係比距離的絕對值更重要,因此余弦距離可以用於衡量使用者對內容興趣的區分度。其實從上文你也能看出來,knn 的計算過程是大量計算樣本點之間的距離。為了減少計算距離次數,提公升 knn 的搜尋效率,人們提出了 kd 樹(k-dimensional)。
kd 樹是對資料點在 k 維空間中劃分的一種資料結構。在 kd 樹的構造中,每個節點都是 k 維數值點的二叉樹。既然是二叉樹,就可以採用二叉樹的增刪改查操作,這樣就大大提公升了搜尋效率。我們不需要對 kd 樹的數學原理了解太多,你只需要知道它是乙個二叉樹的資料結構,方便儲存 k 維空間的資料就可以了。而且在 sklearn 中,我們直接可以呼叫 kd 樹,很方便。
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講》
想要深入理解,參考
機器學習(周志華教授)
統計學習方法(李航博士)
KNN演算法原理
knn演算法的計算過程 knn演算法的優點和缺點 k最近鄰 k nearest neighbor,knn 演算法核心思想是如果乙個樣本在特徵空間中的k個最臨近的樣本中的大多數屬於某乙個類別,則該樣本也屬於這個類別。k通常是不大於20的整數。三要素為 k值的選取,距離度量的方式和分類決策規則。對於k值...
knn演算法原理
import pandas as pd import numpy as np def distance v1,v2 自實現距離計算 param v1 點v1 param v2 點v2 return 距離 法一 ndim len v1 summary 0 for i in range ndim sum...
KNN演算法原理與實現
knn k nearest neighbors 演算法不需要訓練過程,直接利用樣本之間的距離進行分類。演算法的基本過程是 給定乙個測試樣例,分別計算它與訓練集中所有樣本之間的距離,選取距離最小的k個訓練樣本對測試樣例的類別進行投票,最後將得票最多 在k個樣本中最多的類別 作為測試樣例的 類別。需要注...