:::

幫你選擇分類器的分類器:Auto-WEKA / Automatic Model Selection and Hyperparameter Optimization in Weka: Auto-WEKA

image

資料探勘工具Weka提供了多種不同的演算法以及設定演算法的參數,也許大家會在課堂上學到很多種演算法,但到底那一種演算法分類的效果最好呢?這個問題就交給Auto-WEKA來幫你決定吧。


關於Auto-WEKA / About Auto-WEKA

Auto-WEKA是由Kotthoff等人開發來Weka分類器套件,Auto-WEKA的論文「Auto-WEKA 2.0: Automatic model selection and hyperparameter optimization in WEKA」已經在2016年底發表在Journal of Machine Learning Research。

以下來自Auto-WEKA官網的介紹:

在WEKA中由許多隨選即用的機器學習演算法,然而,這些演算法及它們各自的參數都會巨幅地影響最後的成效,而各種不同演算法與參數的組合數量也多到讓人難以選擇的地步。Auto-WEKA則是同時選擇學習演算法和它們參數,讓使用者不必一再嘗試。Auto-WEKA借用貝氏最佳化(Bayesian optimization)的創新做法,實現了完全自動化的方案。我們希望Auto-WEKA可以幫助非專業使用者更有效率地找到適合他們資料的機器學習演算法和其參數,並且最終提升機器學習的效果。

在論文中有提及Auto-WEKA所使用的機器學習演算法。除了基本的分類演算法之外,它也應用了混合學習(整合多個小型模型)、元分類器(結合多種分類器)、屬性選擇方法(用來縮減維度)。全部方法都支援類別的分類目標,可處理「分類問題」。少部分也支援數值型的連續分類目標,可處理「回歸問題」。

以下我們就先來看看怎麼使用Auto-WEKA,最後再來看看Auto-WEKA會用到那些分類演算法吧。


1. 安裝Auto-WEKA / Install Auto-WEKA Package

Auto-WEKA並非Weka預設內建的分類器,我們需要透過Package manager來安裝這個功能。

image

開啟Weka,先在Weka GUI Chooser中進入Tools的Package manager。

image

在Package Manager中可以找到「Auto-WEKA」套件。選擇它,按下上面的「Install」按鈕。

image

確認要安裝套件的訊息,按「Yes」繼續。

image

這訊息是要你先關掉Weka的Explorer、Experimenter、KnowledgeFlow、SimpleCLI。按下「OK」繼續。

image

等待一下安裝時間,等到出現「Package(s) installed successfully.」就算安裝完成。

Package Manager視窗就可以關閉了。

2. 使用Auto-WEKA / Auto-WEKA Configuration

一旦安裝好Auto-WEKA之後,我們就可以像是其他分類器一樣地使用Auto-WEKA了。以下我用鳶尾花資料集 Iris為例子,跟大家說明如何使用Auto-WEKA。

image

回到Weka GUI Chooser,這次我們進入「Explorer」。

image

在Preprocess面板中按下「Open file」開啟檔案,選擇鳶尾花資料集「iris.arff」。

image

切換到Classify面板。

image

按下Classifier中的「Choose」。

image

選擇weka.classifiers.meta.AutoWEKAClassifier。

image

預設的Auto-WEKA會用15分鐘來找最佳組合。我們可以調整所使用的時間。請在AutoWEKAClassifier粗體字上按滑鼠左鍵。

image

將最後一項設定timeLimit從「15」改成「1」,表示限制使用1分鐘來找到最佳解。1分鐘是Auto-WEKA時間限制的最小值,不能再低了。然後再按「OK」完成設定。

image

Test Options選擇「Use trainning set」。這邊我們只是要建立模型,並沒有要驗證演算法的效果,所以並不使用預設的Cross-validation。

image

按下「Start」開始分析。這需要等待一分鐘。

weka gif

這段期間你可以看右下角Weka鳥左右擺動,很治癒人心。

image

啊,Weka怎麼睡覺了。

image

原來不知不覺間Auto-WEKA已經跑完了,這真是時間殺手啊。

3. 解讀分析結果 / Classification Result

讓我們來看看Auto-WEKA的分析結果。雖然分析內容很長,但我們的重點只有兩個。

image

將分析結果捲動到上面,找到「You can use the chosen classifier in your own code as follows:」,下面就會是我們要的結果。

  • 最後找到的分類器跟參數:
    Classifier classifier = AbstractClassifier.forName("weka.classifiers.functions.SimpleLogistic", new String[]{"-W", "0"});
    是簡易羅吉斯特回歸,參數是-W 0。
  • 正確率:
    Correctly Classified Instances         144               96      %
    是96%。

