KNN算法——分類部分

1.核心思想程序員

若是一個樣本在特徵空間中的k個最相鄰的樣本中的大多數屬於某一個類別,則該樣本也屬於這個類別,並具備這個類別上樣本的特性。也就是說找出一個樣本的k個最近鄰居,將這些鄰居的屬性的平均值賦給該樣本,就能夠獲得該樣本的屬性。面試

下面看一個例子,算法

  一個程序員面試結束後,想一想知道是否拿到offer,他在網上找到幾我的的工做經歷和大概薪資,以下,X爲年齡,Y爲工資;網絡

    

 

當k取1的時候,咱們能夠看出距離最近的no offer,所以獲得目標點爲不被錄用。數據結構

當k取3的時候,咱們能夠看出距離最近的三個,分別是有offer 和no offer,根據投票決定 offer的票數較高爲2 ,因此被錄用。測試

 

算法流程對象

1. 準備數據,對數據進行預處理,經常使用方法,特徵歸一化、類別型特徵的處理、高維組合特徵的處理、組合特徵的處理、文本表示模型的模型處理、Word2Vec、圖像數據不足時的處理方法blog

    

2. 選用合適的數據結構存儲訓練數據和測試元組,根據模型驗證方法,把樣本劃分不一樣的訓練集和測試集,好比holdout只須要劃分爲兩個部分,交叉驗證劃分爲k個子集,自助法跟着模型來隊列

3. 設定參數,如k的取值,這個涉及到超參數調優的問題,網絡搜索、隨機搜索、貝葉斯算法等效率

4.維護一個大小爲k的的按距離由大到小的優先級隊列,用於存儲最近鄰訓練元組。隨機從訓練元組中選取k個元組做爲初始的最近鄰元組,分別計算測試元組到這k個元組的距離,將訓練元組標號和距離存入優先級隊列

5. 遍歷訓練元組集,計算當前訓練元組與測試元組的距離,將所得距離L 與優先級隊列中的最大距離Lmax

6. 進行比較。若L>=Lmax,則捨棄該元組,遍歷下一個元組。若L < Lmax,刪除優先級隊列中最大距離的元組,將當前訓練元組存入優先級隊列。

7. 遍歷完畢,計算優先級隊列中k 個元組的多數類,並將其做爲測試元組的類別。

8. 測試元組集測試完畢後計算偏差率,繼續設定不一樣的k值從新進行訓練,最後取偏差率最小的k 值。

 

簡單來講,knn算法最重要的是三個要素:K值選擇,距離度量,分類決策規則,

 

K的選擇

  如k的取值,這個涉及到超參數調優的問題,k的取值對結果會有很大的影響。K值設置太小會下降分類精度,增長模型複雜度;若設置過大,且測試樣本屬於訓練集中包含數據較少的類,則會增長噪聲,下降分類效果。一般,K值的設定採用交叉檢驗的方式(以K=1,K=2,K=3依次進行),K折交叉驗證以下:

  

    1)  將所有訓練集S分紅K個不相交的子集,假設S中的訓練樣例個數爲m,那麼每個子集有m/k個訓練樣例。

 

     (2)  每次從分好的子集中,選出一個做爲測試集,另外k-1個做爲訓練集。

 

     (3)  根據訓練集獲得模型。

 

     (4)  根據模型對測試集進行測試,獲得分類率。

 

     (5)  計算k次求得的分類率的平均值,做爲模型的最終分類率。

以五折交叉驗證爲例;

 

 

 

 

分別得出K=1時的平均分類準確度、K=1時的平均分類準確度……選出最優K值

 

 

 

距離度量

 

在KNN算法中,經常使用的距離有三種,分別爲曼哈頓距離、歐式距離和閔可夫斯基距離。

距離通式:

 

當p=1時,稱爲曼哈頓距離

 

 

 

當p=2時,稱爲歐式距離

 

 

 

當p=∞時,

 

 

 

 

分類決策規則

 1.多數表決:少數服從多數,即訓練集裏和預測的樣本特徵最近的K個樣本,預測爲裏面有最多類別數的類別

 

 

2.加權表決:根據各個鄰居與測試對象距離的遠近來分配相應的投票權重。最簡單的就是取二者距離之間的倒數,距離越小,越類似,權重越大,將權重累加,最後選擇累加值最高類別屬性做爲該待測樣本點的類別,相似大衆評審和專家評審。

 

     這兩種確簡單直接,在樣本量少,樣本特徵少的時候有效,只適合數據量小的狀況。由於咱們常常碰到樣本的特徵數有上千以上,樣本量有幾十萬以上,若是咱們這要去預測少許的測試集樣本,算法的時間效率很成問題。所以,這個方法咱們通常稱之爲蠻力實現。比較適合於少許樣本的簡單模型的時候用。一個是KD樹實現,一個是球樹實現。

相關文章
相關標籤/搜索