Orange的數據挖掘工具入門使用
聲明:
1)本報告由博客園bitpeach撰寫,版權所有,免費轉載,請注明出處,並請勿作商業用途。
2)若本文檔內有侵權文字或圖片等內容,請聯系作者bitpeach刪除相應部分。
3)本文檔內容涉及配合Python編程語言,介紹Orange數據挖掘工具的簡單實用主題。
4)僅僅作為參考用途,拋磚引玉,不作為證據證明用途,請自行取舍,核實引用。
0目錄
目錄
【1】為什么要寫該博文
本文大致介紹Orange的簡單知識,關鍵詞為:Orange 的使用,Orange的數據挖掘簡介等
1.1 原因
上一篇博文,介紹了Orange 的簡單情況。本篇博文介紹如何入門使用。
=====================================================================================================================================
【2】數據格式
有網友表示沒有看懂相關的數據格式,我也查詢了相關的網頁,搜索引擎等。沒有TAB的數據格式詳細文法說明,即便是有,也不是數據挖掘里的TAB格式,也有可能是我沒有找到,如果有興趣的網友向交流,可以與我的郵箱聯系。
2.1 TAB數據格式
以著名的鳶尾花格式為例說明,iris.tab來源於官方網址,這里截取部分。
sepal<space>length<\t>sepal<space>width<\t>petal<space>length<\t>petal<space>width<\t>iris<\r\n> c<\t>c<\t>c<\t>c<\t>d<\r\n> <\t><\t><\t><\t>class<\r\n> 5.1<\t>3.5<\t>1.4<\t>0.2<\t>Iris-setosa<\r\n> 4.9<\t>3.0<\t>1.4<\t>0.2<\t>Iris-setosa<\r\n> 4.7<\t>3.2<\t>1.3<\t>0.2<\t>Iris-setosa<\r\n> 4.6<\t>3.1<\t>1.5<\t>0.2<\t>Iris-setosa<\r\n> |
2.1.1 第一行
由於粘貼過來,空格或縮進世不可見的。所以我將數據修改一下,寫成較為明白的格式。第一行主要是屬性,屬性只要使用TAB(縮進)隔開,就表明是不同的屬性,所以如果使用空格隔開,仍然認為是同一屬性的名字。彼此之間使用縮進隔開,也正是tab數據格式的由來。
2.1.2 第二行和第三行
第二行主要是屬性的賦值類型,包括幾種。類似於WEKA的ARFF格式,但是ARFF格式,網上講得非常清楚,所以TAB反而缺少很多資料。在官方的描述符(descriptor)相關網頁上記錄了第二行的相關屬性,引用如下:
Data instances in Orange can contain several types of variables: discrete, continuous, strings, and Python and types derived from it.
由引用結果可知,賦值的類型比WEKA的ARFF要少一些,主要是連續數值型,離散數值型,字符型和Python鏈接變量等。其中先說離散數值型(discrete),縮寫為小寫字母d,表達的是數值離散,但兼備字符特征。連續數值型,縮寫為小寫字母c,表達的是連續數字變化,不具備字符特點。字符型則從字面可以理解。(為什么說離散兼備字符特征,因為排序的時候,依據離散數字值,排出來與字符ASCII排序是一致的,具體沒有理解透徹,希望交流指點。)
根據上面的例子,我們發現第二行里四個c,第五個是d,表示的是前四個屬性是連續數值,最后一個是離散的。Cloga網友在他的博客中也寫道:Orange使用一種專有的數據結構,擴展名為.tab,其實就是用tab分隔每個數據的純文本。文檔的第一行為屬性的名稱,用tab分隔,第二行為屬性對應的數據類型,包含連續性,間斷型和字符型。第三行包含一些元信息,用於指明依賴的特征(分類),不相關的特征(需要忽略的特征)和元特征。
所以第三行一般標注信息,至於什么是元信息,還來得及咨詢CG老師,但是粗淺的理解可以認為第三行實際上就是在做備注,備注數據屬性是否可以忽略,可以參與計算(這很重要!)。一般注明class,表示屬性可以忽略。請注意class所對應的屬性,只能選擇離散型(d)。不知道為什么(果斷我沒學好知識)。在某屬性下選擇連續型的賦值,還注明class,會在讀入的時候報錯,報錯類型(沒有及時截圖)大致為class attribute is not legal value。(補充,左側線划的句子是不正確的,是我沒有抓住本質的錯誤結論。導入not legal value的根本問題是tab數據格式的問題,與class注明對應的屬性類別沒有關系,即某個屬性,注明class,它可以是任意屬性,可以是s,可以是c,可以是d。我現在還原不出當時的這個報錯,我也回憶不起來出現not legal value的隱患在哪里,隱隱約約覺得出現這個問題,估計是第三行class的tab數量錯了,或者某個縮進打錯了,導致not legal value,歸根到底是簡簡單單的格式錯誤。)
綜上所述,需要注意上述數據例子的格式,關鍵的地方我都用紅色標注了,不可見的其他字符也用藍色標注。只有這樣才能符合Orange的讀入,否則報錯。
2.1.3 第三行以后
主要是數據,就不贅述了。數據與數據屬性一一對應,使用縮進隔開就行了。
2.2 TAB的相關資料(補充)
本部分為補充,是今晚新增的查證的相關材料。
(1)How to Create Tab Delimited Files
(2)請問clusfavor軟件中的delimited Text應該怎么翻譯呢
總結:說明查找相關的關鍵詞不能查詢“tab文件”或“tab數據格式”,而應該查詢“tab delimited 文件”之類的骨架關鍵詞。
同時材料how to create tab delimited files提供了EXCEL可以另存為的方法。(OFFICE2010里的選擇是另存為“文本(帶分隔).txt”)
Read more : http://www.ehow.com/how_5079116_create-tab-delimited-files.html
Read more : http://www.ehow.com/how_5079116_create-tab-delimited-files.html
Read more : http://www.ehow.com/how_5079116_create-tab-delimited-files.html
================================================================================================================================
【3】小實驗
Orange不可能全部介紹,只能去閱讀官方資料。這里就做一個聚類的小實驗,把實驗過程中的問題總結起來,避免后面的人走彎路。記錄實驗的目的,絕對不僅僅是證明成功,更是提醒后來者實驗的問題,去解決重現實驗的問題,這才是正確的態度。我選取的小實驗主題為聚類分析,專門是層次聚類。
3.1 在小實驗之前的內容
在說到聚小實驗類之前,不得不提到Orange可以作為模塊導入python,因此不僅可以使用可視化操作,還可以使用代碼腳本驗證。這些作為模塊的官方說明文檔,都可以去閱讀,下面總結幾個:
(1)關於官方數據輸入(DATA Input)的代碼導入和代碼DEMO說明非常有用,解釋了如何使用Orange的標准庫來制作TAB數據,這是非常方便的。
(2)既然要聚類,必然要選擇聚類距離准則,關於官方網址提供計算距離(Distance)的方法和模塊接口可以參看超鏈接。官方提供的例程非常容易理解,非常好用,非常好驗證。
(3)聚類選擇了層次聚類,可以參看官方提供的層次聚類(Hierarchical Clustering)的模塊接口和代碼DEMO。
3.2 數據格式的制作
在這里,我目前還在學習Orange 的標准庫制作TAB的方法,還沒有完全學會,因此就不提前撰寫相關的知識了(筆者注:貌似我犯了錯誤,我沒有發現Orange提供標准庫,好像它沒有制作TAB的標准庫,看來還是要自己去制作)。使用Python寫TAB的數據是非常方便,比起C語言來,真的是很快速迅捷。本實驗的時候,制作的時候需要提醒幾點,並舉一個例子:
- TAB的數據格式設計問題(請具體問題具體分析,我下面這個例子的解決方法也是具體的,不是廣泛適用的)
如果我分析的數據對象是一個DNA序列數據,請注意數據格式需要如下書寫:
No1<\t>No2<\t>No3<\t>No4<\t>No5<\t>Order<\r\n> d<\t>d<\t>d<\t>d<\t>d<\t>c<\r\n> <\r\n> G<\t>G<\t>T<\t>C<\t>G<\t>1<\r\n> G<\t>T<\t>A<\t> T<\t>C<\t>2<\r\n> …… |
No1<\t>No2<\t>No3<\t>No4<\t>No5<\t>Order<\r\n> d<\t>d<\t>d<\t>d<\t>d<\t>d<\r\n> <\t><\t><\t><\t><\t>class<\r\n> G<\t>G<\t>T<\t>C<\t>G<\t>1<\r\n> G<\t>T<\t>A<\t> T<\t>C<\t>2<\r\n> …… |
上述例子應該都可以使用,之前我都驗證過是可以使用的,只不過不報錯,但不一定符合你的使用聚類計算。
兩個的屬性是五個鹼基,加上一個序列的編號。盡管Orange會內置編號,但是我不知道如何使用,並且使用自己的編號,利於數據庫管理。
上述左側請注意,如果不對屬性進行元信息的標注,那么空出一行,什么也不要寫。
上述右側請注意,如果標注了class,Order一定要離散的,否則可能報錯(好像我實驗的時候報錯了)。標注class 的話,沒有必要空出額外的一行。(補充,如果空了一行,但是不標注class,有時也報self.list out of range的溢出,但是仍然可以跑數據。這極可能是如果你不標注class,又空出了一行,但是你那一行帶入不可見的字符,如空格或縮進,你空出的那一行必須只能是簡簡單單的回車換行。否則會出問題。)
但是不論上述兩種設計數據格式,Order很有可能會出現問題,原因是:
(1)對於程序內部來說,聚類需要計算距離,如果屬性不是需要計算距離的,結果被帶進去計算,導致結果是錯誤的。
詳細情況:上述左側,如果Order不去注明class(表示忽略該屬性),則Order的數值帶入計算,影響聚類。
解決方式:對於計算距離的情形,非計算屬性可以標記為c,也可以標記s,盡量不標記d。如果標記d,可以注明該屬性為class,或許可以不帶入運算。(補充:此為后續實驗的體會)
(補充:)不論是連續型,還是離散型。Orange的tab數據投入到聚類距離計算時,凡絕對值不是0和1,即大於等於2或小於等於-2,都會被程序認為是1。所以多維屬性的數值一般為0或1。如果不參與計算的屬性,如序列編號等,盡量不要帶入計算中。所以要么使用class注釋不想參與計算的數據(注意,class只能使用一次,所以建議使用標注string來處理),要么使用string屬性。這是后續實驗的體會。
(2)對於人來說,聚類結果需要輸出,需要可視化的觀察,需要編號的顯示,但是Orange可能會出現一定問題。
詳細情況:上述右側,如果Order注明了class,則在層次聚類的時候,忽略掉了該屬性,自動的remove掉了,導致層次聚類后,我不知道哪條序列是原來總體集合的順序第幾條?(補充:筆者此處語句不嚴謹,可能有問題。后續的進一步實驗覺得這句話是不正確的。)
綜上所述,而上述的情況,常常見於入門知識,官方引言。因此這里摸索到使用string,則不會參與計算的方法。即給Order賦予string(縮寫為s),依然給1,2,3等編號,既可以層次聚類的時候觀察編號,也可以不參與聚類距離的計算。驗證方式為:
我新建一個數據,並有四個序列,分別為(這里不給出TAB的完整格式了,就給出隨便的格式了,主要是給序列內容):
S1 S2 S3 S4 S5 S6 S7 S8 Order discrete discrete discret discrete discrete discrete discret discrete string
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 300 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 4000 |
如果string的數值參與影響,必定影響層次聚類的距離計算,但是結果輸出為如下:
編號1與編號300的聚成一起,既說明沒有影響,而且在層次聚類的圖后還能看見編號。(如果使用class,是在上圖中看不到編號的,手動則左側欄也是找不到調不出屬性的,因為class的屬性被忽略掉了。)
3.3 層次聚類的實驗過程
聚類的過程非常簡單,因為都是可視化操作。可視化操作的圖標都在左側欄里,都可以找到。
(1)建立FILE,點選FILE圖標,拖動放置畫布上。
打開FILE,可以讀取TAB數據,選中所要讀取的文件(已經制作好的TAB數據文件)
讀取后,需要顯示數據,然后選擇DATA欄目里的第二行第一個,Data Table圖標,拖放至畫布中,然后從FILE圖標的右側引出一根線,可以連接Data Table。
則在Paint Data里可以顯示數據了,顯示情況如下。
同時注意,在顯示的時候,是看不到Order的屬性,但是如果是class屬性,默認會是灰色的,自己試試就知道了。
看到上圖左下角有一個commit on any change是用於修改數據后,重新保存提交,重新運行的操作按鈕。不要選上鈎,因為"不選鈎"的操作就是每一步操作如果影響了數據,立刻就會投入到后續生產線(這里我將整個聚類的完整過程比喻成生產線),為避免牽一發動全身。建議不要勾上,使用手動提交的方式,便於生產線根據人的意志去調節調試。
(2)由於我們的主題是層次聚類,但是層次聚類之前需要計算距離。因此接下來,將Paint Data送入距離計算模塊,選擇不帶任何標記的純粹的三角形狀的Distance(在Unsupervised里有純粹三角形的Distance)。
下圖因為我已經做了實驗,就不重頭一個一個拖放了,就指出下面紅色框內的為distance模塊。同時,從Data Table圖標引出一條線接上Distance。
雙擊點開Data Table圖標,彈出的菜單左下角點擊send selections。這樣數據就被送入到distance了。在distance中可以選擇距離公式,默認是歐式距離。
如果你需要更換公式,可以在Distance Metric一欄,選擇完其他的公式,點擊commit,然后再由Data Table送入數據,重新計算。
請注意,發送數據(send selection)是需要你選擇數據的,即可以使用鼠標拉選EXCEL那樣。如果你發送全部數據,也應該是需要手動選擇的,如果數據太多,不想鼠標拉選,可以像下圖一樣,下圖紅框處,雙擊即可全選,然后發送數據即可。如果你發送數據(send selection)沒有任何反應,很有可能就是你沒有選擇數據。沒有選擇數據,送出去是空數據。
(3)然后是層次聚類,在Unsupervised欄目的第二行第三個,選擇層次聚類圖標,然后拖放至白布上。從distance圖標引出一根線,連接層次聚類的圖標。
當把數據送過去后,如果數據很多的話,可以看到distance圖標在環形緩沖,這個顯示效果做的很贊(上圖是如果數據很多的情況,distance環形緩沖的示意)。打開層次聚類后,發現生成了系譜樹。
上圖右側是閾值,拖動閾值閥門,可以顯示不同的聚類數目。
上圖左側三個紅框,分別指距離准則,屬性顯示,標注額外屬性。
第一個,距離准則,有如下的選擇。
這幾個選擇從上到下分別是最小距離,平均距離,最小方差距離,最大距離。(想學習具體方法,可以參看百度文庫,文檔貢獻網友627004473的上傳文檔《聚類分析PDF》,在第29頁)
一般序列計算距離還是選擇類平均法比較法,因此選擇它average linkage。
第二個,屬性顯示。就是我之前提到的,如果想在聚類圖譜中看到序列所屬的編號,如果使用class,annotation里會沒有Order,所以使用string屬性,可以解決這個問題。現在譜圖中就出現了編號,如下圖。
第三個額外標注,是為了寫出聚類內樣本內容,需要標注一下序列所屬的類的類號。通過額外寫入,方便樣本保存的時候,里面會有類標記。建議勾選,並自己起一個名字。
(4)層次聚類結束后,需要把數據導出,則分別拖放selected data和save,如下圖所示。
請注意,你的selected data是空白的,請雙擊層次聚類的圖標,在彈出的菜單左下角,點擊commit,提交你的操作變化。這樣內部程序發現變化,隨即將數據傳入selected data。然后你可按照自己的屬性去提取對應的數據。如下圖所示,我按照Order編號所在的聚類類號,保存我想要的數據,同時我還知道聚類划分的數據屬於原集合的第幾條數據。由於在層次聚類的界面,有一個append cluster ID之前介紹過了,勾選上,則在selected data中會多出一個類號的屬性。下圖中HierarCluster是我在層次聚類的圖中,append cluser ID命名新增所致。
save的圖標則在上圖的上圖中,用於存儲數據。首先在上圖的基礎上,產生規則,如下圖所示。
在上圖中,定義HierarCluster屬於Cluster1的樣本,點擊add,在規則區就產生了樣本,data out區域也注明了樣本數和特征數。此時把save圖標拖出,回過來將select data打開,勾選(active)想要的數據樣本,點擊commit提交,就會傳到save里。最后雙擊SAVE圖標,在彈出的的菜單中,再保存數據即可,如下圖所示。
3.4 本實驗的不足
局限於目前接受學習的水平,還沒足夠的時間掌握orange的數據挖掘資料,本實驗有以下不足:
-
解決tab文件的部分數據格式概念知識,仍有一部分未解決。如除離散值和連續值,class,string外還有什么屬性?離散和連續的區別在哪里?(這個問題我參閱《數據挖掘概念與技術》一書29頁,第二章2.1.6小節關於離散屬性和連續屬性的問題,但是仍然不解)
-
層次聚類有沒有評估性能的模塊?如召回率等。便於解決k-means的性能評價問題。也利於完成學術的基本實驗證明。
本實驗的特色特點在於:
(1)Orange的接口簡單易行,它的模塊類有demo可追溯,入手較快。
(2)全過程可視化操作,極其簡單,在操作上勝於WEKA
(3)Orange的聚類分析雖沒有WEKA參數全面,但獨具特點,含有信息預測的模塊,也非常有特色。
非常熱切地希望和期盼有一起使用的朋友,一起討論,一起交流,如果有前輩指導就更好了!我的工作郵箱和github都掛在博客上,有興趣的可以聯系。
<<<<<<<<< 寫在頁面最底的小額打賞 >>>>>>>>>
如果讀者親願意的話,可以小額打賞我,感謝您的打賞。您的打賞是我的動力,非常感激。
必讀:如您願意打賞,打賞方式任選其一,本頁面右側的公告欄有支付寶方式打賞,微信方式打賞。
避免因打賞產生法律問題,兩種打賞方式的任一打賞金額上限均為5元,謝謝您的支持。
如有問題,請24小時內通知本人郵件。