天天看點

Weka的使用

1.簡介

資料挖掘、機器學習這些字眼,在一些人看來,是門檻很高的東西。誠然,如果做算法實作甚至算法優化,确實需要很多背景知識。但事實是,絕大多數資料挖掘工程師,不需要去做算法層面的東西。他們的精力,集中在特征提取,算法選擇和參數調優上。那麼,一個可以友善地提供這些功能的工具,便是十分必要的了。而weka,便是資料挖掘工具中的佼佼者。

Weka的全名是懷卡托智能分析環境(Waikato Environment for Knowledge Analysis),是一款免費的,非商業化的,基于JAVA環境下開源的機器學習以及資料挖掘軟體。它和它的源代碼可在其官方網站下載下傳。有趣的是,該軟體的縮寫WEKA也是New Zealand獨有的一種鳥名,而Weka的主要開發者同時恰好來自紐西蘭的the University of Waikato。(本段摘自百度百科)。

Weka提供的功能有資料處理,特征選擇、分類、回歸、聚類、關聯規則、可視化等。本文将對Weka的使用做一個簡單的介紹,并通過簡單的示例,使大家了解使用weka的流程。本文将僅對圖形界面的操作做介紹,不涉及指令行和代碼層面的東西。

2.安裝

Weka的官方位址是

http://www.cs.waikato.ac.nz/ml/weka/

。點開左側download欄,可以進入下載下傳頁面,裡面有windows,mac os,linux等平台下的版本,我們以windows系統作為示例。目前穩定的版本是3.6。

如果本機沒有安裝java,可以選擇帶有jre的版本。下載下傳後是一個exe的可執行檔案,輕按兩下進行安裝即可。

安裝完畢,打開啟動weka的快捷方式,如果可以看到下面的界面,那麼恭喜,安裝成功了。

  • weka啟動界面:

視窗右側共有4個應用,分别是

  • 1)Explorer

    用來進行資料實驗、挖掘的環境,它提供了分類,聚類,關聯規則,特征選擇,資料可視化的功能。(An environment for exploring data with WEKA)

  • 2)Experimentor

    用來進行實驗,對不同學習方案進行資料測試的環境。(An environment for performing experiments and conducting statistical tests between learning schemes.)

  • 3)KnowledgeFlow

    功能和Explorer差不多,不過提供的接口不同,使用者可以使用拖拽的方式去建立實驗方案。另外,它支援增量學習。(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.資料格式

Weka支援很多種檔案格式,包括arff、xrff、csv,甚至有libsvm的格式。其中,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檔案,來源于加拿大勞資談判的案例,它根據勞工的個人資訊,來預測勞資談判的最終結果。

檔案中,“%”開頭的是注釋。剩餘的可以分為兩大部分,頭資訊(header information)和資料資訊(data information)。

頭資訊中,“@relation”開頭的行代表關系名稱,在整個檔案的第一行(除去注釋)。格式是

@relation

“@attribute”開頭的代表特征,格式是

@attribute

attribute-name是特征的名稱,後面是資料類型,常用資料類型有以下幾種

  • 1)numeric,數字類型,包括integer(整數)和real(實數)
  • 2)nominal,可以認為是枚舉類型,即特征值是有限的集合,可以是字元串或數字。
  • 3)string,字元串類型,值可以是任意的字元串。

    從“@data”開始,是實際的資料部分。每一行代表一個執行個體,可以認為是一個特征向量。各個特征的順序與頭資訊中的attribute逐個對應,特征值之間用逗号分割。在有監督分類中,最後一列是标注的結果。

某些特征的數值如果是缺失的,可以用“?”代替。

資料挖掘流程使用weka進行資料挖掘的流程如下圖

  • 資料挖掘流程圖

其中,在weka内進行的是資料預處理,訓練,驗證這三個步驟。

  • 1)資料預處理

    資料預處理包括特征選擇,特征值處理(比如歸一化),樣本選擇等操作。

  • 2)訓練

    訓練包括算法選擇,參數調整,模型訓練。

  • 3)驗證

    對模型結果進行驗證。

本文剩餘部分将以這個流程為主線,以分類為示例,介紹使用weka進行資料挖掘的步驟。

5. 資料預處理

