:::

Weka的BayesNet分類器操作說明 / A Tutorial on BayesNet Classifier with WEKA

10月 28, 2014 4 Comments Edit Copy Download

Title-Bird-Header

這是資料探勘工具Weka中以BayesNet來做分類的操作教學。BayesNet實作了以條件機率為原理的貝氏分類法,其特色在於可以繪製出條件機率的樹狀圖形。

This is a tutorial on BayesNet Classifier by using data mining tool: WEKA. BayesNet is based on Bayes Network learning algorithms and provides network structure with conditional probability distributions.


Weka下載與安裝 / Weka Download And Install

Weka是紐西蘭懷卡托大學機器學習實驗室(Machine Learning Group at the University of Waikato)發展的資料探勘工具,並以GUN授權發佈,是資料探勘領域中重要的自由軟體。Weka實作了許多發表於學術論文上的重要演算法。不僅適合作為學生學習資料探勘的好工具,也是進行演算法改良研究的平臺。

2013年該實驗室推出了5週的線上教學課程MOOC「Data Mining with Weka」,有志學習資料探勘的同學可以試著進來上課看看。

安裝Weka的時候,要特別注意的是記得安裝Java Run Environment (JRE),不然Weka無法開啟喔。

由於我之前就對於貝氏分類法感到很有興趣,雖然他在分類器中的成效一直不是很突出,但是可擴增性與簡易實作的理論等特色,讓我覺得貝氏分類法應該還有很多可以應用的潛力。這次剛好找到了李明昌老師的教學投影片,我也就來練習操作看看BayesNet這個貝氏分類法的分類器,並在此跟大家分享。

STEP 1. 開啟Explorer / Open “Explorer”

2014-10-28_144712

開啟Weka的時候,先選擇使用Explorer吧。

STEP 2. 開啟檔案 / Open file

2014-10-28_144728 - Copy

進入Explorer之後,我們這次要用的檔案是範例檔案中的iris.arff。檔案位置在[Weka]\data\iris.arff。

2014-10-28_144817

image

STEP 3. 開啟分類器 / Open ”Classify”

image

開啟檔案之後,接下來會回到Explorer上。接下來我們要開啟Classify分類器。

2014-10-28_144919

在分類器上按下Choose選擇。

2014-10-28_144950

選擇分類法中的 weka/classifiers/bayes/BayesNet

這樣子就可以準備來開始跑囉。

STEP 4. 預設的BayesNet探勘結果 / BayesNet Mining Result with Default Options

image

測試方式用預設的交互驗證(Cross-validation) 10層,然後分類的目標是 (Nom) play,按下「Start」。

最後結果看可以看到其中一行:

Correctly Classified Instances 139 92.6667%

這意思是,預設的BayesNet分類法下來,正確率只有92%左右。

image

我們在結果集上按下右鍵,選擇「Visualize graph」。

image

接著會跳出BayesNet建置的樹,每個節點都是造成不同種類的條件機率。其中我們在「sepallength」上面按下左鍵。

image

左邊直欄class底下有Iris-setosa / Irisversicolor / Iris-virginica,第一欄則是'(-inf-5.55]'、'(5.55-6.15]'、'(6.15-inf)'。意思是說:

  • 如果是品種setosa的話:花萼長度小於5.5的機率為0.922;長度介於5.55-6.15的機率為0.068;長度大於6.15的機率為0.01。
  • 如果是品種versicolor的話:花萼長度小於5.5的機率為0.223;長度介於5.55-6.15的機率為0.456;長度大於6.15的機率為0.32。
  • 如果是品種virginic的話:花萼長度小於5.5的機率為0.029;長度介於5.55-6.15的機率為0.204;長度大於6.15的機率為0.767。

因此這就是貝氏分類法其中一個條件下的模型。

除了基本參數之外,我們可以還調整BayesNet的參數設定讓正確率再提高一些。


BayesNet的參數設定 / BayesNet’s Properties

2014-10-28_152519

在BayesNet那一條欄位上按下右鍵,選擇「Show properties」。

2014-10-28_165428

接下來我們來看看關於BayesNet的介紹:

