基於lsh的增量學習分類器、海量數據分類處理複雜度O(1)準確度超越KNN

    目前分類器主要有 svm knn 神經網絡等。各自有優點,應用在很多行業,只有knn具備增量學習的能力。但是knn無法處理海量數據,因爲knn需要搜索查找最近的數據。雖然有kd樹等方法,但是在高維數據上無能爲力。圖像數據聲音數據等的分類上,大部分都是高維數據,動輒幾十上百維。Svm 是全局最優解,需要所有的樣本數據參加計算。其他的各種分類算法就不一一例舉了,網上有很多資料。目前爲止沒有一個算法能做到完美的增量學習和海量數據處理。爲什麼需要海量數據處理?智能來自於大量的數據背後發現其各種規律和模式,所以必須具備海量數據處理的能力。

目前提出基於lsh增強knn算法。LSH (local sensitive hash), 該算法就是針對高維海量數據的處理。是近似最近鄰查找(Approximate Nearest Neighbor, ANN),在一定概率上畢竟KNN。目前有E2LSH KLSH 等算法,能夠在很大的概率上接近KNN的效果。

但目前仍然無法做到O(1)的複雜度。如果要對海量數據處理,需要具備近似 O1 或者O log(N) 的複雜度,暫時忽略維度,對lsh來說維度影響都不具備維數災難。否則當數據量到一定程度比如百萬千萬級別,都會無法做到實時響應。

另一個問題是當前的LSH算法需要計算數據集的分佈模型。如e2lsh 是依據p穩態分佈,需要計算分佈的參數,才能得到高的召回率和分類速度,無法用於增量學習。

目前使用以下思路解決當前lsh面臨的問題,並且準確度超過原始KNN,其他lsh只能無限接近KNN:

1、  使用自適應的lsh樹。

2、  多臨近桶探測。

3、  多顆lsh樹組成森林。

4、  局部結構化處理。

第三點的加入,在小樣本下mnist 手寫字數據集,各類10個樣本。(以下測試都基於該數據集)。能超越knn 15%的準確度,非常接近SVM的性能。當然本算法自爲了海量數據處理,所以小樣本不重要。在mnist全數據集下,也超越knn(94.5%) 1%左右,接近svm(96.5%),介於 knn和svm之間,爲95.65%。

1.1  自適應lsh樹

由於lsh本身具備局部敏感性所以,當桶bucket的數據量到達一定數量時候,自動分裂添加子lsh進行進一步lsh映射。這樣不需要預先估計數據的分佈,桶分裂不影響其他桶的數據,自動適應數據的分佈狀態。

1.2 多個臨近桶探測

使用多個臨近桶探測可以提高真實knn的概率,減少lsh樹的數量。目前使用8棵樹已經超越knn本身的準確度。Mnist全數據集。

1.3 多顆lsh樹組成森林

使用多顆lsh樹返回臨近桶計算knn,能獲得很高的準確度。在mnist全數據集上,16棵樹就接近了svm的性能。8棵樹就超越KNN

1.4 局部結構化

         這個目前保留一下吧?該局部化處理也是動態增量處理,無需所有樣本。

經過以上的方法處理數據,已經能獲得超越knn的效果。第四點方法不使用的情況下也會很接近knn的效果。使用局部結構化,才能超越knn的效果。

 

1)經過以上處理,分類效果已經超越knn,同時lsh樹數量很小。

2)如何增量學習?基於lsh樹自動分裂。無需提前知道樣本的分佈,自動分裂適應。分裂過程不影響其他桶,只是在桶內進行。所以無論樣本數據如何輸入,一起輸入還是分塊在不同輸入,最終的分類樹都是同樣的。

3)另外如何保證搜索複雜度O1.? 所有的搜索都基於臨近桶,每棵樹只會搜索指定的個數臨近桶,比如10個 KNN Bucket。另外本文方法是 lsh自適應樹結構,每個桶有最大樣本數限制nMaxBucketSize。所以每個桶的樣本數量不會超越nMaxBucketSize個。多棵樹組成的lsh森林,樹的數量一定N棵樹,目前測試看N取8已經有很好的結果。這樣,保證了最壞的搜索knn數量是

 N棵樹* (KNN Bucket臨近桶個數)* nMaxBucketSize

這個搜索數量不會隨着樣本的增加而增加。只是會隨着樹的深度增加稍微有增加。Lsh樹是多叉樹,eg 16. 當達到8級樹節點時候,即可表示 2^32 的樣本數。樹狀搜索也是每一級lsh哈希直接定位,所以其時間與最終bucket的所有樣本比較,相當少。

搜索時間基本固定,主要由最終的所有臨近桶的所有樣本搜索KNN決定時間。

目前在minst全數據集上,多核查詢速度可以達到5000-8000query/s 。如果進一步優化可以達到10000qps或者更高

由於使用了局部結構化處理,最終1nn效果是最好的,目前是經驗數值。實際上根據svm的結構化的方法,思考確實是1nn最好,這個1nn非原始樣本,而是局部的一個核心。

         這樣分類器滿足了特徵:

海量數據處理,增量訓練。

 

下一步需要研究如何自動聚類,增量聚類,並且用於稀疏編碼。目前從lsh的性質看,不但適合海量數據處理,同時適合數據自動聚類。以上使用的桶自動分裂,就是發現數據稠密聚集的地方。自動聚類也就是稀疏編碼的核心思想,稀疏編碼也是深度神經網絡能達到比BP網絡好的一個重要方法。

         同時具備增量自動聚類和增量學習,就可以着手real智能系統的工作。

發佈了44 篇原創文章 · 獲贊 20 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章