日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Weka使用笔记

發(fā)布時(shí)間:2025/7/25 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Weka使用笔记 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

from:http://blog.sina.com.cn/s/blog_4766fd440101iyb0.html


前些日子基于weka初步做了一下文本分類,使用的是最頻繁使用的矢量空間模型(Vector Space Model),即假設(shè)正負(fù)樣本在特征空間的分布迥異,基于某種規(guī)則將它們轉(zhuǎn)化為矢量,然后訓(xùn)練分類器來(lái)區(qū)分這些矢量,測(cè)試樣本來(lái)時(shí)送進(jìn)分類器進(jìn)行分類就行。在我的實(shí)驗(yàn)里面,特征降維使用的是基于TFIDF的特征選擇,分類器使用的是樸素貝葉斯(na?ve bayes)分類器。

?

前期預(yù)處理

編碼不一致:由于我的中文樣本是從網(wǎng)站各個(gè)地方收集來(lái)的,因此編碼很可能不一致,有的是ANSI,有的是Unicode,需要統(tǒng)一編碼便于后續(xù)處理。本實(shí)驗(yàn)里面,所有的文本都被統(tǒng)一成ANSI編碼。下載一個(gè)文本編碼轉(zhuǎn)換器(TxtEdit)即可轉(zhuǎn)換。

