1. 程式人生 > >用於大資料分類的KNN演算法研究

用於大資料分類的KNN演算法研究

            隨著資訊科技的快速發展,大資料時代已經到來,人們迫切需要研究出更加方便有效的工具對收集到的海量資訊進行J決速準確的分類,以便從中提取符合需要的、簡潔的、精煉的、可理解的知識。口前關於這方而的研究已經取得了很大的進步。現有的分類演算法有很多種,比較常用的有KNN,Native Bayes, Neural Net 、SVM,LLSF 等方法。

        針對這些演算法處理大規模資料時存在的問題,國內外已經進行了很多相關方而的研究。文獻【6】針對傳統支援向量機方法處理大規模資料時時間複雜度和空間複雜度隨資料量的增加直線上升的缺點,提出了核向量機(core vector machineCVM)方法,大大減小了演算法的時間和空間複雜度;文獻【Faster retrieval with a two-pass dynamic time warping lower bound

】對向量機方法進行了進一步研究,提高了核向量機的分類速度和泛化能力,但是其分類精度依然沒有得到改善;文獻【time warp edit distance with stiffness adjustment for time series matching】提出了一種聚簇消減大規模資料的支援向量分類演算法,提高了傳統演算法處理大規模資料時的速度,同時降低了演算法的時間複雜度,但是精度也只有在閡值選擇適當時才有可能達到既減少訓練時間又提高精度的雙贏目的。    KNN作為一種經典的統計模式識別方法,也是效果最好的分類方法之一,而且KNN方法主要靠周圍有限的鄰近樣本,而不是靠判別類域的方法來確定所屬類別,因此對於類域的交叉或重疊較多的大資料來說,KNN方法較其他方法更為適合,但KNN在分類時主要的不足是該演算法只計算最近的鄰居樣本,某一類的樣本數量很大,容易出現誤判。現在主要採用權值的方法(與該樣本距離小的鄰居權值大)來改進,但是權值的設定針對不同的領域又要有不同的要求,實用性不是很高。該方法的另一個不足之處是計算量較大,因為對每一個待分類的文字都要計算它到全體已知樣本的距離,才能求得它的K個最近鄰點。口前常用的解決方法是事先對已知樣本點進行剪輯,但樣本的剪輯經常帶來後續的判別誤差。本文針對大資料和KNN演算法的特點,提出了DM-KNN演算法,有效地解決了KNN演算法對大資料的分類問題。

       一:KNN演算法及其存在問題
       1. 1   KNN文字分類演算法:KNN法由Cover和Hart於1968年提出,是一個理論上比較成熟的方法。該演算法的基本思想是:根據傳統的向量空間模型,文字內容被形式化為特徵空間中的加權特徵向量。對於一個測試文字,計算它與訓練樣本集中每個文字的相似度,找出K個最相似的文字,根據加權距離和判斷測試文字所屬的類別,具體演算法步驟如下:
        a)對於一個測試文字,根據特徵詞形成測試文字向量。
        b)計算該測試文字與訓練集中每個文字的文字相似度,按照文字相似度,在訓練文字集中選出與測試文字最相似的k個文字。
        c)在測試文字的k個近鄰中,依次計算每類的權重。
        d)比較類的權重,將文字分到權重最大的那個類別中。

       1. 2  KNN演算法處理大資料時存在的問題
       KNN演算法穩定性好、準確率高、簡單易用,針對大資料的分類問題,它存在著如下缺點:a)對每一個待分類的文字都要計算它到全體已知樣本的距離,才能求得它的K個最近鄰點,而大資料的典型特點就是資料資訊海量、價值密度低,這就顯然出現了很大的無效計算量,在決定測試樣本的類別時,該演算法只計算最近鄰的樣本【neighbor-weighted K-nearest neighbor for unbalanced text corpus】,而大資料的另一個顯著特點是涉及領域繁多、類別界限不明顯,對於此類文字容易使判決結果產生偏差;c)隨著資訊爆炸時代的到來,各種新的事物層出不窮,出現新的類別的概率極大,而KNN演算法的鄰居都是已知的類別樣本,也就導致了對新樣本的無知或者誤判。

       二:改進的KNN演算法
       2.1分層模型的應用
    分層模型的基本思想是根據所屬類別的不同對已知樣本進行分層,第一層包含的類別數最少,最後一層包含的類別數最多,然後依層對未知樣本進行分類。圖1以社群民情民意資訊的分層為例,圖中共分了三層。


                                       圖1

    第一層只有a和b兩個類別,如果判斷出來未知樣本屬於a類,那麼在第二層時只需在a1,a2,a3類中進行比較,不需要在b類的其他文字進行比較。在第二層判斷時,如果判斷出來屬於a1類,那麼在第三層進行比較時只需要在a11,a12類中進行比較,依此類推即可。圖1中菱形部分為分層模型需要比較的類別數,而傳統的方法是需要對所有的資料進行比較。從圖1中可見分層模型可以大大減少無效計算量。

      2. 2差分模型的應用
    本文用圖示的方法來解釋差分模型的思想。圖2中,x是未知樣本,a,b,c,d為已知類別,其中x到a ,b,c,d的距離分別
