一、初始化設置
1 jvm out of memory 解決方案:
在weka SimpleCLI窗口依次輸入
java -Xmx 1024m
2 修改配置文件,使其支持中文:
配置文件是在Weka安裝后的目錄下,比如我的是在C:\Program Files\Weka-3-7\RunWeka.ini
,打開這個文件,找到fileEncoding=Cp1252
這一行,改成fileEncoding=utf-8即可。如下:
# The file encoding; use "utf-8" instead of "Cp1252" to display UTF-8 characters in the # GUI, e.g., the Explorer fileEncoding=utf-8
如果是在C盤,可能會提示沒有權限保存,這時可以把這個配置文件復制到桌面,修改完了再替換回去。
有些同學,改完配置文件,中文依然亂碼,可能因為源文件不是utf8編碼格式的,可以用notepad++把arff文件打開,然后選擇格式->轉為UTF-8編碼格式,保存。
二、數據格式:
Weka使用的數據格式是它自己規定的,arff格式,大概就是這個樣子:
@relation F__zle_study_ccf_code_Archive_text3
@attribute text string
@attribute @@class@@ {text006,text010,text013,text014,text015,text016,text020,text023,text024,text026,text100,text103,text104,text105,text106,text110,text113,text114,text115,text116,text120,text121,text122,text123,text124,text125,text126,text200,text203,text204,text205,text206,text210,text211,text212,text213,text214,text215,text216,text220,text222,text223,text224,text225,text226,text300,text302,text303,text304,text305,text306,text310,text311,text312,text313,text314,text315,text316,text320,text321,text322,text323,text324,text325,text326,text400,text403,text404,text405,text406,text410,text411,text412,text413,text414,text415,text416,text420,text421,text422,text423,text424,text425,text426,text500,text510,text511,text512,text513,text514,text515,text520,text521,text522,text523,text524,text525,text526,text600,text610,text612,text613,text614,text616,text620,text623,text624}
@data
'地圖 中國 完整版 電影 秘密 官網 喬丹 2016 超載 超限 規定 最高 現在 中國 電影 超輕型',text006
'貨運 遠洋 秘密 版大圖 世界地圖 高清 順德 版大圖 高清 唐朝',text014
1 將文件轉換成ARFF文件:
TextDirectoryLoader
java weka.core.converters.TextDirectoryLoader -dir text_example > text_example.arff
該方法只能通過命令行實現。如果是在windows下,要首先在環境變量里加入weka.jar的位置,再在cmd里敲入命令行。
該類的作用是把輸入目錄轉化成ARFF文件,但是轉化之后的ARFF文件里的屬性是string型的,依然是大多數分類器不能處理的,需要做進一步處理。該類的作用相當於把每個文本表示一行的string格式。
輸入的文件目錄的格式應為圖1所示:
圖1 文件目錄格式
一個生成圖1格式的代碼
import os re_base='F:\zle\study\ccf\code\Archive\dict_keywords.txt'#文件讀取目錄 wr_base="F:/zle/study/ccf/code/Archive/text3/text" #文件生成目錄 with open(re_base,'r') as f: line=f.readlines() for x in range(107):#一共有107類 catalog=line.pop(0).split(':')[0] file_name=wr_base+str(catalog) if not os.path.exists(file_name): os.path.join(wr_base,str(catalog)) os.mkdir(file_name) else: pass with open(file_name+'/'+str(catalog)+'.txt','w') as f: f.write(line.pop(0).replace(',',' '))
2.StringToWordVector
由TextDirectoryLoader轉化成的arff還不能直接用來分類,還需StringToWordVector類的進一步處理。這步在命令行和GUI上都能操作,但建議直接轉到GUI上來操作更清楚、方便。
在打開的WEKA界面中選擇打開已經上一步處理過的文件,然后選擇StringToWordVector,該類位於weka.filters.unsupervised.attribute.StringToWordVector中,然后點擊可以配置參數。這也是GUI的好處之一,可以配置更加詳細的參數。
GUI步驟:
- 進入Weka的Explorer頁面,Open file..選中這個e:/data.arff文件
-
在Filter中點擊Choose
選擇 weka->filters->unsupervised->attribute->StringToWordVector
點擊Apply之后,Weka將自動統計詞頻,將詞轉成特征。在StringToWordVector中可以配置是否使用TFIDF特征,詞頻是否只使用
0,1
統計(outputWordCounts=false)
參數介紹
這里簡要介紹一下StringToWordVector可能需要自己做調整的參數:
-W 需要保留的單詞個數,默認為1000。這不是最終的特征維數,但是維數跟此參數是正相關的
-stopwords <file> 輸入停詞文件,文件格式為每一個詞一行。在讀文件到轉化特征時會自動去掉這些常用詞,系統自帶有一套停用詞。
-tokenizer <spec> 自定義所要去除的符號,一般為標點符號。默認有常用的標點符號,但往往是不夠的,所以需自己添加
其他參數只需默認值即可。在GUI當中,還有一些參數設置需要介紹:
lowerCaseTokens 是否區分大小寫,默認為false不區分,這里一般要設置為ture,因為同一個詞就會有大小寫的區別
三.特征選擇與訓練
提取完ARFF文件之后,可以按上方的按鈕保存文件。在Attribute一欄中也會顯示所有的特征,此時也可以自己觀察一下所提取的單詞是否合理,然后再在去停詞、符號等等方面做改進,當然若至於少部分的有問題,也可以手動剔除。
此步進行完之后,可以使用降維方法(例如PCA)對特征進行降維,當然這不是必須的。
接下來就可以按照一般ARFF文件進行訓練了。
進入Classify面板,在Start按鈕上面的下拉框中,選中(Nom)@@class@@
這個表示分類的標簽屬性列
點Choose按鈕選擇trees中的J48,然后點擊Start,Weka便開始進行訓練。只要數據格式正確了,可以使用這里面的各個分類器進行訓練,比如RandomForest
,NaiveBayes
,比較分類效果。
四 Weka輸出結果的簡單說明
=== Summary ===(總結)
Correctly Classified Instances(正確分類的實例) 45 90 %
Incorrectly Classified Instances (錯誤分類的實例) 5 10 %
Kappa statistic(Kappa統計量) 0.792
Mean absolute error(均值絕對誤差) 0.1
Root mean squared error(均方根誤差) 0.3162
Relative absolute error(相對絕對誤差) 20.7954 %
Root relative squared error(相對均方根誤差) 62.4666 %
Coverage of cases (0.95 level) 90 %
Mean rel. region size (0.95 level) 50 %
Total Number of Instances(實驗的實例總數) 50
=== Detailed Accuracy By Class ===
TP Rate(真陽性率) FP Rate(假陽性率) Precision(查准率) Recall(查全率) F-Measure MCC(Matthews相關系數) ROC Area PRC Area Class(類別)
0.773 0 1 0.773 0.872 0.81 0.886 0.873 true
1 0.227 0.848 1 0.918 0.81 0.886 0.848 false
Weighted Avg. 0.9 0.127 0.915 0.9 0.898 0.81 0.886 0.859