如果給Auto-WEKA更多時間,通常會找出好的結果。

接著我們可以用這個分析結果作更進一步的應用。

直接套用分類器設定值 / Apply Learner Configuration

剛剛Auto-WEKA找到的分類器設定:

Classifier classifier = AbstractClassifier.forName("weka.classifiers.functions.SimpleLogistic", new String[]{"-W", "0"});

可以轉換成這樣的分類器設定值:

weka.classifiers.functions.SimpleLogistic -W 0

image

請在選擇分類器AutoWEKAClassifier粗體字的地方按滑鼠右鍵,開啟「Enter configurartion…」。

image

輸入分類器設定值,然後按下「OK」。

image

分類器會直接替換成簡易羅吉斯特回歸,而且參數也設定好了。試著跑跑看,結果預設正確率為98.6667%,竟然比Auto-WEKA的結果還好?

後來我試了下其他分類法,SMO (96.67%)、J48 (98%)、NaiveBayes (96%)、最好的則是MultilayerPerceptron (98.67%),其實也跟簡易羅吉斯特回歸一樣而已。真令人訝異。

儲存分類預測模型 / Save Model

image

Auto-Weka計算的結果當然也可以儲存成分類預測模型,稍後再用來對未知案例進行預測。做法請參考「不寫程式也能預測未知!用Weka分類模型來預測未知案例」這篇。但是Auto-WEKA在訓練案例太少時會出錯,請使用多一點資料來建立分類預測模型吧。

 


Auto-WEKA使用的演算法 / Classifiers in Auto-WEKA

Auto-WEKA會使用幾乎所有Weka預設內建的演算法。藉這個機會,讓我們一起來認識認識Weka裡面有那些演算法吧。大部分的演算法我也沒那麼清楚,演算法名稱、解釋上並沒有那麼確定。如有什麼建議,歡迎在下面留言指教。

Auto-WEKA使用的演算法都能預測類別資料,而部分演算法能夠預測連續資料,屬於回歸演算法。以下有「*」星號標示的演算法表示是回歸演算法。

貝氏機率 / Bayes Learners
分類器名稱 可調整參數 名稱 簡介
NaiveBayes 2 基本貝氏 單純計算條件機率的貝氏演算法
NaiveBayesMultinomial 0 多項式貝氏 使用多項式計算機率的貝氏演算法
BayesNet 2 貝氏網路 能夠學習條件機率網路的貝氏分類器
數學 / FUnctions Learners
分類器名稱 可調整參數 名稱 簡介
GaussianProcesses* 10 高斯回歸 實現不用超參數整定的高斯回歸處理。
LinearRegression* 3 線性回歸 使用線性回歸預測的分類器。
Logistic 1 羅吉斯特回歸 以多種類別變項進行的回歸分類器。
MultilayerPerceptron* 8 類神經網路 以倒傳導多層感測器實作的分類器。
SGD* 5 梯度下降法 實現線性模型(二元分類SVM、二元分類羅吉斯特回歸分析和線性迴歸)的隨機梯度下降。
SimpleLinearRegression* 0 簡單線性回歸 選擇平方誤差最低的線性迴歸學習模型。
SimpleLogistic 5 簡單羅吉斯特回歸 建構線性羅吉斯特回歸模型的分類器。
SMO 11 支援向量機 支援向量機的John Platt序列最小最佳化演算法訓練的分類器。
SMOreg* 13 支持向量機回歸 以回歸的方式實作支援向量機。
VotedPerceptron 3 表決感知演算法 透過表決修正分類方式的分類器。
簡化 / Lazy Learners
分類器名稱 可調整參數 名稱 簡介
IBk* 5 k-最近鄰分類器 根據案例的最靠近距離個數來決定分類
KStar* 3 k星分類器 基於案例最靠近距離來決定的分類
決策表 / Rules Learners
分類器名稱 可調整參數 名稱 簡介
DecisionTable* 4 決策表 以簡單的決策表來分類
JRip 4 命題規則學習 以增量修剪來減少產生此喔無誤的命題規則學習。
M5Rules 4 決策模型樹 使分割與合併的個別擊破法來產生決策表
OneR 1 最小誤差屬性分類器 使用最小誤差的屬性來預測
PART 4 混合決策樹 用個別擊破的方式建構局部的C4.5決策樹,並將最好的葉子組成規則。
ZeroR* 0 0-R分類器 建構0-R分類器的類別
樹狀決策表 / Trees Learners
分類器名稱 可調整參數 名稱 簡介
DecisionStump* 0 決策樹樁 與加速演算法(boosting)一起使用的決策樹。
J48 9 C4.5決策樹 產生修剪或未修剪C4.5的決策樹
LMT 9 回歸樹 使用羅吉斯特回歸建立樹的分類
M5P 4 M5模型樹 實現產生M5模型樹和規則的基本常式。
RandomForest 7 隨機森林 建構由隨機樹組成的森林類別。
RandomTree* 11 隨機樹 隨機選擇k個屬性來建立樹,不修剪。
REPTree* 6 快速決策樹 使用資訊獲利與方差來建構決策樹。
混合法 / Ensemble Methods
分類器名稱 可調整參數 名稱 簡介
Stacking 2 層疊法 結合多個分類器完成分類或回歸
Vote 2 投票法 組合多個分類器類別,用機率估計可用的分類器
元方法 / Meta-Methods
分類器名稱 可調整參數 名稱 簡介
LWL 5 參數最佳化選擇法 可自動決定分類器最佳化參數的分類器
AdaBoostM1 6 加速M1法 適用於類別資料的分類器
AdditiveRegression 4 回歸強化法 反覆運算擬合分類結果遺留的殘差模型來提升預測效果
AttributeSelectedClassifier 2 屬性選擇法 先透過屬性選擇減少維度再來分類
Bagging 4 裝袋法 以減少方差為目標的拔靴式抽樣學習法
RandomCommittee 2 隨機成員法 建構基礎分類器的隨機化分類系統
RandomSubSpace 3 隨機子空間法 建構保持最高準確度的決策樹
屬性選擇法 / Attribute Selection Methods
分類器名稱 可調整參數 名稱 簡介
BestFirst 2 貪婪爬山法 採用帶回溯增強的貪婪爬山法
GreedyStepwise 4 貪婪逐步法 執行逐步回歸的屬性子集空間搜索

