機器學習---KNN

一、概述

kNN算法的核心思想:如果一個樣本在特徵空間中的k個最相鄰的樣本中的大多數屬於某一個類別,則該樣本也屬於這個類別,並具有這個類別上樣本的特性。

K-NN可以看成:有那麼一堆你已經知道分類的數據,然後當一個新數據進入的時候,就開始跟訓練數據裏的每個點求距離,然後挑離這個訓練數據最近的K個點看看這幾個點屬於什麼類型,然後用少數服從多數的原則,給新數據歸類。

二、KNN算法

1.算法流程:

1)計算待分類點與已知類別的點之間的距離

2)按照距離遞增次序排序

3)選取與待分類點距離最小的k個點

4)確定前k個點所在類別的出現次數

5)返回前k個點出現次數最高的類別作爲待分類點的預測分類

2.算法模型關鍵點

1)距離向量:歐式距離、曼哈頓距離等

2)K值選擇:K越小,分類邊界曲線越曲折,偏差越小,方差越大;K越大,分類邊界曲線越平坦,偏差越大,方差越小

3)分類決策規則:投票決定:少數服從多數,近鄰中哪個類別的點最多就分爲該類。加權投票法:根據距離的遠近,對近鄰的投票進行加權,距離越近則權重越大(權重爲距離平方的倒數)

3.算法實現

線性掃描在訓練集非常大時,計算非常耗時。一般採用Kd樹實現:

kd樹(K-dimension tree)是一種對k維空間中的實例點進行存儲以便對其進行快速檢索的樹形數據結構。kd樹是是一種二叉樹,表示對k維空間的一個劃分,構造kd樹相當於不斷地用垂直於座標軸的超平面將K維空間切分,構成一系列的K維超矩形區域。kd樹的每個結點對應於一個k維超矩形區域。利用kd樹可以省去對大部分數據點的搜索,從而減少搜索的計算量。

kd樹生成規則:以中位數劃分

4.KNN優缺點

優點:

1)簡單,易於理解,易於實現,無需估計參數,無需訓練;

2)適合對稀有事件進行分類(例如當流失率很低時,比如低於0.5%,構造流失預測模型);

3)特別適合於多分類問題(multi-modal,對象具有多個類別標籤)kNNSVM的表現要好。

缺點:

1)當樣本不平衡時,如一個類的樣本容量很大,而其他類樣本容量很小時,有可能導致當輸入一個新樣本時,該樣本的K個鄰居中大容量類的樣本佔多數,少數類容易分錯。

2)需要存儲全部訓練樣本。

3)計算量較大,因爲對每一個待分類的文本都要計算它到全體已知樣本的距離,才能求得它的K個最近鄰點。

5.改進策略

kNN算法因其提出時間較早,隨着其他技術的不斷更新和完善,kNN算法的諸多不足之處也逐漸顯露,因此許多kNN算法的改進算法也應運而生。

針對以上算法的不足,算法的改進方向主要分成了分類效率和分類效果兩方面。

分類效率:事先對樣本屬性進行約簡,刪除對分類結果影響較小的屬性,快速的得出待分類樣本的類別。該算法比較適用於樣本容量比較大的類域的自動分類,而那些樣本容量較小的類域採用這種算法比較容易產生誤分。

分類效果:採用權值的方法(和該樣本距離小的鄰居權值大)來改進,Han等人於2002年嘗試利用貪心法,針對文件分類實做可調整權重的k最近鄰居法WAkNN (weighted adjusted k nearest neighbor),以促進分類效果;而Li等人於2004年提出由於不同分類的文件本身有數量上有差異,因此也應該依照訓練集合中各種分類的文件數量,選取不同數目的最近鄰居,來參與分類。

三、KNN延申

1.快速搜索近鄰

其基本思想是將樣本集按鄰近關係分解成組,給出每組的質心所在,以及組內樣本至該質心的最大距離。這些組又可形成層次結構,即組又分子組,因而待識別樣本可將搜索近鄰的範圍從某一大組,逐漸深入到其中的子組,直至樹的葉結點所代表的組,確定其相鄰關係。

這種方法着眼於只解決減少計算量,但沒有達到減少存儲量的要求。

2.剪輯近鄰法

剪輯近鄰法:其基本思想是,利用現有樣本集對其自身進行剪輯,將不同類別交界處的樣本以適當方式篩選,可以實現既減少樣本數又提高正確識別率的雙重目的。

剪輯的過程是:將樣本集KN分成兩個互相獨立的子集:testKTreferenceKR。首先對KT中每一個XiKR中找到其最近鄰的樣本Yi(Xi) 。如果YiXi不屬於同一類別,則將XiKT中刪除,最後得到一個剪輯的樣本集KTE(剪輯樣本集),以取代原樣本集,對待識別樣本進行分類。 

3.壓縮近鄰法

壓縮近鄰法:利用現有樣本集,逐漸生成一個新的樣本集,使該樣本集在保留最少量樣本的條件下,仍能對原有樣本的全部用最近鄰法正確分類,那末該樣本集也就能對待識別樣本進行分類,並保持正常識別率。

定義兩個存儲器,一個用來存放即將生成的樣本集,稱爲Store;另一存儲器則存放原樣本集,稱爲Grabbag。其算法是:

1)初始化Store是空集,原樣本集存入Grabbag;從Grabbag中任意選擇一樣本放入Store中作爲新樣本集的第一個樣本。

2)樣本集生成。在Grabbag中取出第i個樣本用Store中的當前樣本集按最近鄰法分類。若分類錯誤,則將該樣本從Grabbag轉入Store中,若分類正確,則將該樣本放回Grabbag中。

3)結束過程。若Grabbag中所有樣本在執行第二步時沒有發生轉入Store的現象,或Grabbag已成空集,則算法終止,否則轉入第二步。 

 

 

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