關於K最近鄰分類演算法(KNN)的綜述
摘要
作為一種非引數的分類演算法, K近鄰(KNN)演算法是非常有效和容易實現的。 它已經廣泛應用於分類、迴歸和模式識別等 。在應用 KNN 演算法解決問題的時候, 要注意兩個方面的問題:—樣本權重和特徵權重。針對傳統的KNN分類演算法的不足,出現了很多改進的KNN演算法。本文對當前改進KNN的文字分類演算法進行了全面的綜述。
1.引言
K最近鄰(k-Nearest Neighbor,KNN)演算法最初由Cover和Hart於1968年提出,是一種惰性學習方法。KNN分類演算法,是一個理論上比較成熟的方法,也是最簡單的機器學習演算法之一。該方法的思路是:如果一個樣本在特徵空間中的k個最相似
KNN演算法不僅可以用於分類,還可以用於迴歸。通過找出一個樣本的k個最近鄰居,將這些鄰居的屬性的平均值賦給該樣本,就可以得到該樣本的屬性。更有用的方法是將不同距離的鄰居對該樣本產生的影響給予不同的
KNN的分類效能較好。隨著理論上的深入研究和分析,現在已在很多領域得到廣泛的應用,例如,模式識別、文字分類、影象及空間分類等。其自身的有點有:原理簡單,易於理解和實現;不需要建立顯示的模型,只需要建立訓練樣本庫,當新樣本加入時,不需要重新訓練;分類效能穩定,分類效果顯著。當然該演算法在分類時有個主要的不足是,當樣本不平衡時,如一個類的樣本容量很大,而其他類樣本容量很小時,有可能導致當輸入一個新樣本時,該樣本的K個鄰居中大容量類的樣本佔多數。 該演算法只計算"最近的"鄰居樣本,某一類的樣本數量很大,那麼或者這類樣本並不接近目標樣本,或者這類樣本很靠近目標樣本。無論怎樣,數量並不能影響執行結果。該方法的另一個不足之處是計算量較大,因為對每一個待分類的文字都要計算它到全體已知樣本的距離,才能求得它的
2.傳統的KNN演算法
傳統的KNN演算法是理論上非常成熟的演算法,其基本思想比較簡單、易於理解。首先根據距離度量函式計算待分類樣本x和訓練集中的每個樣本的距離,對計算出的距離排序,選擇與待分類樣本最近的k個訓練樣本作為x的k個最近鄰,如果這k個最近鄰中屬於某一類的樣本佔多數,則將代分類樣本x歸為該類別。
具體步驟如下:
Step1:構建訓練樣本集和測試樣本集。訓練樣本集表示為R={(,)|i=1,2,...,n},其中=(,,...,)是一個p維向量,表示第i個訓練樣本的第j個特徵分量值。表示第i個樣本相應的類別,且屬於標籤集合C,C={1,2,3,...,t},t為類別數。測試樣本集表示為T={|j=1,2,...,m},其中=(, ,...,)是一個p維向量,表示第j個測試樣本的第i個特徵分量值。
Step2:設定k值。一般先確定一個初始值,然後根據實驗結果反覆調整至最優。
Step3:計算測試樣本和每個訓練樣本的歐氏距離。公式如下:
Step4:選擇k個近鄰樣本。將計算出的距離降序排列,選擇距離相對較小的k個樣本作為測試樣本的k個近鄰。
Step5:找出主要類別:設k個近鄰為x1,x2,...,xk,相應的類別標籤為c1,c2,...,ct,這些類別標籤屬於標籤集C。根據k個近鄰的類別並應用最大概率對所查詢的測試樣本進行分類。所用概率指的是每一類別出現k個近鄰中的比例,其根據每一類別出現在k個近鄰中的樣本數量除以k來計算。那麼擁有最大概率的類別記為主要類別。設S={s1,s2,...,st}為k個近鄰中每一類別樣本數量的集合。則
Ω=
Step6:將待測樣本歸為Ω類。
傳統的KNN建立在VSM模型上,使用歐氏距離作為其樣本間距離度量函式,歐氏距離認為特徵向量維度具有相同的權值,即各特徵維度對分類的貢獻率是相同的,這並不符合實際情況。因此,很多學者致力於改進KNN演算法的研究。
3.KNN演算法的改進
通過國內外許多學者對KNN演算法做了大量的研究,發現其改進方法可大致分為以下幾類:
A.對樣本篩選
訓練樣本集中並不是所有的樣本對分類都是有貢獻的,有些樣本能夠很好的代表其所在的類別,但是有些樣本對其所在類別的代表性很弱甚至不具有代表性。因此,為了減少計算複雜度,提高分類效率,需要對樣本進行篩選,刪除那些沒有代表性的或者代表性很弱的樣本
B.改進距離度量公式
傳統的KNN演算法中以歐氏距離作為其距離度量公式,後來很多人使用向量夾角的餘弦作為相似性度量公式。也有使用DTW演算法計算距離。
C.對查詢k個近鄰樣本的方法的改進
在KNN分類中查詢k個近鄰樣本是一個重要步驟,傳統的KNN是使用排序。搜尋樹是一種快速查詢的方法,因此,有研究員使用搜索樹作為查詢k個近鄰樣本的方法。
D.對k取值方法的改進
傳統的KNN對k的取值是不斷通過實驗結果反覆進行調整。Ghosh等採用動態的方法來確認k值,建立由k的分類索引的有限序列,通過幾個基準資料集的分析,證明該方法比單純用一個k有效。還有一些學者採用隨機對k取值,每次的實驗結果會有不同,選擇一個比較好的實驗結果來確認k值。
4.各種改進的KNN演算法
4.1基於特徵加權的KNN演算法
KNN演算法認為各維特徵對分類的貢獻是相同的,而事實上,構成樣本特徵向量的各維特徵來自不同的樣本, 存在量綱差異,精度及可靠性也可能不同,而且所選擇的特徵集也未必適合於模式的分類。鑑於此,將探討一種改進的K最近鄰演算法,該演算法考慮各維特徵對模式分類的不同貢獻,以便獲得更有效的分類效果。
設一個給定的測試樣本為t,特徵為f,定義在特徵f上的最近鄰演算法為 KBag(f,t,k),該函式計算測試樣本t在特徵f權值上最近的 k個鄰居。然後對每一個類別進行k次投票,因此每一特徵維度上就有k次的投票機會。測試樣本的類別由這些特徵上的k次投票結果綜合決定。
目前對所提取的特徵所採用的特徵子集選取演算法一般是構造一個評價函式, 對特徵集中的每一個特徵進行獨立的評估,這樣每個特徵都獲得一個評估分, 然後對所有的特徵按照評估分的大小排序,選取預定數目的最佳特徵作為結果的特徵子集。一般採用的評估函式有資訊增益、互資訊、期望交叉熵、χ2統計 、出現頻次和機率比等。針對論文抄襲檢測問題,實驗表明採用資訊增益評估函式效果較好 。權重的計算採用TFIDF公式, 其中TF是特徵項在樣本中的絕對頻率,而IDF表示特徵項在樣本中的頻數。
4.2基於SVM的KNN演算法
我們對SVM 分類時錯分樣本的分佈進行分析發現,SVM分類器和其它的分類器一樣,其出錯樣本點都在分介面附近,這提示我們必須儘量利用分介面附近所提供的資訊以提高分類效能。由SVM 理論知道,分介面附近的樣本基本上都是支援向量,同時SVM可以看成每類只有一個代表點的最近鄰( Nearst Neighbour , NN ) 分類器。所以結合 SVM 和 NN , 對樣本在空間的不同分佈使用不同的分類法。具體地, 當樣本和 SVM最優超平面的距離大於給定的閾值, 即樣本離分介面較遠, 則用 SVM 分類,反之用 KNN 對測試樣本分類。 在使用 KNN 時以每類的所有的支援向量作為代表點組, 這樣增加的運算量很少。 實驗證明了使用支援向量機結合最近鄰的分類器分類比單獨使用支援向量機分類具有更高的分類準確率,同時可以較好地解決應用支援向量機分類時核函式引數的選擇問題。
將 SVM 和 KNN 分類器結合的考慮是將 SVM 看成每類只有一個代表點的 1NN 分類器。由於 SVM 對每類支援向量只取一個代表點,有時該代表點不能很好的代表該類,這時將其與KNN 相結合是因為 KNN 是將每類所有支援向量作為代表點,從而使分類器具有更高的分類準確率。具體地,對於待識別樣本 x ,計算 x 與兩類支援向量代表點 x+ 和 x- 的距離差,如果距離差大於給定的閾值,即 x 離分介面較遠, 如圖 1 中區域 I 和II ,用 SVM 分類一般都可以分對。當距離差小於給定的閾值,即x 離分介面較近,即落入區域 III 時, 如分類用 SVM ,只計算 x與兩類所取的一個代表點的距離比較容易分錯,這時採用KNN 對測試樣本分類,將每個支援向量作為代表點,計算待識別樣本和每個支援向量的距離對其得出判斷。在對資料的封閉測試( 用訓練樣本作為測試集) 中, SVM- KNN 分類器的輸出接近於 100% 。這是由於支援向量大多位於分類超平面附近, 即屬於上圖中的區域 III ,此時代入 1NN 對其分類,對於每個支援向量, 都能找到支援向量自己作為最近鄰,其結果總是正確的。
SVM- KNN 改進演算法步驟如下:
首先利用任何一種 SVM 演算法, 求出相應的支援向量和它的係數以及常數 b , 設 T 為測試集, Tsv 為支援向量集, k 為KNN 的個數。
步驟 1: 如果 T≠Φ , 取 x∈T , 如果 T=Φ , 停止;
步驟 2: 計算公式: g ( x ) = ( 2 )
步驟 3 : 如果 |g ( x ) |>ε , 直接計算 f ( x ) =sgn ( g ( x ) ) 作為輸出;如果 |g ( x ) |<ε , 代入 KNN 演算法分類, 傳遞引數 x 、 Tsv 、 k , 返回結果為輸出。
步驟 4 : T=T- {x} , 返回步驟 1 。
上述演算法步驟 3 中使用的 KNN 分類演算法和通常的 KNN分類演算法流程相同, 將支援向量集 Tsv 作為分類演算法的代表點集合即可。 所不同之處在於計算測試樣本和每個支援向量的距離是在特徵空間進行的而不是在原始樣本空間中計算, 其使用的距離公式不是通常的歐氏距離公式, 而是採用下式計算距離:
, (3)
類似於 SVM , 針對不同應用問題可以選擇式( 3 ) 中的核函式。演算法中的分類閾值ε通常設為 1 左右, 當ε設為 0 , KSVM就是 SVM 演算法。
4.3基於DTW的KNN演算法
對於我們在尋找關於改進KNN的距離度量公式時,發現對於一些分類的特徵樣本數量可能因為一些不可抗拒因素不一致時,這時使用一般的距離度量公式不能很好地計算出來。通過研究發現動態時間規整演算法(DTW)可以很好的代替KNN演算法中距離的計算公式。該方法目前研究的論文較少,本人目前在研究這個演算法融合,實驗效果不錯,但是還需要大量的實驗來驗證其效果。
5.結語
本文首先討論 KNN 的基本思想及其傳統演算法步驟,然後分析了目前 KNN 演算法存在的問題 ( curse of dimensionality) , 最後提出了一些關於KNN的改進演算法。這些改進的演算法都通過了實驗驗證其效果,實驗結果表明 , 針對不同的情況用不同的改進演算法得到的結果遠好於單純的用傳統KNN演算法。對於KNN演算法的期望是在未來能將其不足之處都通過和別的方法融合,實現KNN演算法的最大效果。
6.文獻摘要
(1)趙俊傑,盛劍鋒,陶新民;一種基於特徵加權的 KNN文字分類演算法
(2)李程雄,丁月華,文貴華; SVM- KNN 組合改進演算法在專利文字分類中的應用;計算機工程與應用 2006.20,P193-196
(3)鍾將,劉榮輝; 一種改進的KNN文字分類; 計算機工程與應用P142-144
(4)陳振洲,李磊,姚正安; 基於SVM的特徵加權KNN演算法; 中山大學學報 ( 自然科學版)
(5)jiawei Han,Jian Pei等著;資料探勘概念與技術.機械工業出版社.
(6)張寧,賈自豔,史忠植;使用KNN演算法的文字分類.計算機工程,2005,31(08):171-172.