打開Explorer界面,點“open file”,在weka安裝目錄下,選擇data目錄裡的“labor.arff”檔案,将會看到如下界面。我們将整個區域分為7部分,下面将分别介紹每部分的功能。

  • Explorer界面
  • 1)區域1共6個頁籤,用來選擇不同的資料挖掘功能面闆,從左到右依次是Preprocess(預處理)、Classify(分類)、Cluster(聚類)、Associate(關聯規則)、Select attribute(特征選擇)和Visualize(可視化)。
  • 2)區域2提供了打開、儲存,編輯檔案的功能。打開檔案不僅僅可以直接從本地選擇,還可以使用url和db來做資料源。Generate按鈕提供了資料生成的功能,weka提供了幾種生成資料的方法。點開Edit,将看到如下界面
  • arff viewer

在這個界面,可以看到各行各列對應的值,右鍵每一列的名字,可以看到一些編輯資料的功能,這些功能還是比較實用的。

  • 3)區域3名為Filter,有些人可能會聯想到特征選擇裡面的Filter方法,事實上,Filter針對特征(attribute)和樣本(instance)提供了大量的操作方法,功能十分強大。
  • 4)在區域4,可以看到目前的特征、樣本資訊,并提供了特征選擇和删除的功能。
  • 5)在區域4用滑鼠選擇單個特征後,區域5将顯示該特征的資訊。包括最小值、最大值、期望和标準差。
  • 6)區域6提供了可視化功能,選擇特征後,該區域将顯示特征值在各個區間的分布情況,不同的類别标簽以不同的顔色顯示。
  • 7)區域7是狀态欄,沒有任務時,小鳥是坐着的,任務運作時,小鳥會站起來左右搖擺。如果小鳥站着但不轉動,表示任務出了問題。

    下面将通過執行個體介紹Filters的各項功能。

點開Filter下面的choose按鈕,可以看到如下界面

  • filter方法選擇界面

Filters可分為兩大類,supervised和unsupervised。supervised下的方法需要類别标簽,而unsupervised則不需要。attribute類别表示對特征做篩選,instance表示對樣本做選擇。

  • 1)case 1:特征值歸一化

    該項功能與類别無關,且是針對attribute的,我們選擇unsupervised -> attribute下面的Normalize。點開Normalize所在的區域,将看到如下界面。左邊的視窗,有幾個參數可以選擇。點選more,将出現右邊的視窗,該視窗詳細介紹了此功能。

  • 歸一化參數設定界面

使用預設參數,點選ok,回到主視窗。在區域4選好将要歸一化的特征,可以是一個或多個,然後點選apply。在可視化區域中,我們可以看到特征值從1到3被歸一到了0到1之間。

  • duration特征歸一化之前
  • duration特征歸一化之後
  • 2)case 2: 分類器特征篩選

    該功能與類别相關,選擇supervised -> attribute下面的AttributeSelection。該界面有兩個選項,evaluator是評價特征集合有效性的方法,search是特征集合搜尋的方法。在這裡,我們使用InformationGainAttributeEval作為evaluator,使用Ranker作為search,表示我們将根據特征的資訊增益值對特征做排序。Ranker中可以設定門檻值,低于這個門檻值的特征将被扔掉。

  • 特征選擇參數

點選apply,可以看到在區域4裡特征被重新排序,低于門檻值的已被删掉。

  • 特征選擇之前
  • 特征選擇之後
  • 3)case 3:選擇分類器錯分的樣本

    選擇unsupervised -> instance下面的RemoveMisclassified,可以看到6個參數,classIndex用來設定類别标簽,classifier用來選擇分類器,這裡我們選擇J48決策樹,invert我們選擇true,這樣保留的是錯分樣本,numFolds用來設定交叉驗證的參數。設定好參數之後,點選apply,可以看到樣本的數量從57減少到了7。

  • 參數設定
6. 分類

在Explorer中,打開classifer頁籤,整個界面被分成幾個區域。分别是

  • 1)Classifier

    點選choose按鈕,可以選擇weka提供的分類器。常用的分類器有

a)bayes下的Naïve Bayes(樸素貝葉斯)和BayesNet(貝葉斯信念網絡)。

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:使用訓練集,即訓練集和測試集使用同一份資料,一般不使用這種方法。

b)Supplied test set:設定測試集,可以使用本地檔案或者url,測試檔案的格式需要跟訓練檔案格式一緻。

c)Cross-validation:交叉驗證,很常見的驗證方法。N-folds cross-validation是指,将訓練集分為N份,使用N-1份做訓練,使用1份做測試,如此循環N次,最後整體計算結果。

d)Percentage split:按照一定比例,将訓練集分為兩份,一份做訓練,一份做測試。

