·背景 html
在知道KNN以前,樓主有時候會粗糙地作一些分類模型的計算。在拜讀了Orisun大神[http://www.cnblogs.com/zhangchaoyang/articles/2162393.html]的一些文章從中獲得了一些啓發,這些天突發奇想決定把N年前的分類模型按照KNN的思路重寫,從新把大神的思路形象地再回溯一下,方便後人更加清晰的認識整個過程。不少時候,歷史的進步來源於前輩們的傳道、授業、解惑。既然大神給JAVA,不材這邊就繼續補充一個C++的,爲陷在JAVA中的鬥士們吹一曲老革命之歌。linux
·設計思路 c++
像大多數的ML體系一下,向量和機率學幾乎是整個ML體系的基礎,但從歷史經驗的推斷又是ML的命門,人類與機器之間的戰爭從未體質。文檔分類工具的設計初衷是但願拿到的這邊文章可以準確的歸爲某一類,大神是經過KNN把復旦的語料分個類。樓主這邊就簡單地把公司投訴內容也簡單歸個類。KNN的最先設計模型以下圖所示:算法
如上面左所示,X在K的定義範圍內(規則半徑或規則圖形內)與其周圍鄰居屬性歸類最多的一項,則歸爲某類。具體到與鄰居的類似是如何計算的,則是採用最基本的向量空間算法,Cos夾角。而SVM則是利用兩個向量至理想邊界的最大距離來分類,因此對於向量的理解相當重要。不少人KNN很簡單,可是越是簡單的,要用好反而更難。centos
在得知了最基本的計算思路後,作文檔分類就能迎刃而解。把用天然分詞分類,把每個文檔設置成一個向量,把每一個詞彙出現機率增益做爲向量的維度,這樣每個向量就有了本身的標尺。有了標尺以後,就能夠回到了上面有圖的理論部分。剩下的工做就是遍歷計算夾角,以下圖所示,一目瞭然吧。網絡
·編碼中的可能碰到問題 工具
·測試的結果 oop
把投訴內容按網絡質量、終端銷售、服務質量進行分類。如以前所述樓主把cos值作了直接相加,相加最大值爲最類似斷定。在測試樣本的隨機結果中命中仍是OK的。固然,話說回來,任何ML算是的弊端仍是"歷史經驗和人的因素。性能