a,b,c,d,如圖2所示。

                                                                                       

    如果a=max {a, b, c, d},△b=max { △b , △c , △d},那麼按照傳統KNN演算法的思想,只需要把未知樣本分配到a類中,根據分層思想,此時只需要在把未知樣本x與a類中的子類a1,a2,a3,a4、再次利用KNN演算法進行分類即可;但是如果利用差分模型,當且僅當|a|-|△b|>m時,才能將x判別到a類中,否則將x判別到a和b類中,然後對a和b類的子類再次進行KNN演算法,如圖3 (b)所示。

     2. 3改進的KNN演算法—差分多層KNN (DM-KNN)演算法
    針對大資料的自身特點以及KNN演算法的缺點,演算法主要在以下幾個方而進行了改進:a)構建樹狀分層結構,針對KNN演算法計算量比較大的缺點,本文改進後的演算法採用構建樹狀分層結構首先對高層進行比較,然後依據高層比較結果的不同,再依次對下一層次進行比較,相比直接對所有文字進行距離計算,計算量明顯減少,同時提高了運算速度;b)差分比較,由於大資料具有類域交叉性的特點,該演算法不是在權重比較結束後直接進行判斷,而是又針對大資料的類域交叉性進行了一次差分比較,可以有效地防止最近鄰和次近鄰誤判的情況;c)動態增加類別,由於大資料中資訊的不可預知性,該演算法針對最終比較結果不能判斷隸屬於哪個類別的情況,在演算法最後可以動態增加新類別。具體演算法步驟如下:

a)對於一個測試文字,根據特徵詞形成測試文字向量。

b)對於訓練文字集,利用專業領域知識,通過文字資料的分析定義出分層類別,將其構建成n層樹狀形式。

c)依次計算該測試文字與第1一n層訓練集中每個文字的文字相似度(以下以第1層為例):1.文字相似度計算式為


上式中:di為測試文字的特徵向量;d1j為第1層第J類的中心向量;M為特徵向量的維數;wk為向量的第k維;K值的確定一般
先採用一個初始值,然後根據實驗測試的結果調整K值。按照文字相似度,在訓練文字集中選出與測試文字最相似的K個文字。2.在測試文字的K個近鄰中,依次計算每類的權重3.對計算的權重進行排序4.對排序後的權重進行差分比較:
    ①D12=P11-P12。如果D12D0,(D0為閡值,有待於優化選擇),則測試文字屬於第1類,在對第二層進行相似度比較的時候,只需要比較第二層中第1類的子類;如果D12D0,則繼續進行判斷。
    ②Dk(k+1)=P1k-P1(k+1) 如果Dk(k+1)D0,則測試文字屬於第1一k類中的其中一類,在對第二層進行比較時,只需要
比較第二層中第1類中第k類的子類;如果Dk(k+1)D0則繼續進行判斷。
    d)第n層,對於權重的差分比較結果,若比較結果不是單一的,採用動態增加類別的方法,在文字第,;層增加一個類;若比較結果單一,就將文字分到權重最大的那個類別中。
       2. 4時間複雜度分析

       由演算法可知,KNN演算法在時間上的代價主要在於測試樣本與訓練樣本庫中樣本之間的相似度訓計算。按照傳統的KNN演算法中直接計算測試樣本與訓練集中每個樣本的相似度的方法,其時間複雜度為O(n2);而DM-KNN演算法中構建樹狀分層結構,計算相似度時不需要對n個樣本集都進行計算,只需要與分層之後相似層下的樣本進行相似度計算,演算法的複雜度降為O (nlogn)。也就是說改進後的演算法時間複雜度遠小於KNN演算法或者類似於KNN演算法的時間複雜度。