k最近鄰(KNN)分類法介紹
阿新 • • 發佈:2019-01-02
1.急切學習與懶惰學習
急切學習:在給定訓練元組之後、接收到測試元組之前就構造好泛化(即分類)模型。
屬於急切學習的演算法有:決策樹、貝葉斯、基於規則的分類、後向傳播分類、SVM和基於關聯規則挖掘的分類等等。
懶惰學習:直至給定一個測試元組才開始構造泛化模型,也稱為基於例項的學習法。
屬於急切學習的演算法有:KNN分類、基於案例的推理分類。
2.KNN的優缺點
優點:原理簡單,實現起來比較方便。支援增量學習。能對超多邊形的複雜決策空間建模。
缺點:計算開銷大,需要有效的儲存技術和並行硬體的支撐。
3.KNN演算法原理
基於類比學習,通過比較訓練元組和測試元組的相似度來學習。
將訓練元組和測試元組看作是n維(若元組有n的屬性)空間內的點,給定一條測試元組,搜尋n維空間,找出與測試
元組最相近的k個點(即訓練元組),最後取這k個點中的多數類作為測試元組的類別。
相近的度量方法:用空間內兩個點的距離來度量。距離越大,表示兩個點越不相似。
距離的選擇:可採用歐幾里得距離、曼哈頓距離或其它距離度量。多采用歐幾里得距離,簡單!
4.KNN演算法中的細節處理
- 數值屬性規範化:將數值屬性規範到0-1區間以便於計算,也可防止大數值型屬性對分類的主導作用。
可選的方法有:v' = (v - vmin)/ (vmax - vmin),當然也可以採用其它的規範化方法
- 比較的屬性是分類型別而不是數值型別的:同則差為0,異則差為1.
有時候可以作更為精確的處理,比如黑色與白色的差肯定要大於灰色與白色的差。
- 缺失值的處理:取最大的可能差,對於分類屬性,如果屬性A的一個或兩個對應值丟失,則取差值為1;
如果A是數值屬性,若兩個比較的元組A屬性值均缺失,則取差值為1,若只有一個缺失,另一個值為v,
則取差值為|1-v|和|0-v|中的最大值
- 確定K的值:通過實驗確定。進行若干次實驗,取分類誤差率最小的k值。
- 對噪聲資料或不相關屬性的處理:對屬性賦予相關性權重w,w越大說明屬性對分類的影響越相關。對噪聲資料可以將所在
的元組直接cut掉。
5.KNN演算法流程
- 準備資料,對資料進行預處理
- 選用合適的資料結構儲存訓練資料和測試元組
- 設定引數,如k
- 維護一個大小為k的的按距離由大到小的優先順序佇列,用於儲存最近鄰訓練元組
- 隨機從訓練元組中選取k個元組作為初始的最近鄰元組,分別計算測試元組到這k個元組的距離,將訓練元組標號和距離存入優先順序佇列
- 遍歷訓練元組集,計算當前訓練元組與測試元組的距離,將所得距離L與優先順序佇列中的最大距離Lmax進行比較。若L>=Lmax,則捨棄該元組,遍歷下一個元組。若L < Lmax,刪除優先順序佇列中最大距離的元組,將當前訓練元組存入優先順序佇列。
- 遍歷完畢,計算優先順序佇列中k個元組的多數類,並將其作為測試元組的類別。
- 測試元組集測試完畢後計算誤差率,繼續設定不同的k值重新進行訓練,最後取誤差率最小的k值。
6.KNN演算法的改進策略
- 將儲存的訓練元組預先排序並安排在搜尋樹中(如何排序有待研究)
- 並行實現
- 部分距離計算,取n個屬性的“子集”計算出部分距離,若超過設定的閾值則停止對當前元組作進一步計算。轉向下一個元組。
- 剪枝或精簡:刪除證明是“無用的”元組。
7.KNN演算法java實現