偶然間在網上看到了一篇關於weka好的博文,就記錄了下來……html
weka下載地址爲http://www.cs.waikato.ac.nz/ml/weka/downloading.html 算法
讀者有時候看到兩個圖片並列,其中一個是原文的,另外一個是我實驗時打開的。網絡
一.引入app
數據挖掘、機器學習這些字眼,在一些人看來,是門檻很高的東西。誠然,若是作算法實現甚至算法優化,確實須要不少背景知識。但事實是,絕大多數數據挖掘工程師不須要去作算法層面的東西。他們的精力,集中在特徵提取、算法選擇和參數調優上。那麼,一個能夠方便地提供這些功能的工具,即是十分必要的了。而weka,即是數據挖掘工具中的佼佼者。Weka的全名是懷卡託智能分析環境(Waikato Environment for Knowledge Analysis),是一款免費的,非商業化的,基於Java環境下開源的機器學習以及數據挖掘軟件,它和它的源代碼可在其官方網站下載。有趣的是,該軟件的縮寫weka也是New Zealand獨有的一種鳥名,而Weka的主要開發者同時剛好來自新西蘭的the University of Waikato。dom
下面就是weka鳥,咱看下其風采。機器學習
Weka提供的功能有數據處理,特徵選擇、分類、迴歸、聚類、關聯規則、可視化等。本文將對Weka的使用作一個簡單的介紹,並經過簡單的示例,使你們瞭解使用weka的流程。本文將僅對圖形界面的操做作介紹,不涉及命令行和代碼層面的東西。工具
二.工具簡介學習
窗口右側共有4個應用,分別是測試
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 <relation-name>「@attribute」開頭的表明特徵,格式是@attribute <attribute-name> <datatype>attribute-name是特徵的名稱,後面是數據類型,經常使用數據類型有如下幾種
從「@data」開始,是實際的數據部分。每一行表明一個實例,能夠認爲是一個特徵向量。各個特徵的順序與頭信息中的attribute逐個應,特徵值之間用逗號分割。在有監督分類中,最後一列是標註的結果。某些特徵的數值若是是缺失的,能夠用「?」代替。
使用weka進行數據挖掘的流程以下圖:
其中,在weka內進行的是數據預處理,訓練,驗證這三個步驟。
1)數據預處理:數據預處理包括特徵選擇,特徵值處理(好比歸一化),樣本選擇等操做。
2)訓練:訓練包括算法選擇,參數調整,模型訓練。
3)驗證:對模型結果進行驗證。
本文剩餘部分將以這個流程爲主線,以分類爲示例,介紹使用weka進行數據挖掘的步驟。
發現個人界面和這個不同的,不過爲了演示須要,未做改動,知道了由於區域4選擇的不一樣在區域5顯示的便不一樣。
三.數據預處理
數據預處理:打開Explorer界面,點「open file」,在weka安裝目錄下,選擇data目錄裏的「labor.arff」文件,將會看到以下界面。咱們將整個區域分爲7部分,下面將分別介紹每部分的功能。
區域1共6個選項卡,用來選擇不一樣的數據挖掘功能面板,從左到右依次是Preprocess(預處理)、Classify(分類)、Cluster(聚類)、Associate(關聯規則)、Select attribute(特徵選擇)和Visualize(可視化)。
區域2提供了打開、保存,編輯文件的功能。打開文件不只僅能夠直接從本地選擇,還可使用url和db來作數據源。Generate按鈕提供了數據生成的功能,weka提供了幾種生成數據的方法。點開Edit,將看到以下界面
在這個界面,能夠看到各行各列對應的值,右鍵每一列的名字(先點擊列名),能夠看到一些編輯數據的功能,這些功能仍是比較實用的。
區域3名爲Filter,有些人可能會聯想到特徵選擇裏面的Filter方法,事實上,Filter針對特徵(attribute)和樣本(instance)提供了大量的操做方法,功能十分強大。
區域4,能夠看到當前的特徵、樣本信息,並提供了特徵選擇和刪除的功能。在區域4用鼠標選擇單個特徵後,區域5將顯示該特徵的信息。包括最小值、最大值、指望和標準差。
區域6提供了可視化功能,選擇特徵後,該區域將顯示特徵值在各個區間的分佈狀況,不一樣的類別標籤以不一樣的顏色顯示。
區域7是狀態欄,沒有任務時,小鳥是坐着的,任務運行時,小鳥會站起來左右搖擺。若是小鳥站着但不轉動,表示任務出了問題。
四.Filters實例
點開Filter下面的choose按鈕,能夠看到以下界面
Filters可分爲兩大類,supervised(監督、管理)和unsupervised。supervised下的方法須要類別標籤,而unsupervised則不須要。attribute類別表示對特徵作篩選,instance表示對樣本作選擇。
Case 1:特徵值歸一化
該項功能與類別無關,且是針對attribute的,咱們選擇unsupervised -> attribute下面的Normalize。點開Normalize所在的區域(在所選擇的filter上點擊便可),將看到以下界面。左邊的窗口,有幾個參數能夠選擇。點擊more,將出現右邊的窗口,該窗口詳細介紹了此功能。
使用默認參數,點擊ok,回到主窗口。在區域4選好將要歸一化的特徵,能夠是一個或多個,而後點擊apply。在可視化區域中,咱們能夠看到特徵值從1到3被歸一到了0到1之間(看區域5的最大最小值)。
Case 2: 分類器特徵篩選
該功能與類別相關,選擇supervised -> attribute下面的AttributeSelection。該界面有兩個選項,evaluator是評價特徵集合有效性的方法,search是特徵集合搜索的方法。在這裏,咱們使用InformationGainAttributeEval做爲evaluator,使用Ranker做爲search,表示咱們將根據特徵的信息增益值對特徵作排序。Ranker中能夠設置閾值,低於這個閾值的特徵將被扔掉。
點擊apply,能夠看到在區域4裏特徵被從新排序,低於閾值的已被刪掉。
Case 3:選擇分類器錯分的樣本
選擇unsupervised -> instance下面的RemoveMisclassified,能夠看到6個參數,classIndex用來設置類別標籤,classifier用來選擇分類器,這裏咱們選擇J48決策樹,invert咱們選擇true,這樣保留的是錯分樣本,numFolds用來設置交叉驗證的參數。設置好參數以後,點擊apply,能夠看到樣本的數量從57減小到了7。
五.分類
在Explorer中,打開classify選項卡,整個界面被分紅幾個區域。分別是
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文件作分類
a.打開labor.arff文件,切換到classify面板。
b.選擇trees->J48分類器,使用默認參數。
c.Test options選擇默認的十折交叉驗證,點開More options,勾選Output predictions。
d.點擊start按鈕,啓動實驗。
e.在右側的Classifier output裏面,咱們看到了實驗的結果。
上圖給出了實驗用的分類器以及具體參數,實驗名稱,樣本數量,特徵數量以及所用特徵,測試模式。
上圖給出了生成的決策樹,以及葉子節點數、樹的節點數、模型訓練時間。若是以爲這樣不直觀,能夠在Result list裏面右鍵點擊剛剛進行的實驗,點擊Visualize Tree,能夠看到圖形界面的決策樹,十分直觀。
再往下是預測結果,能夠看到每一個樣本的實際分類,預測分類,是否錯分,預測機率這些信息。
最下面是驗證結果,總體的accuracy是73.68%,bad類準確率是60.9%,召回率70.0%,good類準確率是82.4%,召回率75.7%。
5) 可視化
打開Explorer的Visualize面板,能夠看到最上面是一個二維的圖形矩陣,該矩陣的行和列均爲全部的特徵(包括類別標籤),第i行第j列表示特徵i和特徵j在二維平面上的分佈狀況。圖形上的每一個點表示一個樣本,不一樣的類別使用不一樣的顏色標識。下面有幾個選項,PlotSize能夠調整圖形的大小,PointSize能夠調整樣本點的大小,Jitter能夠調整點之間的距離,有些時候點過於集中,能夠經過調整Jitter將它們分散開。
上圖是duration和class兩個特徵的圖形,能夠看出,duration並非一個好特徵,在各個特徵值區間,good和bad的分佈差很少。
單擊某個區域的圖形,會彈出另一個窗口,這個窗口給出的也是某兩個特徵之間分佈的圖形,不一樣的是,在這裏,經過點擊樣本點,能夠彈出樣本的詳細信息。可視化還能夠用來查看誤分的樣本,這是很是實用的一個功能。分類結束後,在Result list裏右鍵點擊分類的記錄,選擇Visualize classify errors,會彈出以下窗口。
這個窗口裏面,十字表示分類正確的樣本,方塊表示分類錯誤的樣本,X軸爲實際類別,Y軸爲預測類別,藍色爲實際的bad,紅色爲實際的good。這樣,藍色方塊就表示實際爲bad,但爲誤分爲good的樣本,紅色方塊表示實際爲good,被誤分爲bad的樣本。單擊這些點,即可以看到該樣本的各個特徵值,分析爲何這個樣本被誤分了。
再介紹一個比較實用的功能,右鍵點擊Result list裏的記錄,選擇Visualize threshold curve,而後選好類別(bad 仍是good),能夠看到以下圖形。
該圖給出的是分類置信度在不一樣閾值下,分類效果評價標準的對比狀況。上圖給出的是假陽性比率和真陽性比率在不一樣閾值下的對比,其實給出的就是ROC曲線。咱們能夠經過選擇顏色,方便地觀察不一樣評價標準的分佈狀況。若是X軸和Y軸選擇的是準確率和召回率,那咱們能夠經過這個圖,在這兩個值之間作trade-off,選擇一個合適的閾值。其它的一些可視化功能,再也不一一介紹。
六.小結
本文僅僅針對weka的Explorer界面的某些功能作了介紹,Explorer其它的功能,好比聚類、關聯規則、特徵選擇,以及Experimentor和KnowledgeFlow界面使用,能夠參考weka的官方文檔。另外,weka支持擴展包,能夠很方便地把liblinear、libsvm這樣的開源工具放進來。在Linux下面,可使用weka的命令行進行實驗,具體的使用方法,也請參考weka官方文檔。有這樣一款開源、免費、強大的數據挖掘工具,你還在等什麼呢?沒有用過weka的數據挖掘工程師們,趕忙行動吧。
參考來源:百度搜索研發部,原文有刪改。