:::

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的話,則是好的工作。

 

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

總共50 則留言 ( 我要發問 , 隱藏留言 顯示留言 )

  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. 了解,非常謝謝布丁的解答!!

      刪除
    3. In each leaf of the tree, you have the number of instances that fall into the leaf, and the number of incorrectly classified instances of this leaf, both from the training set. (http://weka.8497.n7.nabble.com/SOLVED-j48-tree-display-number-of-instances-and-errors-in-leaves-for-test-set-instead-of-training-set-td37617.html)

      刪除
  5. 你好想請問 我將資料投入,但J48不能使用 原因為何呢?
    投入資料有時間(DATE) 謝謝

    回覆刪除
    回覆
    1. 通常是Class不是J48能夠接受的格式
      你可以看看J48的Capabilities

      CAPABILITIES
      Class -- Binary class, Nominal class, Missing class values

      Attributes -- Nominal attributes, Binary attributes, Empty nominal attributes, Unary attributes, Numeric attributes, Date attributes, Missing values

      Additional
      min # of instances: 0

      然後看看在Preprocess裡面,被你作為分類目標的class,它的Type是不是上述的Binary class, Nominal class, Missing class values
      通常大家都問題都是Class被Weka認為是數字,因此不能使用分類的演算法,只能用迴歸的演算法

      刪除
  6. 你好~想請問假設有1000筆資料
    選擇前80%做為訓練資料 後面20做為測試資料 test options:percentage split:80
    其中沒有缺值 有沒有像iris資料中的?需預測
    想了解前面資料訓練出來的模型是否準確 所以才用後面20去驗證
    這樣的作法是正確的嗎

    回覆刪除
    回覆
    1. 早期的機器學習研究大多會這樣手動切割,80/20作為training/test
      但會有過擬合的問題,也就是找出來的模型可能只特別適用於少量的20%資料

      一般會建議採用cross-validation,將資料拆成10 folds來各別進行驗證
      這篇雖然沒有特別提,但使用的就是Weka預設的cross-validation

      關於cross-validation的介紹,請看「分類與預測:貝氏網路」中的「3. 進階評估模型:交互驗證10疊」
      http://blog.pulipuli.info/2017/10/classification-and-prediction-bayesnet.html#postcataclassification-and-prediction-bayesnet.html0_anchor1

      投影片在80頁
      https://docs.google.com/presentation/d/1KV3j9n9ApOo8bOitZ9S50C_vGzy18DhQJGoKNG_MKlY/edit#slide=id.g21cec636b4_0_907

      刪除
  7. 請問如果想提升J48決策樹的準確度(80%提升到100%)除了改投入的數據外,有沒有其他方法可以提升

    回覆刪除
    回覆
    1. 如果要提升J48正確率的話,有幾個方法可供參考:

      1. 調整J48演算法的參數

      http://facweb.cs.depaul.edu/mobasher/classes/ect584/weka/classify/figure22.gif
      J48有一些參數可供調整,但遺憾的是,預設值通常是最好的結果,因此調整參數比較可能會讓正確率下降。

      2. 使用特徵選取 AttributeSelectedClassifier
      https://weka.wikispaces.com/Performing+attribute+selection#Meta-classifier
      meta裡面有個分類器叫做AttributeSelectedClassifier
      這可以讓你在分類前先進行特徵選取處理,然後再來用J48進行分類

      關於特徵選取的知識請看這篇
      https://machinelearningmastery.com/perform-feature-selection-machine-learning-data-weka/

      3. 更換演算法,不要用J48
      Weka提供了多種演算法,不會選擇的話也可以用Auto-Weka。
      http://blog.pulipuli.info/2017/04/auto-weka-automatic-model-selection-and.html

      當然,要自行用特徵選取、特徵建立等多種方法來建立類神經網路模型,手動實作深度學習,Weka也是可以做到,但這就不是滑鼠點個一下兩下就能了事的程度。
      若要做到這個份上,個人建議改用Python上專門為了深度學習開發的函式庫來建立模型比較合適。

      ------------------

      然後最後是一定要講的重要概念:「過擬合 overfitting」
      https://www.wikiwand.com/zh-tw/%E9%81%8E%E9%81%A9

      準確率100%,但是資料跟特徵卻不多,通常大家不會認為你的模型很準,而是認為你的模型出現了過擬合的問題。
      過擬合表示你的模型僅能適用於解釋你既有的資料,而未來可能需要判斷的未知資料,極有可能難以適用。

      當然,過擬合只是個抽象的標準。
      隨著你要解決的問題、資料類型、預測目標的不同,理想上的正確率都不太一樣,並沒有統一的標準。
      個人觀點來看,如果在20個以下的案例、用少數三十幾個特徵、來預測5種類別,那正確率有6成已經很不錯了。

      http://blog.pulipuli.info/2017/06/wekamnist-mnist-digits-classification.html
      若是像手寫數字資料庫這樣,用6萬個訓練案例與1萬個測試案例,從784個特徵中預測10種類別,那因為數量與特徵都夠多,我們就會期望他能夠達到90%以上。

      ----------------

      說到底,分類預測只是一個輔助工具
      建立模型是可以幫助我們省下一些瑣碎的時間
      但大多數情況下,我都不建議完全依賴預測的答案
      僅供參考即可

      刪除
  8. 請問要如何將CSV或Excel格式轉換成ARFF,謝謝!

    回覆刪除
    回覆
    1. 將CSV轉換成ARFF的做法:

      1. 開啟CSV檔案:從Weka的Explorer左上角「Open file...」
      http://3.bp.blogspot.com/-U5ZR-dVNmWs/Xo3DizEAWNI/AAAAAAAEjl8/VOiLuZ66MlQuqX0vydj71rtG99FXBQh5ACK4BGAYYCw/s1600/2020-04-08_202611.png

      記得Files of Type要選擇CSV
      http://2.bp.blogspot.com/-cujovm3JDjg/Xo3DiV1NkdI/AAAAAAAEjl0/4s__0yA_4ns1LTKaSQQGWFouV6SjHBXIACK4BGAYYCw/s1600/2020-04-08_202646.png

      2. 儲存檔案:按右上角的「Save...」儲存成ARFF格式即可
      http://4.bp.blogspot.com/-ACQnPYRKEs0/Xo3DijLSUiI/AAAAAAAEjl4/uPoisTw4bZAXzMIL4dwT3swUTPuSsmlGQCK4BGAYYCw/s1600/2020-04-08_202715.png

      --------------

      將Excel轉換成ARFF的做法:

      1. 安裝套件WekaExcel

      安裝套件的教學看這篇:「Weka下載與套件安裝教學」
      http://blog.pulipuli.info/2017/06/weka-how-to-download-weka-and-install.html#postcataweka-how-to-download-weka-and-install.html0_anchor2

      2. 開啟檔案:記得Files of Type要選Excel Spreadsheets

      3. 儲存檔案:存成ARFF格式即可

      --------------

      如果屬性(attributes)數量過多,ARFF會採用另一種簡約格式
      長得會跟CSV差很多

      這可能是使用ARFF檔案的時候需要注意的地方

      刪除
  9. 老師 您好
    因為最近想分析關於旅遊評論的資料
    看了您介紹了幾種分類器之後
    有問題想請教一下

    像是這段評論,「房間乾淨很新,服務很好,步行台北車站只需10分鐘,周圍遍布餐廳,購物很便宜」。
    因為一段話裡有多種特徵,所以我想分類成已知的5個class,分別為客房乾淨、交通便利、周遭環境、飯店服務,其他等
    共有10000筆資料想讓weka去判斷這些評論分別會是在哪種class裡

    請問NaiveBayesMultinomialText這個分類器適用嗎?或是有推薦的嗎?

    另外我有看到您的實驗範例關於籃球和地球的2種類別判定,但一句話只有2種判別,我想訓練成一句話要顯示2種以上的判別,請問這種的weka做得到嗎?
    這樣csv檔中的class格式要怎麼做,可以麻煩您教我一下嗎?謝謝您

    回覆刪除
    回覆
    1. 您好,

      如果對文本分類有問題,建議到對應的文章下詢問:

      1.
      可以使用NaiveBayesMultinomialText,但它要求資料屬性是String,然後會自動做些文字前處理

      關於資料類型NominalToString的方法,請看「發掘文件中的主題:Weka分群應用於文本探勘」這篇中「3-3. 類別轉換成字串」的說明
      http://blog.pulipuli.info/2019/07/weka-discover-topic-of-text-collection.html#postcataweka-discover-topic-of-text-collection.html0_anchor13

      2.

      「因為一段話裡有多種特徵,所以我想分類成已知的5個class,分別為客房乾淨、交通便利、周遭環境、飯店服務,其他等」
      這有兩種情況:

      2a.
      一個class裡面有五種不同的結果「客房乾淨」、「交通便利」、「周遭環境」、「飯店服務」、「其他」
      那就直接操作就可以了

      可以看這篇「非結構化資料分析:文本分類」的說明
      http://blog.pulipuli.info/2017/10/unstructured-text-analytics-text.html

      2b.
      想要個別判斷是不是具有「客房乾淨」、「交通便利」、「周遭環境」、「飯店服務」、「其他」這些結果
      那這個就是多目標分類Multi-label/Multi-target的問題
      http://www.jmlr.org/papers/v17/12-164.html

      比較簡單的做法是做成五個不同的資料集,建立五個獨立判斷的分類器

      舉例來說:

      客房乾淨分類器
      屬性:評論、是否客房乾淨(True/False)

      交通便利分類器
      屬性:評論、是否交通便利(True/False)

      以此類推

      3.

      如果您想要找尋其他可能的分類,那就需要用主題分析的方法

      除了找出詞頻最高的詞彙之外,比較簡單的方式可以參考「發掘文件中的主題:Weka分群應用於文本探勘」這篇
      http://blog.pulipuli.info/2019/07/weka-discover-topic-of-text-collection.html#postcataweka-discover-topic-of-text-collection.html0_anchor13

      因為這是探索式的分析,結果不會直接告訴您「需要加入:「是否隔音佳」目標屬性」
      但這是讓您找尋潛在主題的一個簡單方法

      大概就這樣

      刪除
  10. 請問WEKA要如何分析問卷效度效度
    還有問卷如果有複選題的部分要如何編碼
    目前看文章學會使用決策數分析了非常感謝

    回覆刪除
    回覆
    1. 你好,

      1.
      問卷的效度分析請使用R或SPSS。

      2.
      如果問卷有複選題,請拆開成多個屬性,然後個別給true / false的值
      舉例來說:
      您喜歡吃的肉類: [ ] 牛肉 / [v] 豬肉 / [v] / 羊肉

      那資料就會整理成

      您喜歡吃的肉類_牛肉,您喜歡吃的肉類_豬肉,您喜歡吃的肉類_羊肉
      false,true,true

      就這樣整理

      3.
      不客氣

      刪除
  11. 您好,
    請問如果J48決策樹所呈現的樹,由於樹的枝葉太多,無法從圖看出規則,怎麼修改會比較好?

    回覆刪除
    回覆
    1. To Unknown,

      看你的目的。

      如果你的目的是要正確預測,那就不用糾結決策樹的結構,Weka電腦自己看得懂,就會幫你去預測。

      如果你的目的是要解釋屬性和目標屬性之間的關係,請選擇其他分析方法

      子群組探勘
      http://blog.pulipuli.info/2018/01/cortana-discovery-knowledge-in-your.html

      多元迴歸
      http://blog.pulipuli.info/2017/06/spss-interpreting-multiple-regression.html

      刪除
  12. 老師您好 請問用 j48 建模 訓練資料 正確率99.2278% 測試資料正確率96.0265 % 這樣是否有overfitting 要如何判斷 謝謝

    回覆刪除
    回覆
    1. 您好,

      讓我們來看看overfitting的定義。
      https://www.wikiwand.com/zh-tw/%E9%81%8E%E9%81%A9

      overfitting是一個相對的概念。主要是說,現在訓練好的模型若發生了overfitting,那該模型可能就只能適用於既有的訓練資料(training data)。而在處理新的未知資料時,模型就無法正確預測。
      換句話說,光看自己的訓練資料,我們無法得知這樣的模型是否有overfitting的情況發生,需要搭配訓練資料之外的其他資料,例如測試資料(test data)。

      你列出了訓練資料跟測試資料的正確率,但若要判斷是否發生overfitting,我們還需要考慮到不正確的程度。

      如果是類別資料的話,常用的指標是召回率或F1 measure
      https://www.wikiwand.com/zh/F-score

      如果是連續數值的資料,常用的指標就是RMSE (root-mean-square error),誤差平方根。
      https://www.wikiwand.com/zh-tw/%E5%9D%87%E6%96%B9%E6%A0%B9%E8%AF%AF%E5%B7%AE

      因為你用了正確率這個詞,可以知道你的class使用的是類別類型資料
      F1 measure已經包含了正確率的概念,所以我們直接比較訓練資料跟測試資料的F1 measure就好了

      如果測試資料的F1 measure小於訓練資料的F1 measure,表示有overfitting的現象發生
      但到底差異多少才算是overfitting,這個並沒有固定的標準。

      ----

      比起在意有沒有overfitting的現象,我們更注重的是如何降低發生overfitting的機率
      常見的做法是在訓練模型時使用dropout
      https://www.wikiwand.com/zh-tw/Dropout

      或是在驗證模型時採用cross-validation
      https://www.wikiwand.com/zh-tw/%E4%BA%A4%E5%8F%89%E9%A9%97%E8%AD%89

      通常cross-validation產生的評估指標會比較低,看起來好像不太準
      但這卻比較能夠反映真實現況,讓使用模型的人對於模型的預測結果不要保持太高的信心

      ----

      很多機器學習的教學都只教訓練資料建模跟測試資料驗證
      這樣學起來很簡單,但並不實用,我的教學都不會這樣教

      有興趣的話可以看我之前的課程內容
      http://blog.pulipuli.info/2017/10/applications-of-big-data-and-statistics.html#postcataapplications-of-big-data-and-statistics.html0_anchor6

      刪除
  13. 老師您好,謝謝您的教學文章!幫助很多!!
    想請問,如果決策樹準確率很低(<50%),是不是代表目前的 attribute都無關緊要QQ,除了再找其他 attribute,還可以怎麼做?換其他演算法可以有不同結果嗎?(找出關鍵因素)

    回覆刪除
    回覆
    1. To Sarah,

      # 如何提高正確率?

      1. 更多的資料:更多的案例數量,更多的特徵
      2. 更換演算法
      3. 使用特徵轉換演算法:可以搭配Attribute Selection試試看

      不一定是特徵的問題。
      但從學術研究的角度來說,最好蒐集的特徵跟要預測的目標之間有理論的支持。
      舉個例子來說,我們可能會認爲國文成績不錯的人,學習英文的時候表現也比較好。
      但是如果比較國小學生在腳掌大小跟英文成績之間的關係,也可以發現腳掌越大的學生,英文成績居然也會更好。

      至於爲何如此,就留給你去找答案了。

      # 能夠找出關鍵因素嗎?

      很多人想要做這件事情,但大家對於「關鍵因素」的定義都過於模糊。

      就我目前的經驗總結下來,大致上可以分成兩種:
      1. 將「關鍵因素」視爲單一屬性:最後結果會是「能夠區別結果的屬性中,最相關的屬性由高到低排序爲:屬性B、屬性A、屬性C」, 此時請使用Attribute Selection。
      2. 將「關鍵因素」視爲屬性在一定範圍內的情況:最後結果會是「當屬性B小於平均值時,最可能導致結果A」,此時請使用Subgroup Discovery。https://blog.pulipuli.info/2018/01/cortana-discovery-knowledge-in-your.html

      請根據自己的需求來選擇對應的分析方法。

      刪除
    2. 謝謝老師!!
      不好意思想再請問一下,如果準確率低(49.56%),但是 RMSE也低(0.3631),這樣此模型算是好的(能代表解釋資料)嗎?

      Correctly Classified Instances 676 49.5601 %
      Incorrectly Classified Instances 688 50.4399 %
      Kappa statistic 0.2478
      Mean absolute error 0.2444
      Root mean squared error 0.3631
      Relative absolute error 86.8056 %
      Root relative squared error 96.807 %
      Total Number of Instances 1364

      === Detailed Accuracy By Class ===

      TP Rate FP Rate Precision Recall F-Measure MCC ROC Area PRC Area Class
      0.515 0.241 0.465 0.515 0.489 0.266 0.693 0.455 A
      0.679 0.372 0.570 0.679 0.620 0.303 0.690 0.579 G
      0.196 0.025 0.415 0.196 0.267 0.244 0.656 0.201 B
      0.000 0.004 0.000 0.000 0.000 -0.013 0.702 0.090 BB
      0.270 0.109 0.330 0.270 0.297 0.175 0.679 0.272 GG

      刪除
    3. To Sarah,

      正確率的高低要跟您的資料集做比較

      您的Class種類多達5類,那正確率通常不高
      一般的情況下基準是20% 。五種選項,全部只猜A,那最低的正確率就是20%。

      仔細一點你可以考慮數量最多的類別。
      假設Class=A佔了全部資料集的60%,是最多的類別。
      那你的比較基準就是60%。
      也就是不看任何feature,矇眼猜A的情況下,正確率高達6成。

      請以這個基準來看看你的準確率是否合理。

      要更進一步的話,還可以用卡方檢定來評估你的模型正確率是否有顯著優於比較基準。

      總之,我想講的重點是:你要追求的不是100%正確率,而是跟比較基準相比更好。

      刪除
  14. 由於Google Drive更改連結的形式。本篇用到舊連結的檔案已經更新了分享連結,在此做個記錄。

    回覆刪除
  15. 您好,請問以下題該怎麽做?
    Weka提供的範例資料labor.arff是加拿大工業的勞工職缺資料,從至少500多人的資料中整理各種職缺的屬性資訊,以及這份職缺最後被員工評比為好 (class: good) 或壞 (class: bad)。試分析這份資料:
    1. 以你所知的各種分類方法 (e.g. logistic regression, decision tree, kNN SVM, RandomForest, Ensemble methods, etc.) 與資料切分技巧 (e.g. training/test, cross-validation, etc.) 建構職缺好壞的各種分類模型。解釋這些分類模型結果,並利用各種指標 (e.g. ROC, Recall, Precision, F1, etc.) 評估這些分類模型並討論其效能。
    2. 社會新鮮人欲求得一份好職缺,根據分類模型,你會建議他要多注意哪些職缺屬性?

    回覆刪除
    回覆
    1. 您好,

      看起來是課堂作業呢。
      請自己加油吧!

      刪除
  16. 您好,最近因論文內容需要使用WEKA,CSV資料數大概30萬筆。
    目前遇到一個狀況是因資料量過大跑weka的J48決策樹和K-means時會因記憶體不足而跳掉,有試過去調整weka內的最大記憶體也調成32g了,但在跑資料時還是會跳出記憶體不夠的警示,請問該如何解決?

    回覆刪除
    回覆
    1. To 阿丹,

      這比較像是演算法問題帶來的原罪。
      Weka畢竟是教學跟研究的產物,使用上還是有上限。

      當資料量一大、要在正式的環境執行時,我們還是選擇一些主流的框架來執行吧。

      現在比較多人知道的大概是用Python的Pandas套件來做資料的串流分析,避免一口氣載入太多資料量,讓記憶體爆炸。

      以前一段時間流行的是 Apache Spark
      https://spark.apache.org/
      分群演算法說明:https://spark.apache.org/docs/latest/ml-clustering.html
      但Apache Spark也是用程式碼在操作就是了。

      https://stackoverflow.com/questions/60411391/can-i-process-100-gb-of-data-using-apache-spark-on-my-local-machine
      至於30萬筆的CSV到底算不算是大數據呢?
      這種用程式處理的方式,100GB的檔案都不在話下了。

      ----

      最後我只能感嘆的是,
      教學是教學,實務工作還是實務工作。

      教學的目的是一步一步讓大家瞭解整個過程。
      實務工作就會包裝、簡化、提升效率。
      兩者還是不太一樣的啊。

      刪除
  17. 老師您好,最近遇到一個問題是我使用J48後最下面都會卡在building model on training data,右下角那隻鳥也會顯示0且沒有動作,然後展開決策樹那邊是灰字無法點選。
    原始資料跑是可以正常展開決策樹,使用oner刪減部分屬性後再跑決策樹就卡那問題,想請問老師您有方法解決嗎?

    回覆刪除
    回覆
    1. 您好,

      可以從Weka log檢查看看是哪邊出了問題。

      我不確定你的oner是怎麽刪減的。但可能是在處理資料的過程中,發生了資料格式錯誤、編碼被修改的狀況。
      又可能是你的目標類別被移除,或是只剩下一種類別。

      狀況很多,但幾乎都是因為你的資料出了問題才無法進行分析。
      所以最後還需要回頭檢查資料本身。

      刪除
    2. 了解,感謝老師。

      刪除
  18. 請問老師,J48決策樹每個leaf中括號的數字是代表甚麼? e.g. YES(14.0/6.0) <==說明書中前面14.0指的是符合該分支的總筆數,後面6.0指的是該分支分類錯誤的筆數。如果是這樣,那把整棵決策樹上所有leaf的筆數加起來,前面應該會等於總資料筆數,後面應該會等於全部猜錯的筆數。但是對照跑出來的confusion matrix, 總筆數是對的,但是錯誤筆數(a 分類b 或b分類成a)卻怎麼也對不起來,到底是哪裡理解錯了?

    回覆刪除
    回覆
    1. 您好,

      https://stackoverflow.com/a/16418763

      後面的數字是加權後的錯誤筆數。

      刪除
  19. 布丁大大您好,想請問如何使用HoeffdingTree演算法進行增量學習,照理來說模型會根據放入的測試數據而更新,但好像並沒有改變。

    回覆刪除
    回覆
    1. 您好,

      https://stackoverflow.com/a/33234589
      根據ykh的建議,在第一次建立模型之後,接下來要用update model的方式來更新。

      用Training.arff訓練集建置成ht.model模型的指令:
      ````
      java weka.classifiers.trees.HoeffdingTree -L 2 -S 0 -E 1.0E-7 -H 0.1 -M 0.01 -G 200.0 -N 0.0 -t Training.arff -no-cv -d ht.model
      ````

      用Testing.arff測試集來更新模型,產生ht.updated.model:
      ````
      java weka.classifiers.trees.HoeffdingTree -t Training.arff -T Testing.arff -l ht.model -d ht.updated.model
      ````

      https://www.futurelearn.com/info/courses/advanced-data-mining-with-weka/0/steps/29464
      操作教學可以參考這裡的影片,也可以用Explorer來操作:「Incremental classifiers in Weka」

      可以試試看!

      刪除