以AutoIT實作Weka預測執行檔 / Making Predictions with Weka Executable File: an AutoIT Application
繼前一篇使用指令列來操作Weka進行預測之後,這一篇就要用AutoIT來操作Weka進行預測,並以AutoIT將預測結果傳送給其他程式,例如傳送到Google表單中記錄預測結果。
Weka預測執行檔下載 / Download Weka executable files
我用AutoIT撰寫了操作Weka進行預測的程式碼。所有程式內容都已經上傳到GitHub上:
- weka-prediction-caller 保存庫網址:https://github.com/pulipulichen/weka-prediction-caller
- 程式下載:https://github.com/pulipulichen/weka-prediction-caller/archive/master.zip
在這裡我們主要會用到的有兩個檔案:
- config.ini:各種參數設定。
- weka_prediction.exe:呼叫Weka執行預測。AutoIT的原始碼請看weka_prediction.au3。
預測操作 / Perform prediction
使用流程很簡單,我們要先設定好config.ini,然後再直接開啟weka_prediction.exe,這樣就能完成預測了。
上圖是整個進行預測的過程,在此例config.ini中after_predict_cmd的設定,它會用Internet Explorer的kiosk模式開啟Google表單網頁,並填入Weka預測的結果。
整個流程中我們要設定的就只有config.ini檔案,以下我繼續說明config.ini各個設定的內容。
設定檔 / config.ini
整個程式中最重要的就是設定config.ini。這個設定檔案是INI格式,語法是用等號「=」指定各參數的值:
[參數名稱]=[參數值]
整個config.ini裡面要設定6個參數,大部分都跟「使用Weka指令列實作預測功能」這篇中Weka指令列所需要的參數一樣,各別介紹如下。
weka.jar的位置 / Location of weka.jar
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
weka_classifier參數需要設定預測所使用的分類器。設定檔內容如下:
weka_classifier=weka.classifiers.functions.SMO
「weka.classifiers.functions.SMO」表示這次預測要使用的是支持向量機SVM的SMO分類器。
詳情請看「使用Weka指令列實作預測功能」中「分類器」的說明。
分類模型的位置 / Location of stored classifier model
weka_model參數需要設定預測所使用的分類模型。設定檔內容如下:
weka_model=.\iris-smo.model
「.\iris-smo.model」表示這次預測要使用的分類模型。開頭的「.\」是以相對路徑表示,代表這是指位於weka_prediction.exe檔案目錄底下的iris-smo.model。你也可將此參數換成以「C:\」開頭的絕對路徑。
詳情請看「使用Weka指令列實作預測功能」中「分類模型的位置」的說明。
待預測的測試集 / Test set for prediction
test_set_arff參數需要設定有待預測的測試集路徑。設定檔內容如下:
test_set_arff=.\iris-test-set.arff
「.\iris-test-set.arff」表示這次要預測的測試集檔案路徑,這跟前面分類模型一樣是以相對路徑表示。
詳情請看「使用Weka指令列實作預測功能」中「待預測的測試集」的說明。
等待預測訊息的標題與內文 / Waiting for prediction message
因為載入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
在預測完成之後,我們會透過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的指令列預測功能,讓它更容易跟其他的程式搭配使用。
舉例來說,你可以安排這樣的一個學習活動:
- 使用MPV播放影片給受試者看
- 使用腦波儀來記錄受試者的腦波,並匯出成測試集檔案
- 用這篇的方法來預測腦波測試集的分類
- 用after_predict_cmd來顯示回饋與進行下一步
寫到現在,我真的覺得AutoIT實在是非常萬能。Windows開發應用程式的第一選擇,就從AutoIT開始吧。