1. 程式人生 > >K鄰近(KNN)分類和預測演算法的原理及實現

K鄰近(KNN)分類和預測演算法的原理及實現

K鄰近演算法(k-NearestNeighbor)簡稱KNN,是分類演算法中的一種。KNN通過計算新資料與歷史樣本資料中不同類別資料點間的距離對新資料進行分類。簡單來說就是通過與新資料點最鄰近的K個數據點來對新資料進行分類和預測。

我們以一個例項來說明KNN演算法的原理及實現過程。下圖是一組貸款使用者還款情況的樣本資料,其中包含了貸款使用者的年齡,貸款金額和是否還款。我們將基於這些歷史的貸款樣本資料,通過KNN演算法對新的貸款使用者進行還款預測。

原始資料

將貸款使用者的樣本資料按還款情況進行分類,並將兩類資料生成散點圖。在散點圖中,X軸為貸款使用者年齡,Y軸為貸款金額。綠色的方塊表示已經還款的使用者,藍色的三角表示未還款的使用者,紅色的圓圈代表新產生的資料(48歲使用者貸款142000元)。我們將依據這些已有明確分類的資料點對新產生的資料進行分類和預測。

散點圖

尋找距離最近的鄰居

KNN中對新資料點進行分類的方法是計算它與其他所有資料點間的距離,並以距離最近的點所在的分類作為新資料點的類別。計算距離的方法很多種,歐式距離,曼哈頓距離和閔可夫斯基距離這裡我們使用的是歐氏距離。

歐幾里德距離評價

歐幾里德距離評價在之前的協同過濾中我們已經介紹並使用過。以下是具體的計算公式。通過分別計算新增資料與歷史資料在X和Y兩個維度上的差值之和來獲得距離值。

Euclidean distance

下表是我們通過計算歐式距離獲得的距離值,通過這些資料點與新增資料間的距離來對新增資料進行分類。

Original data3

對資料進行分類

資料分類的方法很簡單,將計算獲得的距離值進行排序。距離最近的資料點所在的類別就是新增資料的分類。在這個示例中,33歲貸款150000元的資料點與新增資料點距離最近。因此我們認為新增資料點與他屬於同一個類別。為會還款的使用者分類。

Original data1

將距離值的計算結果還原到散點圖中可以看到,綠色方框與紅色圓圈的資料點距離最近,因此新增資料被分類到已還款的類別中。

Original data

這裡有一個問題。我們判斷的兩個維度是年齡和借款金額,這裡兩個維度的數值測量尺度存在較大的差異。貸款金額以萬元為單位,而年齡則以年為單位,貸款金額的數值明顯要比年齡大很多。這會對計算距離值產生影響,造成距離值的偏差。因此,為了更準確的計算距離值,我們需要先對兩類不同測量尺度的資料進行標準化。將資料等比例縮放到0-1區間中,然後再計算他們的距離值。

原始資料0-1標準化

我們使用0-1標準化方法對貸款金額和年齡兩個維度的資料進行標準化處理。以下是0-1標準化的計算公式。其中Max為最大值,Min為最小值,X為要進行標準化的資料。

資料標準化

通過0-1標準化後,年齡和貸款金額兩組資料都進行了等比例縮放,不再像標準化之前相差懸殊,變成了0-1區間無量綱的純數值。我們對標準化後的資料再次計算歐式距離。

原始資料標準化

0-1標準化後的資料在對距離進行排序後我們發現,結果與之前不一致了。標準化前新資料的分類為Y,也就是還款分類。而標準化後新資料被分到了N未還款的分類。

standardized data1

選擇並調整K值

無論是對原始資料的距離計算和分類還是標準化後的分類。我們都是以距離最近的資料點分類來表示的新資料類別。只用一個數據點(K值)進行分類的準確性並不高,並且可能會被資料中的噪聲影響而產生錯誤。一般情況下選擇多個K值比只選擇一個K值要更加準確,並且可以避免資料中噪聲的干擾。最優的K值一般應該在3-10個之間。

這裡我們選擇了K=6,6個數據點中4個為Y,2個為N。代表還款的Y出現的概率(0.67)要更高一些,所以新的資料點應該被分類為Y。當新資料的結果發生時,我們會將結果與現在的分類和預測進行對比,以調整和優化K值的選擇。

SD K=6

—【所有文章及圖片版權歸 藍鯨(王彥平)所有。歡迎轉載,但請註明轉自“藍鯨網站分析部落格”。】—