weka算法介紹

RWeka (http://cran.r-project.org/web/packages/RWeka/index.html) : 
1) 數據輸入和輸出 
WOW():查看Weka函數的參數。 
Weka_control():設置Weka函數的參數。 
read.arff():讀Weka Attribute-Relation File Format (ARFF)格式的數據。 
write.arff:將數據寫入Weka Attribute-Relation File Format (ARFF)格式的文件。 
2) 數據預處理 
Normalize():無監督的標準化連續性數據。 
Discretize():用MDL(Minimum Description Length)方法,有監督的離散化連續性數值數據。 
3) 分類和迴歸 
IBk():k最近鄰分類 
LBR():naive Bayes法分類 
J48():C4.5決策樹算法(決策樹在分析各個屬性時,是徹底獨立的)。 
LMT():組合樹結構和Logistic迴歸模型,每一個葉子節點是一個Logistic迴歸模型,準確性比單獨的決策樹和Logistic迴歸方法要好。 
M5P():M5 模型數算法,組合了樹結構和線性迴歸模型,每一個葉子節點是一個線性迴歸模型,於是可用於連續數據的迴歸。 
DecisionStump():單層決策樹算法,常被做爲boosting的基本學習器。 
SMO():支持向量機分類 
AdaBoostM1():Adaboost M1方法。-W參數指定弱學習器的算法。 
Bagging():經過從原始數據取樣(用替換方法),建立多個模型。 
LogitBoost():弱學習器採用了對數迴歸方法,學習到的是實數值 
MultiBoostAB():AdaBoost 方法的改進,可看做AdaBoost 和 「wagging」的組合。 
Stacking():用於不一樣的基本分類器集成的算法。 
LinearRegression():創建合適的線性迴歸模型。 
Logistic():創建logistic迴歸模型。 
JRip():一種規則學習方法。 
M5Rules():用M5方法產生迴歸問題的決策規則。 
OneR():簡單的1-R分類法。 
PART():產生PART決策規則。 
4) 聚類 
Cobweb():這是種基於模型方法,它假設每一個聚類的模型並發現適合相應模型的數據。不適合對大數據庫進行聚類處理。 
FarthestFirst():快速的近似的k均值聚類算法 
SimpleKMeans():k均值聚類算法 
XMeans():改進的k均值法,能自動決定類別數 
DBScan():基於密度的聚類方法,它根據對象周圍的密度不斷增加聚類。它能從含有噪聲的空間數據庫中發現任意形狀的聚類。此方法將一個聚類定義爲一組「密度鏈接」的點集。 
5)關聯規則 
Apriori():Apriori是關聯規則領域裏最具影響力的基礎算法,是一種廣度優先算法,經過屢次掃描數據庫來獲取支持度大於最小支持度的頻繁項集。它的理論基礎是頻繁項集的兩個單調性原則:頻繁項集的任一子集必定是頻繁的;非頻繁項集的任一超集必定是非頻繁的。在海量數據的狀況下,Apriori 算法的時間和空間成本很是高。 
Tertius():Tertius算法。 
6)預測和評估: 
predict():根據分類或聚類結果預測新數據的類別 
table():比較兩個因子對象 
evaluate_Weka_classifier():評估模型的執行,如:TP Rate,FP Rate,Precision,Recall,F-Measure。html

 

 

3. 分類與迴歸 
背景知識 
WEKA把分類(Classification)和迴歸(Regression)都放在「Classify」選項卡中,這是有緣由的。 
在 這兩個任務中,都有一個目標屬性(輸出變量)。咱們但願根據一個樣本(WEKA中稱做實例)的一組特徵(輸入變量),對目標進行預測。爲了實現這一目的, 咱們須要有一個訓練數據集,這個數據集中每一個實例的輸入和輸出都是已知的。觀察訓練集中的實例,能夠創建起預測的模型。有了這個模型,咱們就能夠新的輸出 未知的實例進行預測了。衡量模型的好壞就在於預測的準確程度。 
在WEKA中,待預測的目標(輸出)被稱做Class屬性,這應該是來自分類任務 的「類」。通常的,若Class屬性是分類型時咱們的任務才叫分類,Class屬性是數值型時咱們的任務叫回歸。 

