轉:
- KNN算法的缺陷
觀察下面的例子,我們看到對於樣本X,通過KNN算法,我們顯然可以得到X應屬於紅點,但對於樣本Y,通過KNN算法我們似乎得到了Y應屬於藍點的結論,而這個結論直觀來看並沒有說服力。
由上面的例子可見:該算法在分類時有個重要的不足是,當樣本不平衡時,即:一個類的樣本容量很大,而其他類樣本數量很小時,很有可能導致當輸入一個未知樣本時,該樣本的K個鄰居中大數量類的樣本占多數。 但是這類樣本並不接近目標樣本,而數量小的這類樣本很靠近目標樣本。這個時候,我們有理由認為該位置樣本屬於數量小的樣本所屬的一類,但是,KNN卻不關心這個問題,它只關心哪類樣本的數量最多,而不去把距離遠近考慮在內,因此,我們可以采用權值的方法來改進。和該樣本距離小的鄰居權值大,和該樣本距離大的鄰居權值則相對較小,由此,將距離遠近的因素也考慮在內,避免因一個樣本過大導致誤判的情況。
從算法實現的過程可以發現,該算法存兩個嚴重的問題,第一個是需要存儲全部的訓練樣本,第二個是計算量較大,因為對每一個待分類的樣本都要計算它到全體已知樣本的距離,才能求得它的K個最近鄰點。KNN算法的改進方法之一是分組快速搜索近鄰法。其基本思想是:將樣本集按近鄰關系分解成組,給出每組質心的位置,以質心作為代表點,和未知樣本計算距離,選出距離最近的一個或若干個組,再在組的范圍內應用一般的KNN算法。由於並不是將未知樣本與所有樣本計算距離,故該改進算法可以減少計算量,但並不能減少存儲量。
___________________________________________________________________________
以上的快速搜索近鄰法,數據存儲量比原始knn還大。剪輯近鄰法,會減少模板數量,數量少了,計算也就少了。
思想是:如果兩個類中間有重疊部分,那重疊部分的樣本點肯定不好,會影響分類結果(因為那塊比較模糊,距離小,容易錯分),所以考慮把重疊部分的樣本點直接刪掉。
怎么刪:把數據集划分為訓練集和測試集。
如果數據足夠多,還可以多重剪輯,這樣剪的更多,“誤導樣本”更少。
————————————————————————————————————————————————————————————————————————
壓縮近鄰法,因為剪輯近鄰法只對重疊部分的樣本點剪輯了,剩下的數量還是很多。因此計算量還是很大。所以設計另一種方法,進一步減少模板樣本點。