貝氏網路學習法(Bayes Network learning)使用了各種搜尋演算法與品質測量法。

Weka的文件並不完全,底下的設定光看名字也看不懂。細節都是要靠More裡面的介紹。讓我們按下More繼續看看。

介紹 / Information
  • 名稱:weka.classifiers.bayes.BayesNet
  • 概要:貝氏網路學習法使用了各種搜尋演算法與品質測量法。基於貝氏網路分類器。提供了資料結構(網路結構、條件機率分佈等等)以及使用貝氏網路學習演算法常見的工具,例如K2或B。更多細節請看http://www.cs.waikato.ac.nz/~remco/weka.pdf (可是找不到資料啦)。
能力 / Capabilities
  • 資料類型 (Class):名義資料(Nominal Class)、二元資料(是否)、遺失值的資料(Missing class values)。
  • 屬性(Attributes):二元屬性、數值屬性、空的名義屬性、遺失值(Missing values)、名義屬性、單一元素屬性(Unary attribute,什麼意思呢?)。
  • 其他說明:最小的案例編號為0。
參數 / Options
  • BIFFile:可設定一個以BIF XML格式建立的檔案名稱。可用於比較從BIF檔案中的貝氏網路結果、以及使用貝氏網路學習法學習結果的差別。統計計算為o.a.,遺失值(the number of missing)以及額外弧度(extra arcs,我真的看不懂這是什麼)
  • debug:設定true,分類器會顯示額外的資訊,以供偵錯。
  • estimator (評價器):選擇評價器演算法來找尋貝氏網路條件機率表,預設值是SimpleEstimator。
  • searchAlgorithm (搜尋演算法):選擇搜尋網路架構的方法,預設值是K2。
  • useADTree (使用AD樹):使用AD樹一般而言可以降低學習時間。然而,由於AD樹佔用大量記憶體
    ,這可能會造成記憶體不足的問題。關閉這個選項可能會讓結構學習演算法變慢,但消耗記憶體較少。預設會使用AD樹。必須要注意的是,這裡的AD樹是指一種資料架構,用於增加計數的速度,不要跟同名分類器搞混了。

五個參數中的三個參數還算好理解,其中estimator (評價器)跟searchAlgorithm (搜尋演算法)就有很多選擇。讓我們一一來看一下有那些評價器跟搜尋演算法吧。

參數:評價器 / Option: estimator

可選用的評價器共有4種。首先我們先看一下預設使用的SimpleEstimator,然後再看看其他評價器。但是除了SimpleEstimator可以應用於多層條件機率的評價之外,其他評價器限制都很大。因此最後我還是用SimpleEstimator。

簡易評價器 / SimpleEstimator
  • 名稱:weka.classifiers.bayes.net.estimate.SimpleEstimator
  • 概述:SimpleEstimator是用於評估貝氏網路中學到的條件機率表格。評估機率是直接來自於資料本身。

參數只有一個:

  • alpha:Alpha是用來評估機率表格,可以用於解釋每個數值的起始值。預設值是0.5。
貝氏網路評價器 / BayesNetEstimator
  • 名稱:weka.classifiers.bayes.net.estimate.BayesNetEstimator
  • 概述:BayesNetEstimator是一種用於評估貝氏網路中學到的條件機率表格的基本用法。

參數只有alpha一個,解釋同SimpleEstimator。

BMA評價器 / BMAEstimator
  • 名稱:weka.classifiers.bayes.net.estimate.BMAEstimator
  • 概述:BMAEstimator是用貝氏模型平均法(Bayes Model Averaging, BMA)來評估貝氏網路中學到的條件機率表格。

參數除了alpha之外,還有一個useK2Prioir,但是More裡面沒有說明。

多項式BMA評價器 / MultiNomialBMAEstimator
  • 名稱:weka.classifiers.bayes.net.estimate.MultiNomialBMAEstimator
  • 概述:多項式的BMA Estimator。

參數除了alpha之外,還有一個useK2Prioir,但是More裡面沒有說明。

參數:搜尋演算法 / Option: searchAlgorithm