選擇算法 
這一節中,咱們使用C4.5決策樹算法對bank-data創建起分類模 型。 
咱們來看原來的「
bank-data.csv」文件。「ID」屬性確定是不須要的。因爲C4.5算法能夠處理數值型的屬性,我 們不用像前面用關聯規則那樣把每一個變量都離散化成分類型。儘管如此,咱們仍是把「Children」屬性轉換成分類型的兩個值「YES」和「NO」。另 外,咱們的訓練集僅取原來數據集實例的一半;而從另一半中抽出若干條做爲待預測的實例,它們的「pep」屬性都設爲缺失值。通過了這些處理的訓練集數據 在這裏下載;待預測集數據在這裏下載。 

咱們用「Explorer」打開訓練集「bank.arff」,觀察一下它是不 是按照前面的要求處理好了。切換到「Classify」選項卡,點擊「Choose」按鈕後能夠看到不少分類或者回歸的算法分門別類的列在一個樹型框裏。 3.5版的WEKA中,樹型框下方有一個「Filter...」按鈕,點擊能夠根據數據集的特性過濾掉不合適的算法。咱們數據集的輸入屬性中有 「Binary」型(即只有兩個類的分類型)和數值型的屬性,而Class變量是「Binary」的;因而咱們勾選「Binary attributes」「Numeric attributes」和「Binary class」。點「OK」後回到樹形圖,能夠發現一些算法名稱變紅了,說明它們不能用。選擇「trees」下的「J48」,這就是咱們須要的C4.5算 法,還好它沒有變紅。 
點擊「Choose」右邊的文本框,彈出新窗口爲該算法設置各類參數。點「More」查看參數說明,點 「Capabilities」是查看算法適用範圍。這裏咱們把參數保持默認。 
如今來看左中的「Test Option」。咱們沒有專門設置檢驗數據集,爲了保證生成的模型的準確性而不至於出現過擬合(overfitting)的現象,咱們有必要採用10折交 叉驗證(10-fold cross validation)來選擇和評估模型。若不明白交叉驗證的含義能夠Google一下。 

建模結果 
OK,選上「Cross-validation」並在「Folds」框填上「10」。點「Start」按鈕開始讓算法生成決策樹模型。很快,用 文本表示的一棵決策樹,以及對這個決策樹的偏差分析等等結果出如今右邊的「Classifier output」中。同時左下的「Results list」出現了一個項目顯示剛纔的時間和算法名稱。若是換一個模型或者換個參數,從新「Start」一次,則「Results list」又會多出一項。 

咱們看到「J48」算法交叉驗證的結果之一爲 
Correctly Classified Instances 206 68.6667 % 
也就是說這個模型 的準確度只有69%左右。也許咱們須要對原屬性進行處理,或者修改算法的參數來提升準確度。但這裏咱們無論它,繼續用這個模型。 

右鍵點 擊「Results list」剛纔出現的那一項,彈出菜單中選擇「Visualize tree」,新窗口裏能夠看到圖形模式的決策樹。建議把這個新窗口最大化,而後點右鍵,選「Fit to screen」,能夠把這個樹看清楚些。看完後截圖或者關掉
Razz 

這 裏咱們解釋一下「Confusion Matrix」的含義。 
=== Confusion Matrix === 
  a b <-- classified as 
  74 64 | a = YES 
  30 132 | b = NO
 
這個矩陣是說,本來「pep」是「YES」的實例,有74個被正確的預測爲 「YES」,有64個錯誤的預測成了「NO」;本來「pep」是「NO」的實例,有30個被錯誤的預測爲「YES」,有132個正確的預測成了「NO」。 74+64+30+132 = 300是實例總數,而(74+132)/300 = 0.68667正好是正確分類的實例所佔比例。這個矩陣對角線上的數字越大,說明預測得越好。 