小結 / In closing

那一種分類預測演算法最好?其實這個問題很難有正確答案。一般來說,我們要看資料的類型與分佈,再配合演算法的理論,才能找到最適合的演算法。但是很多時候,我們對資料本身並沒有那麼瞭解。就算Preprocess都整理好資料分佈了,Visualize還有散佈圖矩陣可以看,對很多人來說這仍像是霧裡看花一樣,不知道從何選起。

image

(改自xkcd: Compiling)

Auto-WEKA可做為選擇分類法的一個探索性的做法。在我們還不確定用那一種演算法比較好之前,先試著讓Auto-WEKA跑跑看。時間設個90分鐘,然後你就可以先慢慢看部電影,回來再看看Auto-WEKA簡易你選擇那一種分類器。

image

如果Auto-WEKA推薦你了一個沒看過的分類器,沒關係,打開分類器設定的More,裡面都有說明,還有論文引用可以去找來看呢。

就我目前使用Auto-WEKA的經驗來看,它大多時候並不是選擇許多資料探勘課程中大家使用的SVM或類神經網路,反而是統計的羅吉斯特回歸(Logistic)跟k-最臨近分類器(IBk),搭配參數最佳化選擇法(LWL)比較多。意外的還蠻有趣的。藉這個機會也可以認識到資料探勘世界的廣大啊。

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

  1. 最近在研究Weka時,發現安裝Auto-Weka之後,會讓整個Weka運作出現問題
    http://1.bp.blogspot.com/-di3HIucHhCs/XT67vguSK6I/AAAAAAAEWHQ/KHYedQ_5gFovwmRl-iPTuI8oR-Dou-kQQCK4BGAYYCw/s1600/2019-07-29_172533.png

    這會讓Associate關聯規則分析的時候無法運作
    只有刪除AutoWeka才能正常使用

    回覆刪除
  2. 您好,在使用AutoWeka时我出现了这样的问题:java.lang.RuntimeException: Error marshalling XML response
    请问您知道发生这样问题的原因吗?
    感激不尽

    回覆刪除
    回覆
    1. 很可能是AutoWeka無法使用了
      放棄吧

      刪除
    2. lol,谢谢回复,我再找找相关资料吧。

      刪除
    3. 查了一下是 Weka 3.8.4 內建 JDK 11 的關係,因為 AutoWeka 好像只能用 JDK 8。所以移除 Weka windows 版本,重新下載 Weka JAR 的版本,然後用 JDK 8 的指令 >java -jar weka.jar 來執行,就可以使用 AutoWeka 了。

      刪除
    4. To Ben Chang,

      感謝說明

      不過畢竟AutoWeka甚至是Weka都算是過時的技術了
      真的是不用勉強使用啊

      刪除