Weka -- 分類算法之C4.5

WEKA把分類(Classification)和迴歸(Regression)都放在“Classify”選項卡中,我們希望根據一個樣本的一組特徵,對目標進行預測。爲了實現這一目的, 我們需要有一個訓練數據集,這個數據集中每個實例的輸入和輸出都是已知的。觀察訓練集中的實例,可以建立起預測的模型。有了這個模型,我們就可以新的輸出未知的實例進行預測了,衡量模型的好壞就在於預測的準確程度。 

在WEKA中,待預測的目標(輸出)被稱作Class屬性,這應該是來自分類任務的“類”。一般的,若Class屬性是分類型時我們的任務才叫分類,Class屬性是數值型時我們的任務叫回歸。

這裏介紹用C4.5決策樹算法對數據建立起分類模型,C4.5算法可以處理數值型的屬性。

首先選擇數據源,然後切換到“Classify”選項卡,點擊“Choose”按鈕後可以看到很多分類或者回歸的算法分門別類在一個樹型框裏。 樹型框下方有一個“Filter...”按鈕,點擊可以根據數據集的特性過濾掉不合適的算法。選擇“trees”下的“J48”,這就是需要的C4.5算法。 

參數介紹:

binarySplits  是否使用二進制分裂名詞性屬性;默認False
confidenceFactor  用於修剪的置信因子(小於該值導致修剪);默認0.25
debug  設置爲true,則分類器可能在控制檯輸出另外的信息;默認False
minNumObj  每個葉的最小實例數量;默認2
numFolds 決定用於reduced-error(減少-誤差)修剪的數據量;一折用於修剪,另外的用於建樹;默認3
reducedErrorPruning  是否使用減少-誤差修剪,而不是C4.5修剪;默認:False
saveInstanceData  是否爲了展示保存訓練數據;默認:False
seed  減少-誤差修剪時,用於隨機化數據的種子;默認:1
subtreeRaising  修剪樹的時候是否考慮子樹上升操作;默認:True
unpruned  修剪是否需要;默認:False
useLaplace  是否葉節點基於拉普拉斯平滑;默認:False
修剪的方式:存在C.4.5修剪,和減少-誤差修剪;reducedErrorPruning控制,默認是C.4.5修剪;
是否修剪:unpruned控制,默認是修剪;
如果沒有專門設置檢驗數據集,爲了保證生成的模型的準確性而不至於出現過擬合(overfitting)的現象,有必要採用交叉驗證(一般選擇10-fold cross validation)來選擇和評估模型。 

右鍵點擊“Results list”中項,彈出菜單中選擇“Visualize tree”,新窗口裏可以看到圖形模式的決策樹。建議把這個新窗口最大化,然後點右鍵,選“Fit to screen”,可以把這個樹看清楚些。 
解釋一下“Confusion Matrix”的含義:
=== Confusion Matrix === 
  a b <-- classified as 
  741 24 | a = YES 
  10 582 | b = NO 
這個矩陣是說,原本“pep”是“YES”的實例,有741個被正確的預測爲 “YES”,有24個錯誤的預測成了“NO”;原本“pep”是“NO”的實例,有10個被錯誤的預測爲“YES”,有582個正確的預測成了“NO”。 741+24+10+582 = 1375是實例總數,而(741+582)/1375 = 0.96218正好是正確分類的實例所佔比例。

我們要用生成的模型對那些待預測的數據集進行預測了,注意待預測數據集和訓練用數據集各個屬性的設 置必須是一致的。WEKA中並沒有直接提供把模型應用到帶預測數據集上的方法,我們要採取間接的辦法。 
在“Test Opion”中選擇“Supplied test set”,並且“Set”成要驗證的文件,“Start”一次。
右鍵點擊“Result list”中剛產生的那一項,選擇“Visualize classifier errors”。點“Save”按鈕,將結果保存。這個ARFF文件中就有我們需要的預測結果。在“Explorer”的“Preprocess”選項卡中打開這個新文件,可以看到多了兩個屬性 “Instance_number”和“predictedpep”。“Instance_number”是指一個實例在原文件中的位置,“predictedpep”就是模型預測的結果。點“Edit”按鈕或者在“ArffViewer”模塊中打開可以查 看這個數據集的內容。

發佈了43 篇原創文章 · 獲贊 13 · 訪問量 30萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章