:::

不寫程式也能預測未知!用Weka分類模型來預測未知案例 / Make predictions with Saved Machine Learning Model in Weka

image

雖然Weka有很多用來預測的分類演算法,但真正用Weka來進行預測的教學卻很少。這篇將參考「How to Save Your Machine Learning Model and Make Predictions in Weka」的教學,從比較容易為大家編輯的試算表檔案開始,如何利用Weka的分類功能來為未知案例進行預測。



範例資料 / Demo Data

image

這裡我以知名的鳶尾花資料集(iris set)為例子跟大家說明。原本鳶尾花資料集共150個樣本,為了方便說明,我各取三種鳶尾花中的5個樣本,重新選出取出15個資料集出來,製作成試算表格式的檔案。我將其中3個樣本的分類目標(class)以「?」遮起來,表示這是未知、需要預測的案例

這個鳶尾花試算表格式資料集可以從下面連結下載:

製作這樣的資料集時,必須注意以下幾點:

  • 第一列為屬性名稱,例如「sepallength」、「class」等等。
  • 屬性名稱中必須要有名為「class」的分類目標。
  • 如果是文本探勘,則必須要有名為「document」的屬性。預設此欄位會套用斷詞功能。

預測未知案例的操作步驟 / How to Predict Unknow Instances

接下來我要以Weka 3.8版跟我撰寫的網頁程式為例來說明如何這份資料集中標示為「?」的未知案例。這整個流程有點長,大致上可分成四大階段:

  1. 將試算表檔案轉換成「訓練資料集」跟「測試資料集」兩份ARFF檔案
  2. 在Weka中,以訓練資料集建立預測模型
  3. 在Weka中,以預測模型預測測試資料集,取得分析結果
  4. 將測試資料集與分析結果轉換為試算表檔案

那麼,我們就開始吧。


1. 試算表檔案轉換成ARFF / Spreafsheet to ARFF

這個步驟我們都在上面「Weka Spreadsheet to ARFF」的網頁中進行。

  1. 取得試算表檔案:首先我們要將鳶尾花試算表格式檔案儲存到本機端,個人推薦使用Open Document Spreadsheet開放文件格式
    image
  2. Weka Spreadsheet to ARFF網頁中的Input裡的上傳檔案欄位,選擇該檔案。
    image
  3. 然後找到Result下載檔案的按鈕,下載「Train Data Set」跟「Test Data Set」。
    image

 

這個步驟最後就會取得兩個檔案:

  • Train Data Set:用來建立預測模型的訓練檔案。
  • Test Data Set:分類目標為「?」,有待預測的未知案例。

image


2. 建立預測模型 / Building a Predict Model

接下來我們來到Weka中建立預測模型。這邊大部分的步驟都跟大家知道的Weka分類操作很像,但還是有微些不同,請仔細看看囉。

  1. 開啟Weka,進入Explorer。
    image
  2. Open file,開啟剛剛下載的Train Data Set訓練資料集。
    image
  3. 進入Classify分類面板,選擇Classifier分類器、分類目標Class,這部分的設定就隨你想要使用的分類器來調整即可,例如選用J48決策樹。要特別注意的是,在Test options裡面需要選擇「Use training set」。然後按下「Start」,得到分析結果。
    image
  4. 接著在Result list中選取剛剛分析結果,按滑鼠右鍵,選擇「Save model」,這樣就可以把分類預測模型儲存成一份副檔名為「.model」的檔案。
    image

 

在這個步驟中,最後我們會獲得一個副檔名為「.model」的分類預測模型檔案「classify.model」。接下來我們就要用這個模型來對未知案例進行預測。

image


3. 預測未知案例 / Predict Unknow Instances

一般在使用的時候,建立分類預測模型跟預測未知案例會是兩個不連續、不會在同一時間進行的步驟。建立分類預測模型是拿手邊已經知道結果的資料集,而建立過程通常會花費許多時間。一旦有了既成的分類預測模型,那麼我們未來有不確定的未知案例時,就可以用這個模型簡單地進行預測。因此,下面的步驟中,請全部關閉Weka,重頭開始作起吧。

  1. 開啟Weka,進入Explorer。
    image
  2. Open file,開啟剛剛下載的Test Data Set測試資料集。
    image
  3. 進入Classify分類面板,直接選擇Test options中的Supplied test set,然後點選「Set…」按鈕。
    image
  4. 用「Open file…」開啟Test Data Set測試資料集,確認分類目標Class選擇無誤,按下Close。
    image
  5. 在分類面板中,進入「More options…」。
    image
  6. 找到Output predicitons設定,用「Choose」按鈕選擇「CSV」,然後點選「CSV」粗體字進入更深一層的設定選單。
    image
  7. 將outputDistribution設定改為「True」,按下「OK」一路退出回到分類面板。
    image
  8. 在左下角的「Result list」中按右鍵,選擇「Load model」,讀取剛剛儲存的「classify.model」,Result list會出現一個分析結果,那就是剛剛儲存的分類預測模型。
    image
  9. 選擇分類預測模型分析結果,按滑鼠右鍵,選擇「Re-evaluate model on current test set」,右邊就會出現預測結果。但這個結果不好分析,我們的步驟還沒結束。
    2017-04-02_115329
  10. 同樣在分類預測模型分析結果上按滑鼠右鍵,選擇「Save result buffer」,把預測結果儲存成「result.txt」吧。
    image

 

