:::

Weka決策樹分類法使用教學 / Weka J48 Decision Tree Classification Tutorial

image

決策樹是資料探勘(data mining) 分類 (classifition)中的代表性演算法。它是一種監督式演算法,一般是用於預測、建立模型上。它可以協助我們將多維度的大量資料分析成為一些簡單易懂的規則。舉例來說,我們要如何判斷一個職缺好不好呢?我們可以從合約期間、薪資、工時、休假等候選屬性來判斷。決策樹可以幫你分析出第一年薪資會是判斷工作好壞的重要屬性,其次是法定假日。

這兒先不談決策樹背後複雜的演算法,我們可以直接使用開放原始碼的Weka就能簡單地建置一顆決策樹。這篇就是教大家如何使用Weka來建置決策樹的操作教學。


如何取得Weka? / How to get Weka?

關於Weka的介紹我在之前的「Weka的BayesNet分類器操作說明」已有說明,在此就不再重複介紹。

輸入資料 / Data for Mining

image

本教學使用的是Weka提供的範例資料 labor.arff,這是加拿大工業的勞工職缺資料,從至少500多人的資料中整理各種職缺的屬性資訊,以及這份職缺到底是可接受或不可接受的訓練樣本。

這份資料包含了16種屬性:

  • duration: 合約期間,1~7,數值變數。
  • wage-increase-first-year: 首年增加的工資,2.0~7.0,數值變數。
  • wage-increase-second-year: 第二年增加的工資,2.0~7.0,數值變數。
  • wage-increase-third-year: 第三年增加的工資,2.0~7.0,數值變數。
  • cost-of-living-adjustment: 生活津貼調整,沒有/tcf/tc (我不確定這是什麼意思),名義變數。
  • working-hours: 每週工作時數,35~40,數值變數。
  • pension,退休金規劃,沒有/ret_allw/老闆提供,名義變數。
  • stand by-pay: 待命薪資,2~25,數值變數。
  • shift-differential: 工作從II轉換到III的補助 (不確定),1~25,數值變數。
  • education-allowance: 教育津貼,有/沒有,名義變數。
  • statutory-holidays: 法定假日,9~15,數值變數。
  • vacation: 帶薪休假的天數,ba/avg(平均)/gnr,名義變數。
  • longterm-disability-assistance: 僱主對長期工作失能的補助,有/無,名義變數。
  • contribution-to-dental-plan: 僱主提供的牙醫就診補助,沒有/一半/全額,名義變數。
  • bereavement-assistance: 僱主對於喪親的補助,有/無,名義變數。
  • contribution-to-health-plan: 僱主補助員工健康的規劃,無/一半/全額,名義變數。

以及訓練樣本屬性:

  • class:可接受或不可接受 [名義變數]

資料格式 / Data Format

image

這份資料是以Weka的ARFF格式撰寫。這是一種Weka使用的純文字檔案格式,詳細可以看「Data Mining 學習路 - Day 7 資料處理第一步:(3)準備輸入檔案 ARFF」的說明。

es_231_libreoffice_calc85

Weka也可以使用預處理器將CSV格式轉換成ARFF。因此我們可以使用LibreOffice Calc來將資料儲存成CSV格式,再來匯入到Weka計算。作法請見LibreOffice Calc的說明


建置決策樹的步驟 / Building Decision Tree Steps

安裝好Weka,有了資料之後,我們就可以來正式建置決策樹啦。

1. 開啟Weka / Open Weka GUI Chooser

image

請開啟安裝好的Weka。

2. 開啟Weka Explorer / Open Weka Explorer

image

選擇Explorer開啟。

3. 開啟檔案 / Open File

image

在Preproccess裡面點選「Open file…」,選擇準備好的檔案,例如labor.arff。

4. 切換到分類法頁籤 / Switch to Classify

image

確定資料正常載入之後,從上面的頁籤切換到「Classify」(分類法)裡面。

5. 選擇分類法 / Choose Classifier

image

在Classification底下按下「Choose」。

image

切換到「trees」資料夾,點選「J48」。

6. 選擇訓練樣本屬性 / Choose Training Tuples of Data

這一步要選擇一個屬性作為訓練決策樹的依據。這一步不一定要做,因為預設值它就幫我們選好了最後一個屬性。

image

如果你的資料中訓練決策樹的依據不是最後一個屬性,那就依照上圖手動選擇屬性吧。