在這些驗證方法的下面,有一個More options選項,可以設定一些模型輸出,模型驗證的參數。

  • 3)Result list

    這個區域儲存分類實驗的曆史,右鍵點選記錄,可以看到很多選項。常用的有儲存或加載模型以及可視化的一些選項。

  • 4)Classifier output

    分類器的輸出結果,預設的輸出選項有Run information,該項給出了特征、樣本及模型驗證的一些概要資訊;Classifier model,給出的是模型的一些參數,不同的分類器給出的資訊不同。最下面是模型驗證的結果,給出了   一些常用的一些驗證标準的結果,比如準确率(Precision),召回率(Recall),真陽性率(True positive rate),假陽性率(False positive rate),F值(F-Measure),Roc面積(Roc Area)等。Confusion Matrix給出了測試樣本的分類情況,通過它,可以很友善地看出正确分類或錯誤分類的某一類樣本的數量。

  • Case 1:使用J48對labor檔案做分類

    1)打開labor.arff檔案,切換到classify面闆。

2)選擇trees->J48分類器,使用預設參數。

3)Test options選擇預設的十折交叉驗證,點開More options,勾選Output predictions。

4)點選start按鈕,啟動實驗。

5)在右側的Classifier output裡面,我們看到了實驗的結果。

  • Run information

上圖給出了實驗用的分類器以及具體參數,實驗名稱,樣本數量,特征數量以及所用特征,測試模式。

  • 模型資訊

上圖給出了生成的決策樹,以及葉子節點數、樹的節點數、模型訓練時間。如果覺得這樣不直覺,可以在Result list裡面右鍵點選剛剛進行的實驗,點選Visualize Tree,可以看到圖形界面的決策樹,十分直覺。

  • 決策樹

再往下是預測結果,可以看到每個樣本的實際分類,預測分類,是否錯分,預測機率這些資訊。

  • 預測結果

最下面是驗證結果,整體的accuracy是73.68%,bad類準确率是60.9%,召回率70.0%,good類準确率是82.4%,召回率75.7%。

  • 模型效果評估結果
7. 可視化

打開Explorer的Visualize面闆,可以看到最上面是一個二維的圖形矩陣,該矩陣的行和列均為所有的特征(包括類别标簽),第i行第j清單示特征i和特征j在二維平面上的分布情況。圖形上的每個點表示一個樣本,不同的類别使用不同的顔色辨別。

下面有幾個選項,PlotSize可以調整圖形的大小,PointSize可以調整樣本點的大小,Jitter可以調整點之間的距離,有些時候點過于集中,可以通過調整Jitter将它們分散開。

  • plot matrix二維圖

上圖是duration和class兩個特征的圖形,可以看出,duration并不是一個好特征,在各個特征值區間,good和bad的分布差不多。

單擊某個區域的圖形,會彈出另外一個視窗,這個視窗給出的也是某兩個特征之間分布的圖形,不同的是,在這裡,通過點選樣本點,可以彈出樣本的詳細資訊。

可視化還可以用來檢視誤分的樣本,這是非常實用的一個功能。分類結束後,在Result list裡右鍵點選分類的記錄,選擇Visualize classify errors,會彈出如下視窗。

  • 誤分樣本可視化

這個視窗裡面,十字表示分類正确的樣本,方塊表示分類錯誤的樣本,X軸為實際類别,Y軸為預測類别,藍色為實際的bad,紅色為實際的good。這樣,藍色方塊就表示實際為bad,但為誤分為good的樣本,紅色方塊表示實際為good,被誤分為bad的樣本。單擊這些點,便可以看到該樣本的各個特征值,分析為什麼這個樣本被誤分了。

再介紹一個比較實用的功能,右鍵點選Result list裡的記錄,選擇Visualize threshold curve,然後選好類别,可以看到如下圖形

  • 門檻值曲線

該圖給出的是分類置信度在不同門檻值下,分類效果評價标準的對比情況。上圖給出的是假陽性比率和真陽性比率在不同門檻值下的對比,其實給出的就是ROC曲線。我們可以通過選擇顔色,友善地觀察不同評價标準的分布情況。如果X軸和Y軸選擇的是準确率和召回率,那我們可以通過這個圖,在這兩個值之間做trade-off,選擇一個合适的門檻值。

其它的一些可視化功能,不再一一介紹。

8. 小結

本文僅僅針對weka的Explorer界面的某些功能做了介紹,Explorer其它的功能,比如聚類、關聯規則、特征選擇,以及Experimentor和KnowledgeFlow界面使用,可以參考weka的官方文檔。

另外,weka支援擴充包,可以很友善地把liblinear、libsvm這樣的開源工具放進來。

在Linux下面,可以使用weka的指令行進行實驗,具體的使用方法,也請參考weka官方文檔。

繼續閱讀