模型應用 
如今咱們要用生成的模型對那些待預測的數據集進行預測了,注意待預測數據集和訓練用數據集各個屬性的設 置必須是一致的。WEKA中並無直接提供把模型應用到帶預測數據集上的方法,咱們要採起間接的辦法。 
在「Test Opion」中選擇「Supplied test set」,而且「Set」成「bank-new.arff」文件。從新「Start」一次。注意此次生成的模型沒有經過交叉驗證來選擇,「Classifier output」給出的偏差分析也沒有多少意義。這也是間接做預測帶來的缺陷吧。 
如今,右鍵點擊「Result list」中剛產生的那一項,選擇「Visualize classifier errors」。咱們不去管新窗口中的圖有什麼含義,點「Save」按鈕,把結果保存成「bank-predicted.arff」。這個ARFF文件中 就有咱們須要的預測結果。在「Explorer」的「Preprocess」選項卡中打開這個新文件,能夠看到多了兩個屬性 「Instance_number」和「predictedpep」。「Instance_number」是指一個實例在原「bank- new.arff」文件中的位置,「predictedpep」就是模型預測的結果。點「Edit」按鈕或者在「ArffViewer」模塊中打開能夠查 看這個數據集的內容。好比,咱們對實例0的pep預測值爲「YES」,對實例4的預測值爲「NO」。 

使用命令行(推薦) 
雖然使用圖形界面查看結果和設置參數很方便,可是最直接最靈活的 建模及應用的辦法還是使用命令行。 
打開「Simple CLI」模塊,像上面那樣使用「J48」算法的命令格式爲: 
java weka.classifiers.trees.J48 -C 0.25 -M 2 -t directory-path\bank.arff -d directory-path \bank.model 
其中參數「 -C 0.25」和「-M 2」是和圖形界面中所設的同樣的。「-t 」後面跟着的是訓練數據集的完整路徑(包括目錄和文件名),「-d 」後面跟着的是保存模型的完整路徑。注意!這裏咱們能夠把模型保存下來。 
輸入上述命令後,所獲得樹模型和偏差分析會在「Simple CLI」上方顯示,能夠複製下來保存在文本文件裏。偏差是把模型應用到訓練集上給出的。 
把這個模型應用到「bank-new.arff」所用命 令的格式爲: 
java weka.classifiers.trees.J48 -p 9 -l directory-path\bank.model -T directory-path \bank-new.arff 
其 中「-p 9」說的是模型中的Class屬性是第9個(也就是「pep」),「-l」後面是模型的完整路徑,「-T」後面是待預測數據集的完整路徑。 
輸 入上述命令後,在「Simple CLI」上方會有這樣一些結果: 
0 YES 0.75 ? 
1 NO 0.7272727272727273 ? 
2 YES 0.95 ? 
3 YES 0.8813559322033898 ? 
4 NO 0.8421052631578947 ? 
...
 
這裏 的第一列就是咱們提到過的「Instance_number」,第二列就是剛纔的「predictedpep」,第四列則是「bank- new.arff」中原來的「pep」值(這裏都是「?」缺失值)。第三列對預測結果的置信度(confidence )。好比說對於實例0,咱們有75%的把握說它的「pep」的值會是「YES」,對實例4咱們有84.2%的把握說它的「pep」值會是「NO」。 
我 們看到,使用命令行至少有兩個好處。一個是能夠把模型保存下來,這樣有新的待預測數據出現時,不用每次從新建模,直接應用保存好的模型便可。另外一個是對預 測結果給出了置信度,咱們能夠有選擇的採納預測結果,例如,只考慮那些置信度在85%以上的結果。 
惋惜,命令行仍不能保存交叉驗證等方式選擇過 的模型,也不能將它們應用到待預測數據上。要實現這一目的,須用到「KnowledgeFlow」模塊的「 PredictionAppender」。 

