資料探勘 文字分類 (八)訓練和測試
今天來個大結局吧,我們有了chi值或者TF-IDF值以後,就可以拿他們用lib-svm工具進行訓練了。
當然我們還要對資料進行一些標準化處理,我們需要將某詞與該詞對應的值作為一個向量處理,這個就是特徵向量了。
舉個例子,我們得到的某個文本里有一個這樣的值:汽車 3456.2314 。
其實這就是一個二維的特徵向量,我們可以把文字編號比如“汽車”記為1,那麼這個向量就是 1:3456.2314 。
如果再加上該文字屬於某一類這個維度,假設汽車這個詞是第一類,向量就變成三維的了:1 1:3456.2341 。
之所以表示成這樣的形式,是lib-svm工具介面接受的資料形式。
我們每一類文章計算完特徵值的時候,還是分在1000篇左右的文本里的,我們需要取出來一部分來代表這類文字,可以每篇取2000個,1000個,甚至500或者300個,這個取決於文字的大小等各種因素。
這樣我們把每一類的前300(假設每個文字取300個)個特徵值最大的詞取出來放到一個文本里,去重,大概剩2000多個詞,這個就叫資料字典了。
比如第一類文字可能是這樣:1 1:3456.2341
1 2:3234.2211
1 3:344.4356
第一列數字是告訴訓練工具這個詞是來自哪一類,第二列就是對應的該類特徵值比較大的詞語編號了,第三列則是該詞對應的特徵值。
我們把每一類都做同樣的處理,這樣libsvm工具就能正確的來處理這些資料了。
開啟libsvm工具包,可以看到windows目錄下是這樣的:
我們可以把之前生成的dict.txt 檔案放到該目錄下,然後用svm-train.exe訓練文字。
操作命令如下:
當然,這個訓練工具提供了很多的引數可調,這裡我們就不管了,全部預設引數。操作命令裡不加任何調引數的命令,train.model就是訓練完生成的模型檔案,儲存在lib-svm目錄下的Windows目錄下。
然後我們呢可以用同樣的處理方式把訓練集處理一遍,生成test.txt(text.txt檔案形式與內容幾乎都跟dict.txt一樣,只不過dict是由訓練集通過一系列操作生成,而test.txt由測試集經過同樣的步驟生成)檔案,這樣我們就可以去預測了。
命令列如下:
這樣,整體的分類準確度就直接給出來了。
我們可以根據output檔案自己統計每一類的準確率和召回率。