數據挖掘中的KNN

  K最近鄰算法是分類問題中經常使用的一種非參數方法。算法的思路清晰簡潔:對於待分類的樣本,找出與其最近的K個樣本(即訓練樣本中的K個)。然後對這K個樣本進行投票,待分樣本與多數樣本的類別一致。

 在該算法中有兩個最主要的問題:1、最近怎麼評價?2、到底K等於多少?

 對於第一個問題,我們分三種情況討論:

 A.標稱屬性:如果樣本的屬性值相同,則兩個樣本的距離爲0,否則爲1。舉例:有兩個樣本,其中有個屬性是性別,如果兩個樣本的性別都是男,則距離爲0,若一個爲男一個爲女,則距離爲1。

 B.序數屬性:如考慮學生的成績評定有如下的等級{poor,fair,ok,good,perfect}。我們可以這樣處理,將每個等級映射到從0開始的相繼整數{poor=0,fair=1,ok=2,good=3,perfect=4}。如何兩個學生的成績分別是good和fair,我們可以定義距離distance=3-1=2。

 C.連續屬性:可以用歐氏距離來衡量√∑(〔x-y〕(x-y))。如兩個點(1,2)和(3,4)之間的距離distance = √((1-3)*(1-3) + (2-4)*(2-4)) = √8 = 2√2 .

 假如一個樣本中包含以上三種屬性,我們需要對各屬性做歸一化之後再求距離。或者是選擇其他算法如決策樹、樸素貝葉斯等。

 對於第二個問題,我覺得比較好的辦法就是試探。設立一個確認樣本集,然後試探看看選定哪個K值的效果比較好。當然對於大規模數據這種方法可能不太行,這時工程師的經驗和判斷就顯得尤爲重要了。很多資料建議K值在3-10之間,經驗顯示這樣的K值能較好的控制噪聲的干擾。

 K最近鄰算法的特點:a.不需要建立模型(也稱消極學習方法),但是計算開銷很大,每次判斷一個樣本都要計算該樣本到所有訓練樣本的距離。

 b.可以生成任意形狀的邊界,而像決策樹算法只能生成線性的邊界。

 c.適當的距離度量準則非常重要。

 

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