:::

以AutoIT實作Weka預測執行檔 / Making Predictions with Weka Executable File: an AutoIT Application

image

繼前一篇使用指令列來操作Weka進行預測之後,這一篇就要用AutoIT來操作Weka進行預測,並以AutoIT將預測結果傳送給其他程式,例如傳送到Google表單中記錄預測結果。


Weka預測執行檔下載 / Download Weka executable files

image

我用AutoIT撰寫了操作Weka進行預測的程式碼。所有程式內容都已經上傳到GitHub上:

在這裡我們主要會用到的有兩個檔案:

預測操作 / Perform prediction

使用流程很簡單,我們要先設定好config.ini,然後再直接開啟weka_prediction.exe,這樣就能完成預測了。

animation

上圖是整個進行預測的過程,在此例config.ini中after_predict_cmd的設定,它會用Internet Explorer的kiosk模式開啟Google表單網頁,並填入Weka預測的結果。

整個流程中我們要設定的就只有config.ini檔案,以下我繼續說明config.ini各個設定的內容。


設定檔 / config.ini

image

整個程式中最重要的就是設定config.ini。這個設定檔案是INI格式,語法是用等號「=」指定各參數的值:

[參數名稱]=[參數值]

整個config.ini裡面要設定6個參數,大部分都跟「使用Weka指令列實作預測功能」這篇中Weka指令列所需要的參數一樣,各別介紹如下。

weka.jar的位置 / Location of weka.jar

image

extapp_weka參數需要設定Weka安裝目錄底下的weka.jar檔案路徑。設定檔內容如下:

extapp_weka=C:\Program Files\Weka-3-8\weka.jar

「C:\Program Files\Weka-3-8\weka.jar」就是Weka預設安裝時weka.jar會擺放的位置。

詳情請看「使用Weka指令列實作預測功能」中「weka.jar的位置」的說明。

分類器 / Classifier

image

weka_classifier參數需要設定預測所使用的分類器。設定檔內容如下:

weka_classifier=weka.classifiers.functions.SMO

「weka.classifiers.functions.SMO」表示這次預測要使用的是支持向量機SVM的SMO分類器。

詳情請看「使用Weka指令列實作預測功能」中「分類器」的說明。

分類模型的位置 / Location of stored classifier model

image

weka_model參數需要設定預測所使用的分類模型。設定檔內容如下:

weka_model=.\iris-smo.model

「.\iris-smo.model」表示這次預測要使用的分類模型。開頭的「.\」是以相對路徑表示,代表這是指位於weka_prediction.exe檔案目錄底下的iris-smo.model。你也可將此參數換成以「C:\」開頭的絕對路徑。

詳情請看「使用Weka指令列實作預測功能」中「分類模型的位置」的說明。

待預測的測試集 / Test set for prediction

2017-06-25_211551

test_set_arff參數需要設定有待預測的測試集路徑。設定檔內容如下:

test_set_arff=.\iris-test-set.arff

「.\iris-test-set.arff」表示這次要預測的測試集檔案路徑,這跟前面分類模型一樣是以相對路徑表示。

詳情請看「使用Weka指令列實作預測功能」中「待預測的測試集」的說明。

等待預測訊息的標題與內文 / Waiting for prediction message

image

因為載入Weka會花一點時間,我使用AutoIT的SplashTextOn()函數來顯示正在運作中的提示訊息,如上圖所示。這個訊息中的標題「Weka」跟內文「Please wait. Predicting...」都可以自訂,設定檔內容如下:

weka_run_title=Weka
weka_run_message=Please wait. Predicting...

只是要注意的是,如果要顯示中文的話,就必須把config.ini用Big5格式儲存。你可以用Notepad++來編輯config.ini的編碼,詳細請看「如何把純文字檔案轉換成UTF-8格式:使用Notepad++」這篇。

預測之後的指令 / Command after prediction

image

在預測完成之後,我們會透過AutoIT的程式得到兩個變數,{predictclass}為預測的結果,{prob}為該結果的機率分佈。我們可以搭配這兩個變數,指定預測之後的指令。設定檔內容如下:

after_predict_cmd=C:\Program Files\Internet Explorer\iexplore.exe -k https://docs.google.com/forms/d/e/1FAIpQLSeWynGUR3vzZc6E7pVMEYpruAnl66vA9aS4bVOw5Tp6rC1FCw/viewform?usp=pp_url&entry.1291062876={predictclass}&entry.422415105={prob}%25

「C:\Program Files\Internet Explorer\iexplore.exe -k https://docs.google.com/…」這一長串的指令,意思是用Internet Explorer (IE)以kiosk模式來開啟後面的網址。kiosk模式是IE的全螢幕模式,可以讓使用者專心在全螢幕的網頁上,不易受到其他干擾。關於IE的kiosk模式詳細請看「有趣的IE Kiosk模式」這篇。

IE後面的網址將會開啟我建立好的Google表單,而且搭配預先填入(預設值)的功能,它會在Prediction Result欄位跟Correct Probability各別填入{predictclass}跟{prob}。

在AutoIT會將after_predict_cmd設定中的{predictclass}跟{prob}替換成Weka的預測結果。因此實際上開啟的網址可能就會是:

這樣就能將Weka的預測結果傳送到Google表單了。

當然,after_predict_cmd也可以搭配其他指令來使用。只要在要輸入Weka預測結果的地方以{predictclass}跟{prob}表示,就能將預測結果傳送到該指令囉。


小結 / In closing

為了能讓指令列操作Weka的過程更為簡化,這篇用AutoIT包裝了Weka的指令列預測功能,讓它更容易跟其他的程式搭配使用。

舉例來說,你可以安排這樣的一個學習活動:

  1. 使用MPV播放影片給受試者看
  2. 使用腦波儀來記錄受試者的腦波,並匯出成測試集檔案
  3. 用這篇的方法來預測腦波測試集的分類
  4. 用after_predict_cmd來顯示回饋與進行下一步

2017-06-24_162426

寫到現在,我真的覺得AutoIT實在是非常萬能。Windows開發應用程式的第一選擇,就從AutoIT開始吧。