本節內容將通過圖形界面。使用MOA來學習幾種分類器模型,並以不同方式對其進行評估。初始MOA GUI窗口下圖所示。
1 練習1
點擊 Configure
設置一個任務。可以通過最上方的下拉菜單改變任務類型,我們這裏是 LearnModel
。
可以看見其默認的 learner
學習模型是 NaiveBayes
,可以點擊 Edit
,從頂部的下拉菜單中選擇不同的學習模型,但是現在保留 NaiveBayes
。
再往下,是 stream
數據流,默認是RandomTreeGenerator
,用對應的 Edit
改成 WaveformGenerator
數據流,從波形的集合中產生實例。將實例的數量從10 000 000改成1 000 000。最後指定 taskResultFile
,例如 modelNB.moa
,MOA模型會把模型輸出到該文件。
現在點擊 OK
,然後點擊 Run
啓動這項任務。中間面板會顯示文字輸出,這個任務中每過10 000輸出一次。剛剛運行的任務是:
LearnModel -l bayes.NaiveBayes
-s generators.WaveformGenerator
-m 1000000 -O modelDB.moa
提示:如果你快速連續點擊Run兩次,就會生成同時運行的任務。
點擊 Configure
,把學習模型改成 Hoeffding
樹,並且輸出到文件 modelHT.moa
:
LearnModel -l trees.HoeffdingTree
-s generators.WaveformGenerator
-m 1000000 -O modelHT.moa
然後運行,現在有兩個模型存儲在磁盤,即 modelNB.moa
和 modelHT.moa
。
接下來用 WaveformGenerator
生成1 000 000個新實例來評估樸素貝葉斯模型,可以通過以下任務命令完成:
EvaluateModel -m file:modelDB.moa
-s (generators.WaveformGenerator -i 2) -i 1000000
-i 2 給波形生成器設置了一個不同的隨機種子。在 Configure
面板中設置其他參數,在頂部,吧任務設置成 EvaluateModel
,然後把數據流模型配置成 WaveformGenerator
,以及把 instanceRandomSeed
設置成2,但令人遺憾的是暫時無法從文件中讀取模型。
問題還是可以解決的。先點擊 確定
返回到MOA主頁面,點擊右鍵選擇 Copy configuration to clipborad
,編輯內容繼續寫下 -m file:modelDB.moa
,然後選擇 Enter configuration
並把剪切板的內容粘貼到新的配置中,然後執行。
再將 file:modelHT.moa
替換,同樣地方法再次運行。
很明顯看到:
NaiveBayes
模型正確分類的比例是80.4%左右Hoeffding
樹模型的正確分類的比例是84.4%左右- 根據Kappa統計,
Hoeffding
的性能更好
2 練習2
在MOA中可以嵌套命令行,比如,LearnModel
和 EvaluateModel
的步驟可以合併爲一行,避免額外產生一個文件。但是隻能編輯 Configure
命令行。
EvaluateModel -m (LearnModel -l meta.OzaBag
-s generators.WaveformGenerator -m 1000000)
-s (generators.WaveformGenerator -i 2) -i 1000000
通過複製該命令,點擊右鍵選擇 Enter configuration
,將其粘貼爲 Configure
文本。
OzaBag
的正確率是 85.8%左右。
3 練習3
EvaluatePeriodicHeldOutTest -l trees.HoeffdingTree
-s generators.WaveformGenerator
-n 100000 -i 10000000 -f 1000000
其中,EvaluatePeriodicHeldOutTest
任務訓練模型時,在一個保留測試集上週期性地截取性能快照。上面命令是在 WaveformGenerator
的 10 000 000 個樣本上,訓練 HoeffdingTree
分類器。首先保留前 100 000 個樣本作爲測試集;之後每 1 000 000個樣本在保留集上進行一次測試。
最終的準確率是 84.9% ,最終的Kappa統計是77.35%
4 練習4
先序評估法首先在任一實例上評估,然後用作訓練。這裏是一個 EvaluatePrequential
任務,在 WaveformGenerator
的 1 000 000 個樣本上訓練一個 HoeffdingTree
分類器,之後每 10 000 個樣本創建一個 100 行的csv文件:
EvaluatePrequential -l trees.HoeffdingTree
-s generators.WaveformGenerator
-i 1000000 -f 10000
EvaluatePrequential -l bayes.NaiveBayes
-s generators.WaveformGenerator
-i 1000000 -f 10000
選擇 HoeffdingTree
學習曲線,顯示爲紅色:
- 可以看到
Hoeffding
樹的性能在前面會低於樸素貝葉斯,並不是一直領先。 Hoeffding
樹的最終Kappa統計是 75.89%。- 樸素貝葉斯的最終Kappa統計是 70.45%。
5 練習5
默認情況下,先序評估法顯示具有1000個實例的滑動窗口的性能,從而創建了一個跳躍的鋸齒狀的學習曲線。在 Configure
面板中的評估器:你可以看到使用的是 WindowClassificationPerformanceEvaluator
,窗口大小爲1000。作爲替代,選擇 BasicClassificationPerformanceEvaluator
,從數據流的第一樣本開始,使用每一個樣本進行評估:
EvaluatePrequential -l trees.HoeffdingTree
-s generators.WaveformGenerator
-e BasicClassificationPerformanceEvaluator
-i 1000000 -f 10000
EvaluatePrequential -l bayes.NaiveBayes
-s generators.WaveformGenerator
-e BasicClassificationPerformanceEvaluator
-i 1000000 -f 10000
可以看到這項任務肯定能夠保證產生一個平滑曲線,因爲隨着時間發展,單個樣本對於整體平均的作用越來越不顯著。
- 同樣地,
Hoeffding
樹的性能在前面會低於樸素貝葉斯,並不是一直領先。 Hoeffding
樹的最終Kappa統計是 74.50%。- 樸素貝葉斯的最終Kappa統計是 70.72%。