搜尋演算法很多,Weka提供了ci、fixed、global跟local這四種。預設使用的是local當中K2。我試著用不同的搜尋演算法來計算看看,赫然發現GeneticSearch的正確率挺高的。所以以下我介紹GeneticSearch這個搜尋演算法。

基因搜尋演算法 / GeneticSearch
  • 名稱:weka.classifiers.bayes.net.search.local.GeneticSearch
  • 概要:這個貝氏網路學習演算法使用了基因搜尋演算法來找尋良好的貝氏網路結構。基因搜尋是基於蒐集貝氏網路結構的族群(population),再以突變(mutate)與交配(get offspring)來運作。最後結果會產生貝氏網路結構。

基因演算法是傳說中只要有無限時間,就可以計算出最佳解法的超強演算法。這也是資料探勘必定會教的經典演算法。在此我就不介紹這麼多了,想要細節請看GA基因演算法介紹。

參數可多著了,共有9個:

  • descendantPopulationSize:設定每一代產生子孫族群(the population of descendants)的數量。
  • markovBlanketClassifier:預設為false,當設定為true的時候,每次學到一個網路結構時,馬可夫毯校正(Markov Blanket correction)就會用於網路結構上。這可以確保網路中的所有節點都屬於分類器節點的馬可夫毯的一部分。(抱歉,我知道馬可夫鏈的模型,但還真不知道這是如何運作的)
  • populationSize:設定每一代的網路結構族群的數量。
  • runs:設定基因演算法要運作的回數。
  • scoreType:分數類型決定如何測量網路結構的品質。可用的選項包括預設的Bayes、BDeu、Minimum Description Length (MDL)、Akaike Information Criterion (AIC)以及Entropy。
  • seed:亂數產生世代的初始值。設定seed可以允許實驗的可複製性(Setting the seed allows replicability of experiments. 我不會翻譯)。
  • useCrossOver:決定是否可以交配(cross-voer)。交配是網路結構以位元呈現後,再隨機挑選k個位元、保留其他位元來組合。交配或突變至少必須要使用其中一項。
  • useMutation:決定是否要使用突變(mutation)。突變將反轉網路結構的一個位元資料。突變或交配至少必須要使用其中一項。
  • useTournamentSelection:決定選擇族群的方法。當設為true的時候將會使用競賽選擇(tournament selection),亦即選擇其中最高的數值以及隨機兩個來進行。當設為false時只會選擇成效最好的網路結構。

STEP 6. 使用基因搜尋的探勘結果 / Mining Result with GeneticSearch

image

我換了基因搜尋演算法再來跑跑看,正確率提升至94%,比預設的K2還要高1.3%。

2014-10-28_221618

基因搜尋演算法是使用上面介紹的weka.classifiers.bayes.net.search.local.GeneticSearch。

image

其他參數都沒有調整。事實上我嘗試用了幾種不同的組合,但是結果都一樣。基因演算法的突變跟交配是隨機的,因此理論上每次跑的結果應該都不太一樣。不過我跑了幾次結果都差不多,可能是因為runs=10已經夠多的關係吧。

image

讓我們來看看結果模型。跟K2跑出來的結果差別非常大。我們在意的是class的機率,點左鍵來看看:

image

結果如上。以第一列為例子來解釋,如果花辦長度(petallength)小於2.45、花瓣寬度(petalwidth)小於0.8,屬於品種setosa的機率為0.981、versicolor的機率為0.01、virginica的機率為0.01。其他列的解釋則可以依此類推。

與其他分類器的比較 / Compare with Other Classifiers

不過我也跑了一下其他演算法。

image

J48的決策樹正確率為96%。以上是建樹結果。

lazy.IBk正確率為95.333%。

SVM的funcitions.MultilayerPerception則是97.333%。

大多數演算法都能夠輕鬆勝過BayesNet啊。

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

  1. 3年之後,我要在課堂上教貝氏網路了
    看著吧,我一定會教得比這篇有趣!

    回覆刪除
    回覆
    1. http://blog.pulipuli.info/2017/10/classification-and-prediction-bayesnet.html
      後來做完的貝氏網路教學課程
      這個課程比較容易懂,而且有好用的工具

      刪除
  2. 加油,你的網站蠻實用的

    回覆刪除