1.簡介
數(shù)據(jù)挖掘咧七、機器學(xué)習(xí)這些字眼,在一些人看來任斋,是門檻很高的東西继阻。誠然耻涛,如果做算法實現(xiàn)甚至算法優(yōu)化,確實需要很多背景知識瘟檩。但事實是抹缕,絕大多數(shù)數(shù)據(jù)挖掘工程師,不需要去做算法層面的東西墨辛。他們的精力卓研,集中在特征提取,算法選擇和參數(shù)調(diào)優(yōu)上睹簇。那么奏赘,一個可以方便地提供這些功能的工具,便是十分必要的了太惠。而weka磨淌,便是數(shù)據(jù)挖掘工具中的佼佼者。
Weka的全名是懷卡托智能分析環(huán)境(Waikato Environment for Knowledge Analysis)凿渊,是一款免費的梁只,非商業(yè)化的,基于JAVA環(huán)境下開源的機器學(xué)習(xí)以及數(shù)據(jù)挖掘軟件埃脏。它和它的源代碼可在其官方網(wǎng)站下載搪锣。有趣的是,該軟件的縮寫WEKA也是New Zealand獨有的一種鳥名彩掐,而Weka的主要開發(fā)者同時恰好來自新西蘭的the University of Waikato构舟。(本段摘自百度百科)。
Weka提供的功能有數(shù)據(jù)處理佩谷,特征選擇旁壮、分類、回歸谐檀、聚類抡谐、關(guān)聯(lián)規(guī)則、可視化等桐猬。本文將對Weka的使用做一個簡單的介紹麦撵,并通過簡單的示例,使大家了解使用weka的流程溃肪。本文將僅對圖形界面的操作做介紹免胃,不涉及命令行和代碼層面的東西。
2.安裝
Weka的官方地址是http://www.cs.waikato.ac.nz/ml/weka/惫撰。點開左側(cè)download欄羔沙,可以進入下載頁面,里面有windows厨钻,mac os扼雏,linux等平臺下的版本坚嗜,我們以windows系統(tǒng)作為示例。目前穩(wěn)定的版本是3.6诗充。
如果本機沒有安裝java苍蔬,可以選擇帶有jre的版本。下載后是一個exe的可執(zhí)行文件蝴蜓,雙擊進行安裝即可碟绑。
安裝完畢,打開啟動weka的快捷方式茎匠,如果可以看到下面的界面格仲,那么恭喜,安裝成功了诵冒。
-
weka啟動界面:
窗口右側(cè)共有4個應(yīng)用抓狭,分別是
- 1)Explorer
用來進行數(shù)據(jù)實驗、挖掘的環(huán)境造烁,它提供了分類,聚類午笛,關(guān)聯(lián)規(guī)則惭蟋,特征選擇,數(shù)據(jù)可視化的功能药磺。(An environment for exploring data with WEKA) - 2)Experimentor
用來進行實驗告组,對不同學(xué)習(xí)方案進行數(shù)據(jù)測試的環(huán)境。(An environment for performing experiments and conducting statistical tests between learning schemes.) - 3)KnowledgeFlow
功能和Explorer差不多癌佩,不過提供的接口不同木缝,用戶可以使用拖拽的方式去建立實驗方案。另外围辙,它支持增量學(xué)習(xí)我碟。(This environment supports essentially the same functions as the Explorer but with a drag-and-drop interface. One advantage is that it supports incremental learning.) - 4)SimpleCLI
簡單的命令行界面。(Provides a simple command-line interface that allows direct execution of WEKA commands for operating systems that do not provide their own command line interface.)
3.數(shù)據(jù)格式
Weka支持很多種文件格式姚建,包括arff矫俺、xrff、csv掸冤,甚至有l(wèi)ibsvm的格式厘托。其中,arff是最常用的格式稿湿,我們在這里僅介紹這一種铅匹。
Arff全稱是Attribute-Relation File Format,以下是一個arff格式的文件的例子饺藤。
%
% Arff file example
%
@relation ‘labor-neg-data’
@attribute ‘duration’ real
@attribute ‘wage-increase-first-year’ real
@attribute ‘wage-increase-second-year’ real
@attribute ‘wage-increase-third-year’ real
@attribute ‘cost-of-living-adjustment’ {‘none’,'tcf’,'tc’}
@attribute ‘working-hours’ real
@attribute ‘pension’ {‘none’,'ret_allw’,'empl_contr’}
@attribute ’standby-pay’ real
@attribute ’shift-differential’ real
@attribute ‘education-allowance’ {‘yes’,'no’}
@attribute ’statutory-holidays’ real
@attribute ‘vacation’ {‘below_average’,'average’,'generous’}
@attribute ‘longterm-disability-assistance’ {‘yes’,'no’}
@attribute ‘contribution-to-dental-plan’ {‘none’,'half’,'full’}
@attribute ‘bereavement-assistance’ {‘yes’,'no’}
@attribute ‘contribution-to-health-plan’ {‘none’,'half’,'full’}
@attribute ‘class’ {‘bad’,'good’}
@data
1,5,?,?,?,40,?,?,2,?,11,’average’,?,?,’yes’,?,’good’
2,4.5,5.8,?,?,35,’ret_allw’,?,?,’yes’,11,’below_average’,?,’full’,?,’full’,'good’
?,?,?,?,?,38,’empl_contr’,?,5,?,11,’generous’,'yes’,'half’,'yes’,'half’,'good’
3,3.7,4,5,’tc’,?,?,?,?,’yes’,?,?,?,?,’yes’,?,’good’
3,4.5,4.5,5,?,40,?,?,?,?,12,’average’,?,’half’,'yes’,'half’,'good’
2,2,2.5,?,?,35,?,?,6,’yes’,12,’average’,?,?,?,?,’good’
3,4,5,5,’tc’,?,’empl_contr’,?,?,?,12,’generous’,'yes’,'none’,'yes’,'half’,'good’
3,6.9,4.8,2.3,?,40,?,?,3,?,12,’below_average’,?,?,?,?,’good’
2,3,7,?,?,38,?,12,25,’yes’,11,’below_average’,'yes’,'half’,'yes’,?,’good’
1,5.7,?,?,’none’,40,’empl_contr’,?,4,?,11,’generous’,'yes’,'full’,?,?,’good’
3,3.5,4,4.6,’none’,36,?,?,3,?,13,’generous’,?,?,’yes’,'full’,'good’
2,6.4,6.4,?,?,38,?,?,4,?,15,?,?,’full’,?,?,’good’
2,3.5,4,?,’none’,40,?,?,2,’no’,10,’below_average’,'no’,'half’,?,’half’,'bad’
這個例子來自于weka安裝目錄data文件下的labor.arff文件包斑,來源于加拿大勞資談判的案例流礁,它根據(jù)工人的個人信息,來預(yù)測勞資談判的最終結(jié)果舰始。
文件中崇棠,“%”開頭的是注釋。剩余的可以分為兩大部分丸卷,頭信息(header information)和數(shù)據(jù)信息(data information)枕稀。
頭信息中,“@relation”開頭的行代表關(guān)系名稱谜嫉,在整個文件的第一行(除去注釋)萎坷。格式是
@relation <relation-name>
“@attribute”開頭的代表特征,格式是
@attribute <attribute-name> <datatype>
attribute-name是特征的名稱沐兰,后面是數(shù)據(jù)類型哆档,常用數(shù)據(jù)類型有以下幾種
- 1)numeric,數(shù)字類型住闯,包括integer(整數(shù))和real(實數(shù))
- 2)nominal瓜浸,可以認為是枚舉類型,即特征值是有限的集合比原,可以是字符串或數(shù)字插佛。
- 3)string,字符串類型量窘,值可以是任意的字符串雇寇。
從“@data”開始,是實際的數(shù)據(jù)部分蚌铜。每一行代表一個實例锨侯,可以認為是一個特征向量。各個特征的順序與頭信息中的attribute逐個對應(yīng)冬殃,特征值之間用逗號分割囚痴。在有監(jiān)督分類中,最后一列是標(biāo)注的結(jié)果造壮。
某些特征的數(shù)值如果是缺失的渡讼,可以用“?”代替耳璧。
數(shù)據(jù)挖掘流程使用weka進行數(shù)據(jù)挖掘的流程如下圖
-
數(shù)據(jù)挖掘流程圖
其中成箫,在weka內(nèi)進行的是數(shù)據(jù)預(yù)處理,訓(xùn)練旨枯,驗證這三個步驟蹬昌。
- 1)數(shù)據(jù)預(yù)處理
數(shù)據(jù)預(yù)處理包括特征選擇,特征值處理(比如歸一化)攀隔,樣本選擇等操作皂贩。 - 2)訓(xùn)練
訓(xùn)練包括算法選擇栖榨,參數(shù)調(diào)整,模型訓(xùn)練明刷。 - 3)驗證
對模型結(jié)果進行驗證婴栽。
本文剩余部分將以這個流程為主線,以分類為示例辈末,介紹使用weka進行數(shù)據(jù)挖掘的步驟愚争。
5. 數(shù)據(jù)預(yù)處理
打開Explorer界面,點“open file”挤聘,在weka安裝目錄下轰枝,選擇data目錄里的“l(fā)abor.arff”文件,將會看到如下界面组去。我們將整個區(qū)域分為7部分鞍陨,下面將分別介紹每部分的功能。
-
Explorer界面
- 1)區(qū)域1共6個選項卡从隆,用來選擇不同的數(shù)據(jù)挖掘功能面板诚撵,從左到右依次是Preprocess(預(yù)處理)、Classify(分類)键闺、Cluster(聚類)砾脑、Associate(關(guān)聯(lián)規(guī)則)、Select attribute(特征選擇)和Visualize(可視化)艾杏。
- 2)區(qū)域2提供了打開、保存盅藻,編輯文件的功能购桑。打開文件不僅僅可以直接從本地選擇,還可以使用url和db來做數(shù)據(jù)源氏淑。Generate按鈕提供了數(shù)據(jù)生成的功能勃蜘,weka提供了幾種生成數(shù)據(jù)的方法。點開Edit假残,將看到如下界面
-
arff viewer
在這個界面缭贡,可以看到各行各列對應(yīng)的值,右鍵每一列的名字辉懒,可以看到一些編輯數(shù)據(jù)的功能阳惹,這些功能還是比較實用的。
- 3)區(qū)域3名為Filter眶俩,有些人可能會聯(lián)想到特征選擇里面的Filter方法莹汤,事實上,F(xiàn)ilter針對特征(attribute)和樣本(instance)提供了大量的操作方法颠印,功能十分強大纲岭。
- 4)在區(qū)域4抹竹,可以看到當(dāng)前的特征、樣本信息止潮,并提供了特征選擇和刪除的功能窃判。
- 5)在區(qū)域4用鼠標(biāo)選擇單個特征后,區(qū)域5將顯示該特征的信息喇闸。包括最小值袄琳、最大值、期望和標(biāo)準(zhǔn)差仅偎。
- 6)區(qū)域6提供了可視化功能跨蟹,選擇特征后,該區(qū)域?qū)@示特征值在各個區(qū)間的分布情況橘沥,不同的類別標(biāo)簽以不同的顏色顯示窗轩。
- 7)區(qū)域7是狀態(tài)欄,沒有任務(wù)時座咆,小鳥是坐著的痢艺,任務(wù)運行時,小鳥會站起來左右搖擺介陶。如果小鳥站著但不轉(zhuǎn)動堤舒,表示任務(wù)出了問題。
下面將通過實例介紹Filters的各項功能哺呜。
點開Filter下面的choose按鈕舌缤,可以看到如下界面 -
filter方法選擇界面
Filters可分為兩大類,supervised和unsupervised某残。supervised下的方法需要類別標(biāo)簽国撵,而unsupervised則不需要。attribute類別表示對特征做篩選玻墅,instance表示對樣本做選擇介牙。
- 1)case 1:特征值歸一化
該項功能與類別無關(guān),且是針對attribute的澳厢,我們選擇unsupervised -> attribute下面的Normalize环础。點開Normalize所在的區(qū)域,將看到如下界面剩拢。左邊的窗口线得,有幾個參數(shù)可以選擇。點擊more徐伐,將出現(xiàn)右邊的窗口框都,該窗口詳細介紹了此功能。 -
歸一化參數(shù)設(shè)置界面
使用默認參數(shù),點擊ok魏保,回到主窗口熬尺。在區(qū)域4選好將要歸一化的特征,可以是一個或多個谓罗,然后點擊apply粱哼。在可視化區(qū)域中,我們可以看到特征值從1到3被歸一到了0到1之間檩咱。
-
duration特征歸一化之前
-
duration特征歸一化之后
2)case 2: 分類器特征篩選
該功能與類別相關(guān)揭措,選擇supervised -> attribute下面的AttributeSelection。該界面有兩個選項刻蚯,evaluator是評價特征集合有效性的方法绊含,search是特征集合搜索的方法。在這里炊汹,我們使用InformationGainAttributeEval作為evaluator躬充,使用Ranker作為search,表示我們將根據(jù)特征的信息增益值對特征做排序讨便。Ranker中可以設(shè)置閾值充甚,低于這個閾值的特征將被扔掉。-
特征選擇參數(shù)
點擊apply霸褒,可以看到在區(qū)域4里特征被重新排序伴找,低于閾值的已被刪掉。
-
特征選擇之前
-
特征選擇之后
3)case 3:選擇分類器錯分的樣本
選擇unsupervised -> instance下面的RemoveMisclassified废菱,可以看到6個參數(shù)技矮,classIndex用來設(shè)置類別標(biāo)簽,classifier用來選擇分類器殊轴,這里我們選擇J48決策樹穆役,invert我們選擇true,這樣保留的是錯分樣本梳凛,numFolds用來設(shè)置交叉驗證的參數(shù)。設(shè)置好參數(shù)之后梳杏,點擊apply韧拒,可以看到樣本的數(shù)量從57減少到了7。-
參數(shù)設(shè)置
6. 分類
在Explorer中十性,打開classifer選項卡叛溢,整個界面被分成幾個區(qū)域。分別是
1)Classifier
點擊choose按鈕劲适,可以選擇weka提供的分類器楷掉。常用的分類器有
a)bayes下的Na?ve Bayes(樸素貝葉斯)和BayesNet(貝葉斯信念網(wǎng)絡(luò))。
b)functions下的LibLinear霞势、LibSVM(這兩個需要安裝擴展包)烹植、Logistic Regression斑鸦、Linear Regression。
c)lazy下的IB1(1-NN)和IBK(KNN)草雕。
d)meta下的很多boosting和bagging分類器巷屿,比如AdaBoostM1。
e)trees下的J48(weka版的C4.5)墩虹、RandomForest嘱巾。2)Test options
評價模型效果的方法,有四個選項诫钓。
a)Use training set:使用訓(xùn)練集旬昭,即訓(xùn)練集和測試集使用同一份數(shù)據(jù),一般不使用這種方法菌湃。
b)Supplied test set:設(shè)置測試集问拘,可以使用本地文件或者url,測試文件的格式需要跟訓(xùn)練文件格式一致慢味。
c)Cross-validation:交叉驗證场梆,很常見的驗證方法。N-folds cross-validation是指纯路,將訓(xùn)練集分為N份或油,使用N-1份做訓(xùn)練,使用1份做測試驰唬,如此循環(huán)N次顶岸,最后整體計算結(jié)果。
d)Percentage split:按照一定比例叫编,將訓(xùn)練集分為兩份辖佣,一份做訓(xùn)練,一份做測試搓逾。
在這些驗證方法的下面卷谈,有一個More options選項,可以設(shè)置一些模型輸出霞篡,模型驗證的參數(shù)世蔗。3)Result list
這個區(qū)域保存分類實驗的歷史,右鍵點擊記錄朗兵,可以看到很多選項污淋。常用的有保存或加載模型以及可視化的一些選項。4)Classifier output
分類器的輸出結(jié)果余掖,默認的輸出選項有Run information寸爆,該項給出了特征、樣本及模型驗證的一些概要信息;Classifier model赁豆,給出的是模型的一些參數(shù)仅醇,不同的分類器給出的信息不同。最下面是模型驗證的結(jié)果歌憨,給出了 一些常用的一些驗證標(biāo)準(zhǔn)的結(jié)果着憨,比如準(zhǔn)確率(Precision),召回率(Recall)务嫡,真陽性率(True positive rate)甲抖,假陽性率(False positive rate),F(xiàn)值(F-Measure)心铃,Roc面積(Roc Area)等准谚。Confusion Matrix給出了測試樣本的分類情況,通過它去扣,可以很方便地看出正確分類或錯誤分類的某一類樣本的數(shù)量柱衔。Case 1:使用J48對labor文件做分類
1)打開labor.arff文件,切換到classify面板愉棱。
2)選擇trees->J48分類器唆铐,使用默認參數(shù)。
3)Test options選擇默認的十折交叉驗證奔滑,點開More options艾岂,勾選Output predictions。
4)點擊start按鈕朋其,啟動實驗王浴。
5)在右側(cè)的Classifier output里面,我們看到了實驗的結(jié)果梅猿。-
Run information
上圖給出了實驗用的分類器以及具體參數(shù)氓辣,實驗名稱,樣本數(shù)量袱蚓,特征數(shù)量以及所用特征钞啸,測試模式。
-
模型信息
上圖給出了生成的決策樹喇潘,以及葉子節(jié)點數(shù)体斩、樹的節(jié)點數(shù)、模型訓(xùn)練時間响蓉。如果覺得這樣不直觀,可以在Result list里面右鍵點擊剛剛進行的實驗哨毁,點擊Visualize Tree枫甲,可以看到圖形界面的決策樹,十分直觀。
-
決策樹
再往下是預(yù)測結(jié)果想幻,可以看到每個樣本的實際分類粱栖,預(yù)測分類,是否錯分脏毯,預(yù)測概率這些信息闹究。
-
預(yù)測結(jié)果
最下面是驗證結(jié)果,整體的accuracy是73.68%食店,bad類準(zhǔn)確率是60.9%渣淤,召回率70.0%,good類準(zhǔn)確率是82.4%吉嫩,召回率75.7%价认。
-
模型效果評估結(jié)果
7. 可視化
打開Explorer的Visualize面板,可以看到最上面是一個二維的圖形矩陣自娩,該矩陣的行和列均為所有的特征(包括類別標(biāo)簽)用踩,第i行第j列表示特征i和特征j在二維平面上的分布情況。圖形上的每個點表示一個樣本忙迁,不同的類別使用不同的顏色標(biāo)識脐彩。
下面有幾個選項,PlotSize可以調(diào)整圖形的大小姊扔,PointSize可以調(diào)整樣本點的大小惠奸,Jitter可以調(diào)整點之間的距離,有些時候點過于集中旱眯,可以通過調(diào)整Jitter將它們分散開晨川。
-
plot matrix二維圖
上圖是duration和class兩個特征的圖形,可以看出删豺,duration并不是一個好特征共虑,在各個特征值區(qū)間,good和bad的分布差不多呀页。
單擊某個區(qū)域的圖形妈拌,會彈出另外一個窗口,這個窗口給出的也是某兩個特征之間分布的圖形蓬蝶,不同的是尘分,在這里,通過點擊樣本點丸氛,可以彈出樣本的詳細信息培愁。
可視化還可以用來查看誤分的樣本,這是非常實用的一個功能缓窜。分類結(jié)束后定续,在Result list里右鍵點擊分類的記錄谍咆,選擇Visualize classify errors,會彈出如下窗口私股。
-
誤分樣本可視化
這個窗口里面,十字表示分類正確的樣本摹察,方塊表示分類錯誤的樣本,X軸為實際類別倡鲸,Y軸為預(yù)測類別供嚎,藍色為實際的bad,紅色為實際的good峭状。這樣克滴,藍色方塊就表示實際為bad,但為誤分為good的樣本宁炫,紅色方塊表示實際為good偿曙,被誤分為bad的樣本。單擊這些點羔巢,便可以看到該樣本的各個特征值望忆,分析為什么這個樣本被誤分了。
再介紹一個比較實用的功能竿秆,右鍵點擊Result list里的記錄启摄,選擇Visualize threshold curve,然后選好類別幽钢,可以看到如下圖形
-
閾值曲線
該圖給出的是分類置信度在不同閾值下歉备,分類效果評價標(biāo)準(zhǔn)的對比情況。上圖給出的是假陽性比率和真陽性比率在不同閾值下的對比匪燕,其實給出的就是ROC曲線蕾羊。我們可以通過選擇顏色,方便地觀察不同評價標(biāo)準(zhǔn)的分布情況帽驯。如果X軸和Y軸選擇的是準(zhǔn)確率和召回率龟再,那我們可以通過這個圖,在這兩個值之間做trade-off尼变,選擇一個合適的閾值利凑。
其它的一些可視化功能,不再一一介紹嫌术。
8. 小結(jié)
本文僅僅針對weka的Explorer界面的某些功能做了介紹哀澈,Explorer其它的功能,比如聚類度气、關(guān)聯(lián)規(guī)則割按、特征選擇,以及Experimentor和KnowledgeFlow界面使用磷籍,可以參考weka的官方文檔适荣。
另外丙躏,weka支持擴展包,可以很方便地把liblinear束凑、libsvm這樣的開源工具放進來。
在Linux下面栅盲,可以使用weka的命令行進行實驗汪诉,具體的使用方法,也請參考weka官方文檔谈秫。