---- 整理自
http://maya.cs.depaul.edu/~classes/ect584/WEKA/classify.html 



4. 聚類分析 

原理與實現 
聚類分析中的「類」(cluster)和前面分類的「類」(class)是不一樣的,對cluster更加準確的翻譯應該是「簇」。聚類的任務是 把全部的實例分配到若干的簇,使得同一個簇的實例彙集在一個簇中心的周圍,它們之間距離的比較近;而不一樣簇實例之間的距離比較遠。對於由數值型屬性刻畫的 實例來講,這個距離一般指歐氏距離。 
如今咱們對前面的「bank data」做聚類分析,使用最多見的K均值(K-means)算法。下面咱們簡單描述一下K均值聚類的步驟。 
K均值算法首先隨機的指定K個簇中 心。而後:1)將每一個實例分配到距它最近的簇中心,獲得K個簇;2)計分別計算各簇中全部實例的均值,把它們做爲各簇新的簇中心。重複1)和2),直到K 個簇中心的位置都固定,簇的分配也固定。 

上述K均值算法只能處理數值型的屬性,遇到分類型的屬性時要把它變爲若干個取值0和1的屬性。 WEKA將自動實施這個分類型到數值型的變換,並且WEKA會自動對數值型的數據做標準化。所以,對於原始數據「bank-data.csv」,咱們所作 的預處理只是刪去屬性「id」,保存爲ARFF格式後,修改屬性「children」爲分類型。這樣獲得的數據文件爲「
bank.arff」,含600條實例。 

用「Explorer」打開剛纔獲得的 「bank.arff」,並切換到「Cluster」。點「Choose」按鈕選擇「SimpleKMeans」,這是WEKA中實現K均值的算法。點擊 旁邊的文本框,修改「numClusters」爲6,說明咱們但願把這600條實例聚成6類,即K=6。下面的「seed」參數是要設置一個隨機種子,依 此產生一個隨機數,用來獲得K均值算法中第一次給出的K個簇中心的位置。咱們不妨暫時讓它就爲10。 
選中「Cluster Mode」的「Use training set」,點擊「Start」按鈕,觀察右邊「Clusterer output」給出的聚類結果。也能夠在左下角「Result list」中此次產生的結果上點右鍵,「View in separate window」在新窗口中瀏覽結果。 

結果解釋 
首先我 們注意到結果中有這麼一行: 
Within cluster sum of squared errors: 1604.7416693522332 
這是評價聚類好壞的標準,數值越小說明同一簇實例之間的 距離越小。也許你獲得的數值會不同;實際上若是把「seed」參數改一下,獲得的這個數值就可能會不同。咱們應該多嘗試幾個seed,並採納這個數值 最小的那個結果。例如我讓「seed」取100,就獲得 
Within cluster sum of squared errors: 1555.6241507629218 
我該取後面這個。固然再 嘗試幾個seed,這個數值可能會更小。 

接下來「Cluster centroids:」以後列出了各個簇中心的位置。對於數值型的屬性,簇中心就是它的均值(Mean);分類型的就是它的衆數(Mode), 也就是說這個屬性上取值爲衆數值的實例最多。對於數值型的屬性,還給出了它在各個簇裏的標準差(Std Devs)。 

最後的 「Clustered Instances」是各個簇中實例的數目及百分比。 

爲了觀察可視化的聚類結果,咱們在左下方「Result list」列出的結果上右擊,點「Visualize cluster assignments」。彈出的窗口給出了各實例的散點圖。最上方的兩個框是選擇橫座標和縱座標,第二行的「color」是散點圖着色的依據,默認是根 據不一樣的簇「Cluster」給實例標上不一樣的顏色。 
能夠在這裏點「Save」把聚類結果保存成ARFF文件。在這個新的ARFF文件 中,「instance_number」屬性表示某實例的編號,「Cluster」屬性表示聚類算法給出的該實例所在的簇。 
java

相關文章
相關標籤/搜索