這個步驟中,最後我們會取得預測結果「result.txt」。這個結果並不容易閱讀與分析,所以我們要在下一個步驟中把它轉換成容易處理的試算表格式CSV。

image


4. 將分析結果轉換成試算表格式CSV檔案 / Convert Predict Results to CSV format

在第一個步驟中,我們獲得了「Test Data Set」測試資料集;在第三個步驟中,我們獲得了「result.txt」預測結果。現在我們要將這兩種檔案結合在一起,轉換成容易處理、分析的CSV格式。

以下步驟都會在「Weka ARFF to CSV」網頁內進行:

  1. 在Input中的「Test data set ARFF file」選擇Test Data Set測試資料集;在「Buffer file」選擇result.txt預測結果。
    image
  2. 在Result中,點選DOWNLOAD按鈕下載轉換後的檔案。
    image
  3. 接著使用Google試算表或是LibreOffice Calc開啟CSV檔案,predictedclass就是我們要取得的預測結果。後面的「entropy」是我計算各機率分佈的Entropy亂度,亂度數字越高,分類正確性越低,0是最準確的數字。其他以「pro_dis」開頭的欄位是機率分佈,表示這個案例被分類在某一種分類的可能性。Weka會選擇機率分佈最高的那一個分類作為predictedclass的結果。當只有一個分類的機率分佈接近1時,表示這個分類模型的答案很明確,正確率很高。當機率分佈分散時,predictedclass的結果可能會有錯誤,需要多加注意。
    image

最後的預測未知案例結果就是在原本的試算表檔案後面多加幾個欄位而已,很容易就能讓大家複製、貼上到原本的檔案中,再來進行後續的整理囉。


結語 / Conclusion

這段時間陸陸續續都在研究Weka的使用方法,現在總算是把Weka的分類預測步驟整理出一套比較簡單的操作方式了。

這一連串操作步驟中,最麻煩的就是Weka的ARFF格式。因為我們不太容易用自己習慣的試算表工具來編輯ARFF,所以我花了很多時間在做試算表檔案跟ARFF格式之間的轉換。

一旦這樣的流程確定下來,不管用什麼分類器都可以實際拿來作預測了,非常方便。

附帶一提,如果未知案例的分類目標是類別變項,例如預測「成功」或「失敗」,我們會稱這種預測叫做「分類問題」;如果分類目標是數值型的連續變項,例如預測「得分」、「漲跌幅度」,這種則叫做「回歸問題」。

希望大家能以這套做法為基礎,在實作的過程中一起來感受分類預測的魅力吧。

封面

最後跟大家推薦「王者歸來: WEKA機器學習與大數據聖經」這本書,這大概是目前臺灣Weka教學最詳細的一本書了吧,從這本書可以瞭解Weka很多功能喔。

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

  1. 回覆刪除
    回覆
    1. 回覆刪除
    2. 回覆刪除
    3. 回覆刪除
    4. 回覆刪除
    5. 回覆刪除
    6. 回覆刪除
    7. 回覆刪除
  2. 回覆刪除
    回覆
    1. 回覆刪除
    2. 回覆刪除
    3. 回覆刪除
  3. 回覆刪除
    回覆
    1. 回覆刪除
  4. 回覆刪除
    回覆
    1. 回覆刪除
    2. 回覆刪除
    3. 回覆刪除
  5. 回覆刪除
  6. 回覆刪除
    回覆
    1. 回覆刪除
    2. 回覆刪除
  7. 回覆刪除
    回覆
    1. 回覆刪除
    2. 回覆刪除
    3. 回覆刪除
  8. 回覆刪除
  9. 回覆刪除
    回覆
    1. 回覆刪除
  10. 回覆刪除
    回覆
    1. 回覆刪除
  11. 回覆刪除
    回覆
    1. 回覆刪除
    2. 回覆刪除
    3. 回覆刪除
    4. 回覆刪除
    5. 回覆刪除
  12. 回覆刪除
    回覆
    1. 回覆刪除
  13. 回覆刪除
    回覆
    1. 回覆刪除
  14. 回覆刪除
    回覆
    1. 回覆刪除
    2. 回覆刪除
    3. 回覆刪除
    4. 回覆刪除
    5. 回覆刪除
  15. 回覆刪除
  16. 回覆刪除
    回覆
    1. 回覆刪除
    2. 回覆刪除
    3. 回覆刪除
    4. 回覆刪除
    5. 回覆刪除
  17. 回覆刪除
  18. 回覆刪除
  19. 回覆刪除
  20. 回覆刪除
    回覆
    1. 回覆刪除
  21. 回覆刪除
    回覆
    1. 回覆刪除