中文分詞:由于樣本是中文文本,因此需要進(jìn)行中文分詞,包括去掉英文標(biāo)點(diǎn)符號(hào),停詞處理等,現(xiàn)成的工具有計(jì)算所開(kāi)發(fā)的漢語(yǔ)分詞系統(tǒng)(http://ictclas.org/)等。

?

Weka進(jìn)行分類

Weka功能實(shí)在是太強(qiáng)大,剩下的事情可以全部交給weka做了。

先引用weka中文論壇的資料介紹下Weka

WEKA的全名是懷卡托智能分析環(huán)境(Waikato Environment for Knowledge Analysis),它的源代碼可通過(guò)http://www.cs.waikato.ac.nz/ml/weka得到。同時(shí)weka也是新西蘭的一種鳥(niǎo)名,而WEKA的主要開(kāi)發(fā)者來(lái)自新西蘭。
WEKA
作為一個(gè)公開(kāi)的數(shù)據(jù)挖掘工作平臺(tái),集合了大量能承擔(dān)數(shù)據(jù)挖掘任務(wù)的機(jī)器學(xué)習(xí)算法,包括對(duì)數(shù)據(jù)進(jìn)行預(yù)處理,分類,回歸、聚類、關(guān)聯(lián)規(guī)則以及在新的交互式界面上的可視化。如果想自己實(shí)現(xiàn)數(shù)據(jù)挖掘算法的話,可以看一看weka的接口文檔。在weka中集成自己的算法甚至借鑒它的方法自己實(shí)現(xiàn)可視化工具并不是件很困難的事情。20058月,在第11ACM SIGKDD國(guó)際會(huì)議上,懷卡托大學(xué)的Weka小組榮獲了數(shù)據(jù)挖掘和知識(shí)探索領(lǐng)域的最高服務(wù)獎(jiǎng),Weka系統(tǒng)得到了廣泛的認(rèn)可,被譽(yù)為數(shù)據(jù)挖掘和機(jī)器學(xué)習(xí)歷史上的里程碑,是現(xiàn)今最完備的數(shù)據(jù)挖掘工具之一(已有11年的發(fā)展歷史)。Weka的每月下載次數(shù)已超過(guò)萬(wàn)次。

?

介紹完畢,使用weka之前必須安裝weka,具體參見(jiàn)weka中文論壇http://www.wekacn.org/index.php,注意weka的安裝文件有帶java運(yùn)行環(huán)境和不帶java運(yùn)行環(huán)境的,按照自己的機(jī)器情況安裝。

?

安裝完weka以后,由于要處理的是中文文本,需要將安裝文件夾內(nèi)的RunWeka.ini文件打開(kāi),將fileEncoding的值Cp1252換成Cp936。

?

Weka使用的數(shù)據(jù)格式是arff,因此第一步是將txt轉(zhuǎn)化為arff文件(命令行在GUI里面的Simple CLI鍵入,下同):

?java weka.core.converters.TextDirectoryLoader -dir my_data_folder > my_arff_save _path/data.arff

其中,my_data_folder是包含樣本txt的文件夾,如果是二值化的分類問(wèn)題,則該文件夾應(yīng)該包含兩個(gè)子文件夾,每個(gè)子文件夾裝每個(gè)類的樣本,多類的分類問(wèn)題就是多個(gè)子文件夾,類同。子文件夾的名字就是該類的類標(biāo)簽,在生成的arff文件可以看到這一點(diǎn)。??my_arff_save _path是想要保存文件的目錄,data.arff是生成的數(shù)據(jù)文件,也可以是自己想要的任何名字。

?

獲得TFIDF數(shù)據(jù),將文本轉(zhuǎn)化為矢量:

java weka.filters.unsupervised.attribute.StringToWordVector -I -C -i my_arff_save _path/data.arff -o my_arff_save_path/data_vsm.arff -c last??

?

可以在wekaStringToWordVector類說(shuō)明里面看到如下選項(xiàng)的意義:

-C??對(duì)word進(jìn)行詞頻計(jì)數(shù)而不是二值化表示

-I??將詞頻轉(zhuǎn)化為fij*log(文檔數(shù)目/包含詞i的文檔數(shù)目)fij是詞i出現(xiàn)在文檔j里面的頻率?后面的選項(xiàng)是通用的選項(xiàng):-i??輸入-o??輸出-c??指明類標(biāo)簽的位置,last表明標(biāo)簽為最后一個(gè)屬性,first表明標(biāo)簽為第一個(gè)屬性。

注:在這篇文章http://fengshenbang.javaeye.com/blog/695153里面,指出了轉(zhuǎn)化后產(chǎn)生的第一類的類標(biāo)簽缺失的情況,其實(shí)沒(méi)什么問(wèn)題,對(duì)后續(xù)的處理沒(méi)有任何影響,實(shí)在不放心,也可以采用AddString方法修復(fù)。

?

轉(zhuǎn)化后的數(shù)據(jù)還不能直接用來(lái)分類,需要進(jìn)行離散化:

java weka.filters.supervised.attribute.Discretize -i my_arff_save_path/data_vsm.arff -o my_arff_save_path/data_D_vsm.arff -c first

?

注:-c的參數(shù)設(shè)置成了first后類標(biāo)簽已經(jīng)成為屬性的第一項(xiàng)

?

將數(shù)據(jù)分成訓(xùn)練集和測(cè)試集:

java weka.filters.supervised.instance.StratifiedRemoveFolds -i my_arff_save_path/data_D_vsm.arff -o my_arff_save_path/data_vsm_train.arff -c first -N 4 -F 1 –V

?

同樣可以參見(jiàn)StratifiedRemoveFolds類說(shuō)明:

-N 4??指定將數(shù)據(jù)集分成的折數(shù)為4

-F 1??指定第1折被選中

-V????取反,設(shè)置-V將導(dǎo)致剩下沒(méi)被選中的作為輸出

可以加個(gè)-S的選項(xiàng)在分折的時(shí)候隨機(jī)選擇樣本

?

測(cè)試集:

java weka.filters.supervised.instance.StratifiedRemoveFolds -i my_arff_save_path/data_D_vsm.arff -o my_arff_save_path/data_vsm_test.arff -c first -N 4 -F 1

?

經(jīng)過(guò)上述操作后,數(shù)據(jù)被分成了4折,其中3折作為訓(xùn)練集,還有1折數(shù)據(jù)作為測(cè)試集。

?

訓(xùn)練模型:

java weka.classifiers.bayes.NaiveBayes -t my_arff_save_path/data_D_vsm.arff -i -k -d my_arff_save_path/data_vsm_nb.model -c first > my_arff_save_path/data_vsm_nb.model

?

>為輸出定位符,前后都要有空格

?

在測(cè)試集上檢驗(yàn)效果:

java weka.classifiers.bayes.NaiveBayes -l my_arff_save_path/data_vsm_nb.model -T my_arff_save_path/data_vsm_test.arff –c first > my_arff_save_path/data_vsm_NB_r.txt

?

注:輸出結(jié)果的data_vsm_NB_r.txt文件用記事本打開(kāi)格式是亂的,用ultraedit之類的工具打開(kāi)看的清楚。

?

在輸出文件的最后可以看到分類結(jié)果:

=== Error on test data ===

?

Correctly Classified Instances?????????627???????????????85.0746 %

Incorrectly Classified Instances???????110???????????????14.9254 %

Kappa statistic??????????????????????????0.5842

Mean absolute error??????????????????????0.1487

Root mean squared error??????????????????0.3852

Total Number of Instances??????????????737?????

?

?

=== Confusion Matrix ===

?

???a???b???<-- classified as

?115??22 |???a = horror

??88 512 |???b = normal

?

注:如果數(shù)據(jù)集過(guò)于龐大,可能會(huì)報(bào)out of memory的錯(cuò)誤,這時(shí)候需要加大java虛擬機(jī)從操作系統(tǒng)所獲得內(nèi)存的大小,在java后加選項(xiàng)-Xmx1024m就能獲得1024m的內(nèi)存(當(dāng)然,需要操作系統(tǒng)至少剩余這么大的內(nèi)存才行),具體參數(shù)意義請(qǐng)參考http://sun-xyun.javaeye.com/blog/416054。也可以新建一個(gè)bat文件,直接獲取1024m的內(nèi)存啟動(dòng)weka:

java -Xmx1024M -jar weka.jar

一勞永逸的解決問(wèn)題,從該文件啟動(dòng)weka,免得每一條命令都要帶上-Xmx參數(shù)。

總結(jié)

以上是生活随笔為你收集整理的Weka使用笔记的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。