高明霞 方 娟 毛國君
文章編號:1672-5913(2009)02-0100-03
摘 要:機器學(xué)習(xí)是一門以算法和學(xué)習(xí)理論為主的計算機專業(yè)基礎(chǔ)課程,單純的算法分析和理論講解很難引起學(xué)生的學(xué)習(xí)興趣。為了激發(fā)學(xué)生的興趣,循序漸進的完成教學(xué)目標(biāo),本文探討了在課堂講授、課程作業(yè)和畢業(yè)設(shè)計三個基本教學(xué)環(huán)節(jié)中應(yīng)用開源機器學(xué)習(xí)工具——WEKA的教學(xué)方法。
關(guān)鍵詞:機器學(xué)習(xí);WEKA;算法
中圖分類號:G642
文獻標(biāo)識碼:B
1 引言
機器學(xué)習(xí)課程是很多大學(xué)為計算機科學(xué)與技術(shù)專業(yè)的高年級學(xué)生和研究生開設(shè)的專業(yè)基礎(chǔ)課程。它主要講授目前機器學(xué)習(xí)中各種實用的理論和算法,包括概念學(xué)習(xí)、決策樹、神經(jīng)網(wǎng)絡(luò)、貝葉斯學(xué)習(xí)、基于實例的學(xué)習(xí)、遺傳算法、規(guī)則學(xué)習(xí)、基于解釋的學(xué)習(xí)和增強學(xué)習(xí)等。機器學(xué)習(xí)教學(xué)的主要目標(biāo)有兩個:一是掌握典型的機器學(xué)習(xí)算法并利用這些技術(shù)解決實際問題;二是根據(jù)實際應(yīng)用改進現(xiàn)有方法,發(fā)展新的機器學(xué)習(xí)技術(shù)。目前機器學(xué)習(xí)的教學(xué)內(nèi)容主要集中在典型算法和學(xué)習(xí)理論,現(xiàn)有教材中使用的實例和現(xiàn)實應(yīng)用差距很大,如果教師的課堂教學(xué)中過多的采用算法分析和偽碼演示,很難激發(fā)學(xué)生的學(xué)習(xí)興趣。實際上,機器學(xué)習(xí)方法已經(jīng)有了十分廣泛的應(yīng)用,被成功的運用到了生物特征識別、搜索引擎、醫(yī)學(xué)診斷等各個領(lǐng)域。如果在教學(xué)過程中,讓同學(xué)們看到、感受到、甚至于自己參與到這些機器學(xué)習(xí)的應(yīng)用實例中,必定能大大激發(fā)學(xué)生的學(xué)習(xí)興趣。
為此,我們設(shè)計了一個包括課堂講授、課程作業(yè)和畢業(yè)設(shè)計三個教學(xué)環(huán)節(jié)的教學(xué)過程,并在每個教學(xué)環(huán)節(jié)中,應(yīng)用了一個開源的機器學(xué)習(xí)工具——WEKA。首先,教師利用WEKA的可視化界面在課堂教學(xué)上展示了經(jīng)典算法和實例的運行效果;其次,教師應(yīng)用WEKA的多種算法實現(xiàn),在課程作業(yè)環(huán)節(jié),為學(xué)生布置了一些現(xiàn)實應(yīng)用,并要求他們借助WEKA自己解決;最后,在畢業(yè)設(shè)計環(huán)節(jié),教師針對機器學(xué)習(xí)技術(shù)的最新發(fā)展,要求有能力、感興趣的學(xué)生自己實現(xiàn)某個新算法,并借助WEKA的可視化接口,和原有算法進行性能對比分析。借助WEKA,應(yīng)用這種循序漸進的教學(xué)過程,可以引導(dǎo)學(xué)生了解機器學(xué)習(xí)課程的作用,并培養(yǎng)他們利用所學(xué)知識解決實際問題的動手能力和發(fā)現(xiàn)問題、解決問題、評估問題的研究能力。
下邊首先簡單介紹一下開源工具——WEKA。接著講述其在教學(xué)演示,課程作業(yè)和畢業(yè)設(shè)計方面的應(yīng)用。最后是對本文的簡要總結(jié)。
2 WEKA簡介
WEKA[1]的全名是懷卡托智能分析環(huán)境(Waikato Environment for Knowledge Analysis),它的源代碼可通過http://www.cs.waikato.ac.nz/ml/WEKA得到。由于WEKA的主要開發(fā)者來自新西蘭,所以使用了一種新西蘭的鳥名命名這個工具。2005年8月,在第11屆ACM SIGKDD國際會議上,懷卡托大學(xué)的WEKA小組榮獲了數(shù)據(jù)挖掘和知識探索領(lǐng)域的最高服務(wù)獎,WEKA系統(tǒng)得到了廣泛的認(rèn)可,成為現(xiàn)今較完備的數(shù)據(jù)挖掘工具之一。WEKA 3.5.8能夠提供四種操作環(huán)境:SimpleCLI、Explorer、Experimenter、knowledgeflow。四種操作環(huán)境的基本原理都大同小異,只是提供的界面不一樣。SimpleCLI適合于直接使用代碼的用戶;Knowledgeflow傾向于喜歡圖標(biāo)的實驗者;explorer和experimenter通常更適用于功能形控制。WEKA作為一個開源的數(shù)據(jù)挖掘工作平臺,集合了大量能承擔(dān)數(shù)據(jù)挖掘任務(wù)的機器學(xué)習(xí)算法,包括對數(shù)據(jù)進行預(yù)處理、分類、回歸、聚類、關(guān)聯(lián)規(guī)則以及在新的交互式界面上的可視化。WEKA提供了通用的接口文檔和插件模式的系統(tǒng)結(jié)構(gòu),供機器學(xué)習(xí)研究人員方便的實現(xiàn)自己的算法并集成到WEKA環(huán)境中進行深入研究。
3 WEKA在教學(xué)演示方面的應(yīng)用
講解某個機器學(xué)習(xí)算法時,除了從理論上進行闡述外,使用一個真實問題,借助WEKA為學(xué)生演示該算法解決這個真實問題的整個步驟,并根據(jù)算法特點和知識點,在演示過程中設(shè)置問題和學(xué)生交互更能激發(fā)學(xué)生的興趣,加深他們對算法的認(rèn)識。下邊是針對教材中通用的天氣(weather)數(shù)據(jù)集(5個屬性,14個樣例)講解決策樹算法ID3時WEKA—Explorer在教學(xué)演示方面的應(yīng)用。
1) 數(shù)據(jù)預(yù)處理:Explorer的選項卡“Preprocess”提供了對樣例數(shù)據(jù)的多角度觀察和大數(shù)據(jù)集的屬性實例過濾操作等數(shù)據(jù)預(yù)處理方法。在這個過程中,以可視的形式給學(xué)生展示了數(shù)據(jù)預(yù)處理,數(shù)據(jù)格式等和算法相關(guān)的知識。由于ID3算法只能處理離散值屬性,原始實例中的兩個屬性(temperature和humidity)值范圍是實數(shù),為了滿足ID3算法,需要對這些屬性值進行各種離散化處理。借助這一選項卡對各種離散化方法進行展示,并比較結(jié)果和使用范圍。
2) 屬性選擇方法:Explorer的選項卡“Select attributes”提供了多種方法用于選擇分類屬性,例如信息增益(information gain),信息增益比(gain ratio)等。通過多種屬性選擇方法對天氣數(shù)據(jù)集中的五個屬性進行實時處理和可視化結(jié)果對比,為學(xué)生展示了屬性選擇對ID3算法的重要性。
3) 樹模型形成:Explorer的選項卡“Classify”提供了各種測試形式用于形成樹模型,包括帶訓(xùn)練集(use training set)、交叉驗證(cross-validation)、比例分割(percentage split)等測試形式。通過自由選擇可以實時演示不同測試形式的模型學(xué)習(xí)結(jié)果和詳細(xì)評估指標(biāo),通過對比可以了解不同測試形式的優(yōu)缺點以及適用范圍。特別是帶源碼的模型結(jié)果輸出,除了形象的展示了形成的模型樹外,還以面向?qū)ο缶幊痰乃枷胝故玖薎D3算法的JAVA語言實現(xiàn),這些真實程序和偽代碼結(jié)合講解,可以培養(yǎng)學(xué)生的實際動手能力和算法抽象能力。
4) 結(jié)果指標(biāo)的圖形化演示和處理:除了選項卡“Classify”提供的分類器輸出(Classifier Output)用于顯示結(jié)果指標(biāo),WEKA對結(jié)果的一些特殊指標(biāo)提供了圖形化演示和文件導(dǎo)出的靈活功能,可以通過右鍵獲得。
4 WEKA在課程作業(yè)方面的應(yīng)用
上節(jié)借助WEKA演示機器學(xué)習(xí)算法的過程可以幫助學(xué)生掌握典型的機器學(xué)習(xí)方法,本節(jié)結(jié)合教學(xué)過程中的課程作業(yè)布置重點闡述借助WEKA培養(yǎng)學(xué)生利用所學(xué)機器學(xué)習(xí)方法解決實際問題的能力。
由于機器學(xué)習(xí)方法在實際領(lǐng)域中得到了廣泛的應(yīng)用,我們可以將這些領(lǐng)域中的現(xiàn)實問題提出作為課程作業(yè)布置給學(xué)生,要求他們利用所學(xué)的機器學(xué)習(xí)方法來解決。如果沒有WEKA對經(jīng)典算法的實現(xiàn),就需要學(xué)生自己花費大量時間完成算法實現(xiàn)、輸入數(shù)據(jù)標(biāo)準(zhǔn)化和輸出格式圖形化這些復(fù)雜、繁瑣的編程工作。這將大大降低學(xué)生學(xué)習(xí)機器學(xué)習(xí)方法和利用這些方法解決現(xiàn)實問題的興趣。WEKA作為一個數(shù)據(jù)分析平臺,提供了大量經(jīng)典機器學(xué)習(xí)算法的實現(xiàn),并提供了方便的數(shù)據(jù)輸入、結(jié)果輸出和可視化功能,它能簡化利用機器學(xué)習(xí)技術(shù)解決現(xiàn)實問題的過程。使得學(xué)生集中關(guān)注有助于提高他們解決問題能力的如下問題點:現(xiàn)實問題到機器學(xué)習(xí)實例的形式化,所用機器學(xué)習(xí)算法的優(yōu)缺點和數(shù)據(jù)要求,那些算法適用這一現(xiàn)實領(lǐng)域等。
下邊以自然語言處理領(lǐng)域中一個識別自然語言問題所處領(lǐng)域的現(xiàn)實需求為例,說明利用WEKA解決這一現(xiàn)實問題的簡化過程。問題領(lǐng)域識別是問題分類[2]的一種,可以看作是典型的文本分類問題,通常需要特征提取,模型訓(xùn)練,和新問題預(yù)測三個階段。課程作業(yè)所用樣本問題搜集于MadSci Circumnavigator站點1996至2005年間用戶提交的真實問題,包括計算機領(lǐng)域的709個問題和醫(yī)療領(lǐng)域的2142個問題,糾正了原始問題中包含的語法和拼寫錯誤,分別得到570個計算機類和1928個醫(yī)療類問題。
特征提取可以參考文本分類[3]中所用特征向量,將同領(lǐng)域中的所有樣本問題包含的核心詞作為特征,并以要分類問題中是否出現(xiàn)這些核心詞為這些特征定義兩個取值{0,1},分別表示不出現(xiàn)和出現(xiàn)。這一階段主要完成現(xiàn)實問題到機器學(xué)習(xí)問題的形式化,所用技術(shù)和自然語言處理領(lǐng)域密切相關(guān),和WEKA關(guān)系不大。
定義了特征后,模型訓(xùn)練和新問題領(lǐng)域預(yù)測兩個階段可完全借助WEKA—Explorer實現(xiàn)。模型訓(xùn)練需要選擇合適的問題作為正負(fù)樣例,并根據(jù)特征取值和所屬領(lǐng)域?qū)⑺麄冝D(zhuǎn)換為特征向量,表示成WEKA可識別的數(shù)據(jù)格式,用WEKA提供的各種分類器訓(xùn)練模型。要完成這一步驟,需要了解WEKA使用的數(shù)據(jù)格式。WEKA存儲數(shù)據(jù)的格式是一種ASCII文本文件ARFF(Attribute-Relation File Format)。表1中的ARFF文件就是部分計算機領(lǐng)域的WEKA數(shù)據(jù)樣例集。以“%”開始的行是注釋行,處理過程中被忽略。除去注釋后,整個ARFF文件可以分為頭信息和數(shù)據(jù)信息兩個部分。頭信息(Head information),包括對關(guān)系和屬性的聲明。數(shù)據(jù)信息(Data information),即數(shù)據(jù)集中的實際樣例,從“@data”標(biāo)記開始。將要處理的數(shù)據(jù)表示成WEKA的存儲格式后,就可以利用Explorer 的選項卡“Classify”提供的不同分類器和訓(xùn)練方式來訓(xùn)練模型。該選項卡的作用很清晰,面板上的操作類型也很明確,我們可以按照要求選擇并完成模型訓(xùn)練,右邊的分類器輸出(Classifier Output)對該模型的具體情況做了詳細(xì)說明。表2是選擇WEKA中提供的NaiveBayes、RBFNetwork、VotedPerceptron、SMO四種分類算法和它們的默認(rèn)參數(shù),對訓(xùn)練樣本集進行了4-fold的交叉驗證后得到的模型精度結(jié)果。
由于目前的應(yīng)用實例只考慮了兩個領(lǐng)域,所以新問題預(yù)測只能預(yù)測該問題是否屬于某個(計算機或醫(yī)療)領(lǐng)域。例如要預(yù)測問題“should I gargle salty water against mouth infection?”是否屬于醫(yī)療領(lǐng)域。只需要將新問題根據(jù)醫(yī)療領(lǐng)域的特征字典和取值表示成特征向量,并將最后一個屬性值result置空,使其成為一個要預(yù)測問題的ARFF文件(medicine-new.arff)。從表2可知要選擇第一個分類器(Na?ve Bayes)和醫(yī)療訓(xùn)練數(shù)據(jù)形成的學(xué)習(xí)模型預(yù)測,在這個模型結(jié)果列表上重新選擇測試形式(Test options)為 “Supplied test set”,并且“Set”成你得到的要預(yù)測問題的數(shù)據(jù)集,這里是“medicine-new.arff”文件?,F(xiàn)在,右鍵點擊選擇的模型,選擇“Re-evaluate model on current test set”進行預(yù)測。并通過點擊右鍵菜單中的“Visualize classifier errors”,將彈出的一些有關(guān)預(yù)測誤差的散點圖保存成一個Arff文件。打開這個文件可以看到在倒數(shù)第二個位置多了一個屬性(predictedpep),這個屬性上的值就是模型對新問題領(lǐng)域的預(yù)測值。
5 WEKA在實踐環(huán)節(jié)的應(yīng)用
不同的機器學(xué)習(xí)算法有不同的特點和應(yīng)用領(lǐng)域,隨著大量新問題和新領(lǐng)域的出現(xiàn),研究人員在不斷的開發(fā)新的算法和改進已有算法的應(yīng)用范圍。對于那些對機器學(xué)習(xí)技術(shù)有興趣,想深入學(xué)習(xí)的學(xué)生,為他們提供機器學(xué)習(xí)領(lǐng)域內(nèi)合適的畢業(yè)設(shè)計題目可以鍛煉他們的實踐能力和科研能力。例如讓他們實現(xiàn)一個新的機器學(xué)習(xí)算法并通過實驗分析比較它的性能和優(yōu)缺點。WEKA提供了插件體系模式和通用接口,供研究人員方便的集成自己的算法到他的環(huán)境中。所以,學(xué)生可以借助WEKA的這些功能,實現(xiàn)這一算法并集成在WEKA的環(huán)境中,利用WEKA平臺方便快捷的分析、比較新算法和已有典型算法的各種性能。
6 結(jié)論
為了更好的達到機器學(xué)習(xí)教學(xué)的兩個目標(biāo),激發(fā)出學(xué)生學(xué)習(xí)機器學(xué)習(xí)課程的興趣,我們在機器學(xué)習(xí)的教學(xué)過程中應(yīng)用了一個開源工具——WEKA,并借助它的可視化環(huán)境、典型算法實現(xiàn)和通用接口說明,在課堂上為學(xué)生演示實際問題解決過程,在課程作業(yè)布置上有意識的選擇特定領(lǐng)域得真實問題并要求學(xué)生應(yīng)用WEKA和所學(xué)知識解決這些問題,在課程設(shè)計上鼓勵學(xué)生以WEKA提供的通用接口實現(xiàn)新算法和改進現(xiàn)有算法并集成到它的環(huán)境中。通過這些教學(xué)步驟,讓學(xué)生循序漸進的做到了解機器學(xué)習(xí)方法,掌握典型算法,利用機器學(xué)習(xí)方法解決問題,提出、實現(xiàn)新的機器學(xué)習(xí)方法,并最終實現(xiàn)機器學(xué)習(xí)教學(xué)的兩個目標(biāo)。
參考文獻:
[1] I. Witten, E. Frank. WEKA Machine Learning Algorithms in Java[D]. Data Mining: Practical Machine Learning Tools and Techniques with Java Implementations, Morgan Kaufmann Publishers, 2000.
[2] J. Pomerantz. A Linguistic Analysis of Question Taxonomies[J]. Journal of the American Society for Information Science and Technology, 2005,56(7).
[3] C. Zhalaing, P. L. Khanh, M. Ashesh, et al. Feature Extraction for Learning to Classify Questions[J]. AI 2004, 2004, LNAI 3339.