7. 建立決策樹 / Creating Decision Tree

image

接著按下上圖 (A) 的「Start」。然後右邊Classifier output會顯示建置的數值。其中上圖(B)的「Correctly Classified Instances」表示這顆決策樹的正確率為73.6842%。(附帶一題,這個正確率在分類演算法中並不算高。)

8. 顯示決策樹 / Visualize Tree

image

接著在左邊的Result list中剛剛建置的結果上按滑鼠右鍵,選擇「Visualize tree」。

image

決策樹建置結果就出來了。

從這張圖中我們可以得知首年增加的薪資法定休假是重要的分類依據,整理的規則如下:

  • 首年增加的薪資在2.5以下的話,則是不好的工作
  • 首年增加的薪資大於2.5的話,則繼續看下列規則:
    • 法定休假在10以下的話,則是不好的工作
    • 法定休假在大於10的話,則是好的工作。

 

這樣就建置完成一顆決策樹了!

總共13 則留言, (我要發問)

  1. Weka裡面的分類演算法也有 Logistic Regression 羅吉士回歸,又快又好用,操作方式跟J48決策樹一樣,推薦給大家使用!

    回覆刪除
  2. 想請問安裝後想使用回歸功能,但回歸的演算法都反白,且點擊後也無法進行START,是什麼問題呢?

    回覆刪除
    回覆
    1. To 周軒逸,

      資料格式不符
      很多回歸分類器attribute跟class只能接受numeric類型

      刪除
    2. 請問我的定義有問題嗎?都是數字,還是不能指定範圍?
      @attribute Turn {0,1,2}
      @attribute L {0,1,2}
      @attribute Resistance {0,1,2}
      @attribute Q {0,1,2}

      刪除
    3. 這是類別類型喔
      你看看iris.arff怎麼寫的吧

      @RELATION iris

      @ATTRIBUTE sepallength REAL
      @ATTRIBUTE sepalwidth REAL
      @ATTRIBUTE petallength REAL
      @ATTRIBUTE petalwidth REAL
      @ATTRIBUTE class {Iris-setosa,Iris-versicolor,Iris-virginica}

      刪除
  3. 所以我的資料有需要定義為三種型態的話,就不適合在WEKA進行回歸處理囉?!因為資料格式會被定義為nominal,是這樣嗎?

    回覆刪除
    回覆
    1. To 周軒逸,

      三種形態就是類別形態nominal...
      呃...要先搞懂資料形態的問題,區分好numeric跟nominal的差別
      不是數字寫作1 2 3 4就是numeric

      刪除
    2. 瞭解,所以我的資料不適合做回歸。非常感謝您的回覆。謝謝!

      刪除
    3. To 周軒逸,

      有時候在整理資料時會把類別資料編碼成數字
      像是 男生=1、女生=2
      但他們本質上還是類別資料

      是說這種編碼方式純粹是為了配合SPSS才需要這樣做
      這樣編碼反而容易造成人們誤導
      實在是很沒必要

      刪除
  4. 布丁你好,想請問布丁Visualize tree後最下面leaf裡面的數字是代表什麼意思?

    有些是0,有些是整數(Ex:1、23),有些是分數或是小數(Ex:2.0/1.0、2.1),還有些是小數形式的分數(Ex:2.1/1.3)

    非常感謝布丁介紹Weka!!

    回覆刪除
    回覆
    1. To 陳英和,

      在left裡面的數字,第一個數字是觀察案例數量,第二個數字是案例數量的頻率或平均數

      以上面的這張圖為例
      https://lh3.googleusercontent.com/-4x8RdJlJx8A/Vz3BTpA8e7I/AAAAAAACwyo/xDCyRkdBB9k/s1600/image%25255B45%25255D.png
      wage-increase-first-year <= 2.5: bad (15.27/2.27)
      被分類到bad的第一個數字15.27是指觀察案例的數量
      第二個數字就是被分類到bad而且wage-increase-first-year小於2.5的平均值。

      不過,為什麼觀察案例的數量怎麼會有小數點呢?這是因為labor.arff資料本身有缺失值,非缺失值的比例會反映在案例數量上。詳細請看這篇的解釋:
      https://weka.wikispaces.com/What+do+those+numbers+mean+in+a+J48+tree%3F


      刪除
    2. 了解,非常謝謝布丁的解答!!

      刪除

留言工具: