不多說,直接上干貨!
Weka的Explorer(探索者)界面,是Weka的主要圖形化用戶界面,其全部功能都可通過菜單選擇或表單填寫進行訪問。本博客將詳細介紹Weka探索者界面的圖形化用戶界面、預處理界面、分類界面、聚類界面、關聯界面、選擇屬性界面和可視化界面等內容。

一、Weka的Explorer(探索者)界面里的圖形化界面
啟動Weka GUI選擇器窗口之后,用鼠標單擊窗口右部最上面的Explorer按鈕,啟動探索者界面,這時,由於沒有加載數據集,除預處理面板外,其他面板都變灰而不可用, 可以使用Open file、Open URL、Open DB或者Generate按鈕加載或產生數據集,加載數據集之后,其他面板才可以使用。

我這里以打開文件為例進行說明。單擊左上部的Open file按鈕,通過彈出的打開文件對話框,選擇打開data子目錄下的iris.arfT文件,加載數據集后的探索者界面如下圖所示。



區域1的幾個選項卡是用來切換不同的挖掘任務面板。這一節用到的只有“Preprocess”,其他面板的功能將在以后介紹。
區域2是一些常用按鈕。包括打開數據,保存及編輯功能。
區域3中“Choose”某個“Filter”,可以實現篩選數據或者對數據進行某種變換。數據預處理主要就利用它來實現。
區域4展示了數據集的一些基本情況。
區域5中列出了數據集的所有屬性。勾選一些屬性並“Remove”就可以刪除它們,刪除后還可以利用區域2的“Undo”按鈕找回。區域5上方的一排按鈕是用來實現快速勾選的。
區域6中選中某個屬性,則區域6中有關於這個屬性的摘要。注意對於數值屬性和分類屬性,摘要的方式是不一樣的。圖中顯示的是對數值屬性“income”的摘要。
區域7是區域5中選中屬性的直方圖。若數據集的最后一個屬性(我們說過這是分類或回歸任務的默認目標變量)是分類變量(這里的“pep”正好是),直方圖中的每個長方形就會按照該變量的比例分成不同顏色的段。要想換個分段的依據,在區域7上方的下拉框中選個不同的分類屬性就可以了。下拉框里選上“No Class”或者一個數值屬性會變成黑白的直方圖。
區域8是狀態欄,可以查看Log以判斷是否有錯。右邊的weka鳥在動的話說明WEKA正在執行挖掘任務。右鍵點擊狀態欄還可以執行Java內存的垃圾回收。
1、標簽頁介紹
下圖圖所示界面的頂部有六個不同的標簽頁,代表六個不同的面板,分別對應Weka 聽支持的多種數據挖掘方式。如果剛開始打開探索者界面,那么只有第一個預處理標簽頁可用,其余的標簽文字全部變為灰色而不可用,這是因為必須先打開一個數據集,根據應用需要,或許還需要對數據進行預處理,才能使用其他面板。
這六個標簽頁的介紹如下。

(1) PreprocesS(預處理)。選擇數據集,並以不同方式對其進行修改。
(2) Classify(分類)。訓練用於分類或回歸的學習方案,並對其進行評估。
(3) Cluster(聚類)。學習數據集聚類方案。
(4) Associate(關聯)。學習數據關聯規則,並對其進行評估。
(5) Select attributes(選擇屬性)。選擇數據集中最相關的部分屬性。
(6) Visualize(可視化)。查看不同二維數據散點圖,並與其進行互動。
每個標簽頁都可完成不同工作,單擊標簽頁上部文字即可實現標簽切換。窗口底部包括狀態(Status)欄、日志(Log)按鈕和一只Weka鳥,這些都是一直保持可見,不論用戶切換到哪一個標簽頁。
2、狀態欄
狀態欄位於窗口的最下部,顯示ih用戶了解現在正在進行到哪一步的狀態信息。例如,如果探索者正在忙於加載數據文件,狀態欄會顯示相應的狀態信息。

除了顯示狀態之外,還可以右擊來顯示內存信總,以及運行垃圾回收器以清理內存。 在狀態欄的任意位罝右擊,會彈出一個上下文菜單,菜單只包括兩個菜單項——Memory information(內存信信息)和Run garbage collector(運行垃圾回收器),第一個菜單項顯示Weka 當前可用的內存空間:第二個菜單項啟動Java垃圾回收器,搜尋不再使用的內存並釋放以回收部分內存空間,提供給新的任務使用。需要指出的是,垃圾回收器是一個不間斷運行的后台任務,如果不強制進行垃圾回收,Java虛擬機也會在適當時候自動啟動垃圾回收。
日志按鈕位於狀態欄的右面,單擊該按鈕會打開可以滾動的日志文本框,顯示在此次 運行期間內Weka進行的全部活動以及每項活動的時間戳。不管是使用圖形用戶界面、命令行還是Simple CLI,日志都會包含分類、聚類、M性選擇等操作的完整的設置字符串。 因此,用戶可以進行復制和粘貼。順便提醒大家,學習日志里記錄的命令,可以深層次地了解Weka的內部運行機制。
曰志按鈕的右邊,可以#到稱Weka狀態圖標的鳥。如果沒有處理過程在運行,小鳥會坐下來打個盹。“X”符號旁邊的數字顯示目前有多少個正在進行處理的進程,當系 統空閑時,該數字為零,數字會隨着正在進行處理進程數的增加而增加。當啟動處理進程 時,小鳥會站起來不停走動。如果小鳥長時間站着不動,說明Weka出現運行錯誤,此時用戶需要關閉並重新啟動探索者界面。
3、 圖像輸出
Weka中顯示的大部分圖形,不論是通過 GraphVisualizer (圖可視化器)或是TreeVisualizer(樹可視化器)顯示的,都可以保存為圖像文件以備將來使用。保存方法是,按下Alt鍵和 Shift鍵的同時,在要保存的圖形上單擊,就可啟動保存文件對話框。支持的的圖像文件格式有 BMP、 JPEG、 PNG和 Postscript的 EPS,用戶可以選擇圖像文件格式還可以修改輸出圖像文件的尺寸。
4、手把手教你用
4.1、啟動Weka
從Windows左下角的“開始”菜單,依次選擇“所有程序”,再找到Weka3.7.8菜單,啟動它,如下圖所示。

然后,單擊窗口右部最上邊的Explorer按鈕啟動Weka 探索者,如下圖所示。

現在,除了Preprocess標簽頁可用外,其余標簽頁都是不可用的。

2、了解標簽頁
單擊上圖的Open file按鈕,該按鈕位於窗口的左上部。啟動“打開”文件窗口,導航到Weka安裝目錄下的data子目錄,選擇iris.arff文件,我這里是選擇在
D:\SoftWare\Weka-3-7\data。單擊打開按鈕,打開該文件,如下圖所示。

打開文件(或稱為加載數據)后的Weka探索者,界面如下如所示,可以看到,加載數據后,六個標簽頁都變為可用狀態。

大家,可以自行去切換標簽頁,初步了解各個標簽頁的功能,為后續的學習打下基礎。





3、了解狀態欄
不論切換到哪個標簽頁,都可以在探索者窗口下部的狀態欄查看到狀態信息。在狀態欄任意位置右擊,在彈出的上下文菜單中選擇第一項Memory information(內存信息),狀態欄顯示用斜杠分隔的內存信息,格式為:空閑內存/全部內存/最大內存,單位字節。如下圖所示。


如果選擇上下文菜單中的第二項Run garbage collector,狀態欄會顯示ok信息,表示已經啟動了垃圾回收器。

單擊狀態欄右邊的Log按鈕,可以查看到當前日志。

4、保存圖像文件
單擊如下圖所示的界面右邊的Visualize All(全部可視化)按鈕,打開如下圖所示的全部可視化窗口。


同時,按下Alt鍵 + Shift鍵,並在上圖所示任選一圖標,在圖標的任意位置單擊,啟動保存文件對話框。輸入名稱為test,選擇文件類型為jpg(或其他格式),保存按鈕,就可以保存為圖像文件了,如下圖所示。(比如,我這里選擇用最左上方的那一幅圖)

還可以定制圖像文件的長、寬尺寸,單位為像素。選中use custom dimensions(使用自定義尺寸)復選框就可以設置圖像尺寸,如果選擇keep aspect ratio(保持寬高比)復選框,則在修改圖像長(或寬)的同時,會按比例自動縮放寬(或長)。


成功!
二、預處理
預處理面板可以從文件、URL或數據庫中加載數據集,並且根據應用要求或領域知識過濾掉不需要進行處理或不符合要求的數據。
1、加載數據
預處理標簽頁的前四個按鈕可以讓用戶將數據加載到Weka系統。
Open file按鈕啟動打開文件對話框,用戶可以瀏覽本地文件系統,打開本地數據文件;
Open URL按鈕要求 用戶提供一個統一資源定位符地址,Weka使用HTTP協議從網絡位罝下載數據文件;
Open DB按鈕用於從數據庫中讀取數據,支持所有能夠用JDBC驅動程序讀取的數據庫, 使用SQL語句或存儲過程讀取數據集。
請注意,必須根據自己的計算機環境配置,相應修 改weka/experiment/DatabaseUtils.props配置文件后才能訪問數據庫,具體參見下面我寫的這篇博客;
Generate按鈕用於讓用戶使用不同的DataGenerators(數據生成器)以生成人工 數據,適合用於分類功能的人工數據可以由決策列表RDG1、徑向基函數網絡 RandomRBF、貝葉斯網絡BayesNet、LED24等算法產生,人工回歸數據也可以根據數學表達式生成,用於聚類的人工數據可以使用現成的生成算法產生。

如果使用Open file按鈕,可以讀取多種數據格式的文件,包括Weka ARFF格式、 C4.5數據格式、CSV格式、JSON實例文件格式、libsvm數據文件格式、Matlib ASCII文件格式、svm輕量級數據文件格式、XRFF格式,以及序列化實例的格式。
其中,ARFF 格式文件的后綴為.arff, C4.5文件的后綴為.data或.names, CSV格式文件的后綴為.csv, JSON實例文件格式的后綴為json,libsvm數據文件格式的后綴為.libsvm, Matlib ASCII文件格式的后綴為.m,svm輕量級數據文件格式的后綴為.dat,XRFF格式的后綴為.xrff, 序列化實例對象文件的后綴為.bsi。
注意到有的格式后綴還加上.gz,這是對應文件的壓縮 形式。

另外,使用Save(保存)按鈕,可以將已加載的數據保存為Weka支持的所有文件格式。該功能特別適合轉換文件格式,以及學習Weka文件格式的細節。

由於有多種數據格式,為了從不同種類的數據源中導入數據,Weka提供實用工具類進行轉換,這種工具稱為轉換器(converters),位於weka.core.converters包中。按照功能的不同,轉換器分為加載器和保存器,前者的Java類名以Loader結束,后者以Saver結束。
加載數據后,預處理面板會在Currem relation(當前關系)子面板顯示當前數據集的一些總結信息。Relation(關系)欄顯示關系名稱,該名稱由加載的文件給定,也可通過過濾器來更改名稱;Attributes(屬性)欄顯示數據集中的屬性(或特征)個數:Instances(實例)枚顯示數 據集中的實例(或數據點/記錄)個數:Sum of weights(權重和)欄顯示全部實例的權重之和。 例如,當加載iris數據姐后,當前關系子而板顯示關系名稱為iris,屬性個數為5,實例個數為150,權重和為150,當前關系子面板如下圖所示。

Weka根據文件后綴調用不同的轉換器來加載數據集。如果Weka無法加載數據,就會嘗試以ARFF格式解釋數據,如果失敗,就會彈出如下圖的提示對話框,提示 Weka無法自動決定使用哪一個文件加載器,需要用戶自己來選擇。

加載數據失敗圖
然后,單擊上圖中的“確定”按鈕后,會彈出如下圖所示的通用對象編輯器對話框, 讓用戶選定能打幵數據文件的對應轉換器。默認轉換器為CSVLoader,該轉換器專門用於加載后綴為.csv的文件。如果用戶己經確定數據文件格式是CSV格式,那么可以輸入曰期格式、字段分割符等信息。如果對窗口里的各項輸入不了解,可以單擊More按鈕査看使用說明。

圖 通用對象編輯器
如果用戶已經知道數據文件格式不是CSV格式,可以單擊通用對象編輯器對話框上部的Choose按鈕選擇其他的轉換器,如下圖所示。

圖 選擇轉換器圖
其中,第一個選項是ArffLoader,選擇該選項並成功的可能性很小,因為默認使用它來加載數據集,沒有成功才會彈出加載數據失敗的窗口。
第二個選項是C45Loader,C4.5 格式的數據集對應兩種文件,一種文件提供字段名,另一種文件提供實際數據。
第三個選項是默認的CSVLoader,這足一種以逗號分隔各屬性的文件格式,前面已經介紹了這種數據轉換器。
第四個選項DatabascLoader是從數據庫,而不是文件中讀取數據集。然而,使用SQLViewer工具來訪問數據庫,是吏為人性化而方便的方案。 SerializedInstancesLoader選項用於重新加載以前作為Java序列化對象保存的數據集。任何 Java對象都可以采用這種格式予以保存並重新加載。由於序列化對象本身就是Java格式,使用它可能比加載ARFF文件的速度更快,這是因為加載ARFF文件時必須對其進行分析和檢查,從而花費更多的時間。如果需要多次加載大數據集時,很值得以這種數據格式進行保存。
值得一提的是,TextDirectoryLoader加載器的功能是導入一個目錄,目錄中包含若干以文本挖掘為目的的純文本文件。導入目錄應該有特定的結構——一組子目錄,每個子目錄包含一個或多個擴展名為.txt的文本文件,每個文本文件都會成為數據集中的一個實例,其中,一個字符串型屬性保存該文件的內容,一個標稱型的類別屬性保存文件所在的子目錄名稱。該數據集可以通過使用StringToWordVector過濾器進一步加工為詞典,為后面的文本挖掘做准備。
2、屬性處理
在當前關系子面板的下方,可以看到Attributes(屬性)子面板,該子面板上部有四個按鈕,中部是一個三列多行的表哥,下部有一個Remove按鈕。如下圖所示。

表格有三列表頭,包括No.(序號)列、復選框列和Name(名字)列。
其中,序號列用於標識指定數據集中的屬性序號;
復選框列用於選擇厲性,並對其進行操作;
名字列顯示屬性名稱,與數據文件的屬性聲明一致。
表格里每行表示一個屬性,單擊某一行的復選框選中該行,再單擊一次則取消選中。 表格上面的四個按鈕也可以用於改變選中狀態;ALL按鈕使全部復選框都選中,即選中全部屬性;None按鈕使全部復選框都取消選中,即不選中任何屬性; Invert按鈕反選,即取消選中己經選中的復選框,選中沒有選中的復選框;Pattern按鈕使用Perl5正則表達式指 定要選中的屬性,例如,.*_id選擇滿足屬性名稱以_id結束的全部屈性。
一旦己經選中所需的屬性,就可以單擊屬性列表下面的Remove按鈕將它們去除,本功能用於去除無關屬性。請注意,本功能僅去除內存中的數據集,不會更改數據文件的內容。另外,屬性去除之后還可以單擊Undo按鈕進行撤消,Undo按鈕位於預處理面板的上部。
如果選中某一個屬性,例如,下圖選中名稱為sepallength的屈性,該行的顏色就會變為藍色,並且窗口右邊的Selected attribute(己選擇屬性)子面板將顯示選中屬性的一些信息。
iris.arff里的,以下是選擇數值型屬性的統計顯示結果。

weather.nominal.arff里的,以下是選擇標稱型屬性的統計顯示結果。

其中,Name欄顯示屬性的名稱,與屬性列表中選中屬性的名稱相同;
Type欄顯示屬性的類型,最常見的就是標稱型和數值型;
Missing(缺失)欄顯示數據集中該屬性不存在或未指定的實例的數量及百分比;
Distinct(不同)欄顯示該屬性取不同值的數量;
Unique(唯一)欄顯示沒有任何其他實例擁有該屬性值的數量及百分比。
已選擇屬性子面板的下部有一個統計表格,顯示該屬性值的更多信息,根據屬性類型的不同,表格會有所差別。
由上面的iris.arff里的,以下是選擇數值型屬性的統計顯示結果 和 weather.nominal.arff里的,以下是選擇標稱型屬性的統計顯示結果。得出,
如果屬性是數值類型,表格顯示數據分布的四種統計描述---Minimum(最小值)、Maximum(最大值)、Mean(平均值)和StdDev(Standard Deviation,標准偏差);
如果屬性是標稱型,列表顯示包含屬性的全部可能的No.(編號)、Label(標簽)表示屬性值名稱、Count(數量)表示擁有該屬性值的實例數量、Weight(權重)表示擁有該屬性值的實例權重。
在統計表格之下會顯示一個彩色直方圖,如圖所示,直方圖之上有一個下拉列表框,用於選擇類別屬性。

3、過濾器
預處理面板允許定義並執行以各種方式轉換數據的過濾器,過濾器也稱為篩選器。在Filter標簽之下有一個Choose(選擇)按鈕,單擊該按鈕可以選擇一個過濾器,如下圖所示,按鈕的右側是過濾器輸入框,用於設置所選擇的過濾器參數。


一旦選定過濾器后,其名稱和參數都會顯示在過濾器輸入框內。在框內單擊會彈出一個通用對象編輯器對話框,如下圖所示。比如我這里選擇Weka下的filters下的unsupervised下的attribute下的Remove



則,得到一個通用對象編輯器對話框用於設置過濾器選項。如果大家用不同的過濾器,則不一樣哈!
好的,About框簡要說明所選擇過濾器的功能;單擊右側的More按鈕,彈出一個顯示更多信息的窗口,顯示該過濾器的簡介和不同選項的功能,如下圖所示。

單擊Capabilities按鈕,彈出一個信息窗口,列出所選擇對象能夠過處理的類別類型和屬性類型,如下圖所示。


該對話框的中部,attributeIndices文本框用於讓用戶輸入屬性的索引(或下標),invertSelection下拉列表框只有ture和false兩個選項,提示是否反選。對話框下端有四個按鈕,前兩個按鈕-----Open按鈕和Save按鈕,用於保存對象選項設置,以備將來使用;Cancel按鈕用於取消所做的修改,回退到原來的狀態;Ok按鈕用於已經正確完成設置后,返回探索者窗口。
用鼠標右擊(或用Alt + Shift + 單擊)過濾器輸入框,就會彈出一個菜單,該帶單有四個選項:Show properties(顯示屬性)、Copy configuration to clipboard(復制設置到剪貼板)、Enter configuration(輸入設置)和Edit configuration(編輯設置)。

如果選擇Show properties,就會彈出一個通用對象編輯器對話框,允許用戶修改設置,其功能與單擊過濾器輸入框一樣,如下所示

如果選擇Copy configuration to clipboard,則將當前的設置字符串復制到剪貼板,以便用於Weka以外的系統中,當用戶設置了很長而復雜的選項設置字符串並且想將來復用時,該功能非常方便,如下所示

如果選擇Enter configuration菜單項,則彈出一個輸入dui對話框,讓用戶直接輸入設置字符串,格式為類名稱后接類能夠支持的選項,如下圖所示。

一旦選擇並配置好一個過濾器之后,就可以將其應用到數據集。單擊位於預處理面板中Filter子面板右端的Apply按鈕應用過濾,預處理面板會顯示轉換后的數據信息。如果對結果不滿意,可以單擊Undo按鈕撤銷轉換,還可以單擊Edit按鈕在數據集編輯器里手動修改數據。如果滿意修改后的結果,可以單擊Preprocess標簽頁右上角的Save按鈕,將當前關系以文件格式進行保存,以供將來使用。
使用直方圖上部的下拉列表框,可以設置類別屬性。根據是否設置類別屬性,有些過濾器的行為會有所不同。特別地,有監督過濾器要求設置類別屬性;一些無監督屬性過濾器會忽略類別屬性,即使已經設置了類別屬性。請注意,如果不想設置類別屬性,可以將類別屬性設為None。

4、過濾器算法介紹
在Weka中實現的過濾算法,這些過濾算法都可以用於探索者、知識流和實驗者界面。
所有的過濾器都是將輸入數據集進行某種程度的轉換,轉換為適合數據挖掘的形式。 選杼某個過濾器之后,過濾器的名字及默認參數會出現在Choose按鈕旁的輸入框內,通過單擊該框可以在通用對象編輯器中設置其屬性。過濾器以及參數都會以命令行的方式顯現在輸入框,仔細觀察和研宄這些過濾器和參數設設置,是學習如何直接使用Weka命令的好方法。
Weka過濾器分為無監督weka過濾器和有監督weka過濾器兩種。過濾器經常應用於訓練集,然后再應用於測試集。如果過濾器是有監督的,例如,使用帶類別值的離散化過濾器是有監督的,如果將訓練得到的良好間隔施加到測試集中,可能會使結果出現偏倚。因此,使用有監督的過濾器時,必須非常小心,以確保評估結果的公平性。然而,由於無須經過訓 練,無監督過濾器就不會出現這個問題。
Weka將無監督和有監督兩種過濾方法分幵處理,每種類型又細分為屬性過濾器和實例過濾器,前者作用於數據集中的屬性,后者作用於數據集中的實例。要了解某個過濾器的更多使用信息,請在Weka探索者中選擇該過濾器,並查看對應的對象編輯器,以了解該過濾器的功能和選項。
Weka實現的過濾器的更詳細介紹請大家在自己機器上逐一去看吧。本博客將按照過濾器的類型和功能順序進行介紹。
因為,Weka將無監督和有監督兩種過濾方法分幵處理,每種類型又細分為屬性過濾器和實例過濾器,前者作用於數據集中的屬性,后者作用於數據集中的實例!!!
無監督屬性過濾器
- 1) 添加和刪除屬性
- 2) 改變值
- 3) 轉換
- 4) 字符串轉換
- 5) 時間序列
- 6) 隨機化
無監督實例過濾器
- 1) 隨機化和子抽樣
- 2) 稀疏實例
有監督屬性過濾器
- Discretize過濾器
- NominalToBinary過濾器
- ClassOrder過濾器
- AttributeSelection過濾器
- AddClassification過濾器
- PartitionMembership過濾器
有監督實例過濾器
Weka提供四個有監督的實例過濾器。
- ClassBalancer過濾器調整數據集中的實例,使得每個類別都有相同的總權重。所有實例的權重總和將維持不變。
- Resample過濾器與同名的無監督實例過濾器類似,但它保持在子樣本的類別分布。另外,它可以配置是否使用均勻的分類偏倚,抽樣可以設置為有放回(默認)或無放回模式。
- SpreadSubsample過濾器也產生一個隨機子樣本,但可以控制最稀少和最常見的類別之間的頻率差異。例如,可以指定至多2∶1類別頻率差異。也可以通過明確指定某個類別的最大計數值,來限制實例的數量。
- 與無監督的實例過濾器RemoveFolds相似,StratifiedRemoveFolds過濾器為數據集輸出指定交叉驗證的折,不同之處在於此時的折是分層的
1.無監督屬性過濾器
1)添加和刪除屬性
Add過濾器在一個給定的位置插入一個屬性,對於所有實例該屬性值聲明為缺失。使用通用對象編輯器來指定屬性名稱,指定的屬性名稱會出現在屬性列表中,標稱屬性還可以指定可能值:日期屬性還可以指定日期格式。Copy過濾器復制現有屬性,這樣就可以在實驗時保護這些屬性,以免屬性值為過濾器所覆蓋。使用表達式可以一起復制多個屬性, 例如,“1-3”復制前三個屬性,“first-3,5,9-last”復制屬性“1、2、3、5、9、10、11、 12、…”。選擇可以進行反轉,即反選,反選選中除了選定屬性以外的所有屬性。很多過濾器都擁有表達式和反選功能。
AddID過濾器在用戶指定索引的屬性列表中插入一個數字標識符屬性。標識符屬性常用於跟蹤某個實例,尤其是在己經通過某種方式處理過數據集之后,例如,通過其他過濾器進行過轉換,或者隨機化重排實例的順序之后,標識符便於跟蹤。
Remove過濾器刪除數據集中指定范圍的屬性,與之類似的有RemoveType過波器和 RemoveUseless過濾器,RemoveType過濾器刪除指定類型(標稱、數值、字符串、日期、 或關系)的所有屬性,RemoveUseless過濾器刪除常量屬性以及幾乎與所有實例的值都不相 同的標稱屬性。用戶可以通過規定不相同值的數量占全部值總數的百分比來設定可以容忍的變化度,決定是否刪除一個屬性。需要注意的是,如果在預處理面板己經設置了類別屬性(默認情況下,最后一個屬性就是類別屬性),一些無監督屬性過濾器的行為不同。例如,RemoveType和RemoveUseless過濾器都會跳過類別屬性。
InterquartileRange過濾器添加新屬性,以指示實例的值是否可以視為離群值或極端值。離群值和極端值定義為基r屬性值的第25個和第75個四分位數之間的差。如果用戶指定的極端值系數和四分位距的乘積值高於第75個四分位數,或低於第25個四分位數, 該值就標記為極端值(也有超出上述范圍標記為離群值但不是極端值的情況)。可以設置該 過濾器,如果某個實例的任意M性值認為是離群值或極端值,或產生離群極端的指標,可以標記該實例為離群值或極端值0也可以將所有極端值標記為離群值,並輸出與中位數偏 離多少個四分位數的屬性。該過濾器忽略類別屬性。
AddCluster過濾器先將一種聚類算法應用於數據,然后再進行過濾。用戶通過對象編輯器選擇聚類算法,其設置方式與過濾器一樣。AddCluster對象編輯器通過自己界面的 Choose按鈕來選擇聚類器,用戶單擊按鈕右邊方框開啟另外一個對象編輯器窗口,在新窗口中設賈聚類器的參數,必須填寫完整后才能返回AddCluster對象編輯器。一旦用戶選定一個聚類器,AddCluster會為每個實例指定一個簇號,作為實例的新屬性。對象編輯器還允許用戶在聚類時忽略某些屬性,如前面所述的Copy過濾器那樣指定。 ClusterMembership過濾器在過濾器對象編輯器指定所使用的聚類器,生成族隸屬度值,以形成新的屬性。如果設罝了類別屬性,在聚類過程中會忽略。
AddExpression過濾器通過將一個數學函數應用於數值型屬性而生成一個新屬性。表達式可包括屬性引用和常量,四則運算符+、-、*、/和^,函數log、abs、cos、exp、 sqrt、floor、ceil、rint、tan、sin以及左右括號。屬性可通過索引加前綴a確定,例如a7指第七個屬性。表達式范例如下:
a1^2*a5/log(a7*4.0)
MathExpression過濾器與AddExpression過濾器類似,它根據給定的表達式修改數值 屬性,能夠用於多個屬性。該過濾器只是在原地修改現有屬性,並不創建新屬性。正因為 如此,該表達式不能引用其他屬性的值。所有的適用於AddExpression過濾器操作符都可用,還可以求正在處理屬性的最小值、最大值、平均值、和、平方和,以及標准偏差。此 外,可以使用的包含運算符和函數的簡if-then-else的表達式。
NumericTransfomi過濾器通過對選中的數值屬性調用Java函數,可以執行任意的轉換。該函數可以接受任意double數值作為參數,返回值double類型。例如, java.lang.Math包的sqrt()函數就符合這一標准。 NumericTransform過濾器有一個參數是實現該函數Java類的全限定名稱,還有一個參數是轉換方法的名稱。
Normalize過濾器將數據集中的全部數值屬性規范化為[0,1]區間。規范化值可以采用用戶提供的常數進一步進行縮放和轉換。Center和Standardize過濾器能將數值屬性轉換為具有零均值,后者還能轉換為具有單位方差的數值屬性。如果設罝了類別屬性,上述三個過濾器都會跳過,不對類別屬性進行處理。 RandomSubset過濾器隨機選擇屬性的一個子集, 並包括在輸出中。可以用絕對數值或百分比指定抽取的范圍,輸出的新數據集總是把類別屬性作為最后一個屬性。
ParUtionedMultiFilter過濾器是一種特殊的過濾器,在輸入數據集中一組對應的順范圍內應用一組過濾器。只允許使用能操作屬性的過濾器,用戶提供和配罝每個過濾器,定義過濾器工作的屬性范圍。removeUnused選項可以刪除不在任何范圍內屬性。將各個過濾器的輸出組裝成一個新的數據集。Reorder過濾器改變數據中屬性的順序,通過提供屬性索引列表,指定新順序。另外,通過省略或復制屬性索引,可以刪除屬性或添加多個副本。
2)改變值
SwapVaktes過濾器交換同一個標稱屬性的兩個值的位置。值的順序不影響學習,但如 果選擇了類別屬性,順序的改變會影響到混淆矩陣的布局。 MergeTwoVlues過濾器將一 個標稱屬性的兩個值合並為一個單獨的類別,新值的名稱是原有兩個值的字符串連接,每 —個原有值的每次出現都更換為新值,新值的索引比原有值的索引小。例如,如果合並天 氣數據集中outlook屬性的前兩個值,其中有五個sunny、四個overcast、五個rainy實例, 新的outlook屈性就包含sunny_overcast和rainy值,將有九個sunny_overcast實例和原有 的五個rainy實例。
處理缺失值的一個方法是在實施學習方案前,全局替換缺失值。ReplaceMissingValues 過濾器用均值取代每個數值厲性的缺失值,用出現最多的眾數取代標稱屬性的缺失值。如果設置了類別屬性,默認不替換該屬性的缺失值,但可以使用ignoreClass選項進行修改。
NumericCleaner過濾器用默認值取代數值屬性中值太小,或太大,或過於接近某個特定值。也可以為每一種情況指定不同的默認值,供選擇情況包括的認定為太大或太小的閾值,以及過於接近定義容差值(tolerance value)。
如果屬性標簽缺失,可以使用AddValues過濾器為該屬性添加給定標簽列表。標簽能以升序的方式進行排序。如果沒有提供標簽,則只能選擇排序功能。
AddValues過濾器對照用戶提供的列表,並在標稱屬性中添加其中不存在的值,可以 選擇對標簽進行排序。ClassAssigner過濾器用於設置或取消數據集的類別屬性。用戶提供 新的類別屬性的索引,索引為0值則取消當前類別屬性。
3)轉換
許多過濾器將屬性從一種形式轉換為另一種形式。Discretize過濾器使用等寬或等頻分箱將指定范圍的數值屬性離敗化。對於等寬分箱方法,可以指定箱數,或使用留一法交叉驗證自動選擇使似然值最大化。也可以創建多個二元屬性,替換一個多元屬性。對於等頻離散化,可以改變每個分隔期望的實例數置。PKIDiscretize過濾器使用等頻分箱離散化數 值屬性,箱的數目設置為等於非缺失值數量的平方根。默認情況下,上述兩個過濾器都跳過類別屬性。
Makelndicator過濾器將標稱屬性轉換為二元指示符屬性,可以用於將多個類別的數據集轉換成多個兩個類別的數據集。它用二元屬性替換所選擇的標稱屬性,其中,如果某個特定的原始值存在,該實例的值為1,否則為0。新厲性默認聲明為數值型,但如果需要,也可以聲明為標稱型。
對於一些學習方案,如支持向量機,多元標稱屬性必須被轉換成二元屬性。 NominalToBinary過濾器能將數據集中的所有指定的多元標稱屬性轉換為二元屬性,使用 一種簡單的“每值一個”(one-per-value)編碼,將每個屬性替換為k個二元屬性的k個值。 默認情況下,新屬性將是數值型,己經是二元屬性的將保持不變。NumericToBinary過濾器將除了類別屬性外的所有數值屬性轉換成標稱二元屬性。如果數值屬性的值恰好為0, 新屬性值也為0 , 如果屬性值缺失,新屬性值也缺失,否則,新屬性的值將為1。上述過濾器都跳過類別屬性。 NumericToNominal過濾器通過簡單地増加每一個不同數值到標稱值列表,將數值屬性轉換為標稱誠性。該過濾器在導入“.csv”文件之后非常有用,Weka的 CSV導入機制對所有的可解析為數字的數據列都相應創建為數值型屬性,但有時將整型屬 性的值解釋為離散的標稱型有可能更為恰當。
FirstOrder過濾器對一定范圍的數值屬性應用一階差分算子。算法為:將N個數值型 屬性替換為N-1個數值型屬性,其值是原來實例中連續性值之差,即新屬性值等於后一個屬性值減去前一個屬性值。例如,如果原來的屬性值分別為3、2、1,則新的屬性值將是-1、-1。
KernelFilter過濾器將數據轉換為核矩陣。它輸出一個新數據集,包含的實例數量和原 來的一樣,新數據集的每個值都是用核函數評估一對原始實例的結果。默認情況下,預處理使用Center過濾器,將所有的值都轉換為將中心平移至0,盡管沒有重新縮放為單位方差。然而,用戶也可以指定用不同的過濾器。
PrincipalComponents過濾器在數據集上進行主成分轉換。將多元標稱屬性轉換為二元屬性,用均值替換缺失值,默認將數據標准化。主成分數量通常根據用戶指定的捜蓋比例的方差確定,俏也可以明確指定主成分數量。
4) 字符串轉換
字符串屬性值的數目不定。StringToNominal過濾器用一組值將其轉換為標稱型。用戶要確保所有要出現的字符串值都會在第一批數據中出現。NominalToString過濾器轉換的方向相反。
StringToWordVector過濾器將字符串屬性值轉換生成表示單詞出現頻率的數值屬性。 單詞集合就是新的屬性集,由字符串屬性值的完整集合確定。新屬性可以采用用戶指定的前綴來命名,這樣通過名稱容易區分來源不同的字符串屬性。
ChangeDateFormat過濾器更改用於解析日期屬性的格式化字符串,可以指定Java的SimpleDateFormat類所支持的任意格式。
5) 時間序列
Weka提供兩種處理時間序列的過濾器。TimeSeriesTranslate過濾器將當前實例的屬性值替換為以前(或未來)的實例的等效屬性值。TimeSeriesDelta過濾器將當前實例的屬性值替換為以前(或未來)的實例的等效屬性值與當前值之間的差值。對於時移差值未知的實例,要么刪除實例,要么使用缺失值。
6) 隨機化
—些屬性過濾器有意降低數據的質螢。AddNoise過濾器按照指定的一定比例更改標稱屬性的值。可以保留缺失值,也可以讓缺失值和其他值一起變化。Obfuscate過濾器對關系屬性、全部屬性名稱,以及所有標稱型和字符串型屬性值進行重命名,對數據集進行模糊處理,目的主要是為了交換敏感數據集。RandomProjection過濾器通過使用列為單位長度的隨機矩陣,將數據投影到一個低維子空間,以此來降低數據維數。投影不包括類別屬性。
2. 無監督實例過濾器
1)隨機化和子采樣
Randomize過濾器用於將數據集中實例順序進行隨機重排。產生的數據子集的方式有很多種。Resample過濾器產生一個有放回或無放回數據集的隨機子樣本。RemoveFolds過濾器將數據集分割為給定的交叉驗證折數,並指定輸出第幾折。如果提供一個隨機數種子,在提取子集前,先對數據重新排序。 ReservoirSample過濾器使用水庫抽樣算法從數據集中抽取一個隨機樣本(無放回)。當在知識流界面或命令行界面使用時,可以增量讀取數據集,因此可以抽樣超出主內存容量的數據集。
RemovePercentage過濾器刪除數據集中的給定畝分比的實例。RemoveRange過濾器刪除數據集里給定范圍的實例。RemoveWithValues過濾器刪除符合條件的實例,如標稱屬性具有一定值的,或者數值屬性人於或小於特定閾值的。默認情況下,會刪除所有滿足條件 的實例。也可以反向匹配,保留所有滿足條件的實例,刪除其余實例。
RemoveFrequentValues過濾器用於刪除那些滿足某個標稱型屬性值最經常或最不經常使用的對應的實例。用戶可以指定頻度多大或多小的具體值。
SubsetByExpression過濾器選擇那些滿足用戶提供的邏輯表達式的所有實例。表達式可以是數學運算符和函數,如那塑可用於AddExpression和MathExpression過濾器的運算 符和函數,以及應用於屬性值的邏輯運算符(與或非)。例如以下表達式:
(CLASS is 'mammal') and (ATT14 > 2)
選擇那些CLASS屬性值為mammal並且第14個屬性的值大於2的實例。
通過將分類方法應用到數據集,然后使用RemoveMisdassified過濾器刪除錯誤分類的實例,可以刪除離群值。通常上述過程需要重復多遍,直到充分清洗數據,也可以指定最 大的迭代次數。除了評估訓練數據,還可以使用交叉驗證,對數值類別也可以指定的錯誤閾值。
2)稀疏實例
NonSparseToSparse過濾器將全部輸入實例轉換為稀疏格式。SparseToNonSparsc過濾器將輸入的所有稀疏實例轉換為非稀疏格式。
3. 有監督屬性過濾器
Discretize過濾器將數據集中一定范圍內的數值屈性離散化為標稱屬性,用戶指定屬性的范圍以及強制屬性進行二元離散化。要求類別屬性為標稱屬性,默認的離散化方法楚 Fayyad & Irani的MDL(最小描述長度)判據,也可以使用Kononenko方法。
NominalToBinary過濾器也有一個有監督版本,將全部標稱屬性轉換成二元的數值屬性。在有監督版本中,類別屬性是標稱型還是數值型,決定如何進行轉換。如果是標稱型,使用每個值一個屬性的方法,將k個值的屬性轉換成k個二元屬性。如果是數值型, 考慮類別平均值與每個屬性值的關聯,創建k-1個新的二元屬性。兩種情況都不改變類別 本身。
ClassOrder過濾器更改類別順序。用戶指定新順序是否按隨機順序,或按類別頻率進行升序或降序排列。該過濾器不能與FilteredClassifier元學習方案聯合使用。 AttributeSelection過濾器用於自動屬性選擇,並提供與探索者界面中Select attributes子面板相同的功能。
AddClassification過濾器使用指定分類器為數據集添加分類、分類分布和錯誤標志。 分類器可以通過對數據木身進行訓練而得到,也可以通過序列化模型得到。
4.有監督實例過濾器
Weka提供三個有監督的實例過濾器。
Resample過濾器與同名的無監督實例過濾器類似,但它保持在子樣本的類別分布。另外,它可以配罝是否使用均勻的分類偏倚,抽樣可以設置為有放回(默認)或無放回模式。
SpreadSubsample過濾器也產生一個隨機子樣本,但時以控制最稀少和最常見的類別之 間的頻率差異。例如,可以指定至多2: 1類別頻率差異,也可以通過明確指定某個類別 的敁大計數值,限制實例的數量。
與無監督的實例過濾器RemoveFolds相似,StratifiedRemoveFolds過濾器為數據集輸出指定交叉驗證的折,不同之處在於本次的折是分層的。
5、手把手教你用Weka里的過濾器
- 1. 使用數據集編輯器
- 2. 刪除屬性
- 3. 添加屬性
- 4. 離散化
1.使用數據集編輯器
Weka可以查看和編輯整個數據集。
首先加載weather.nominal.arff文件,單擊預處理而板上端的Edit按鈕,彈出一個名稱 為Viewer(閱讀器)的對話框,列出全部天氣數據。該窗口以二維表的形式展現數據,用於 查看和編輯整個數據集,如下圖所示。



圖 數據集編輯器對話框
數據表頂部顯示當前數據集的關系名稱。表頭列出數據集各屬性的序號、名稱和數據類型。數據集編輯器的第一列是序號,標識實例的編號。
窗口右下部有三個按鈕,Undo按鈕撤銷所做的修改,不關閉窗口;OK按鈕提交所做的修改,關閉窗口;Cancel按鈕放棄所做的修改,關閉窗口。
2、刪除屬性
Weka使用過濾器來系統性地更改數據集,因此過濾器屬於預處理工具。
假如要求去除weather.nominal.arff數據集的第二個屬性,即temperature屬性。刪除屬性是具體步驟如下。
首先,使用探索者界面加載weather.nominal.arff文件。在預處理面板中單擊Choose按鈕,打開一個分層菜單,如下圖所示。

圖 過濾器分層菜單圖
適合本例要求的過濾器稱為Remove,全稱是weka.filters.unsupervised.attribme.Remove。從名稱上可以看出,過濾器組織成層次結構,根為weka,往下繼續分為 imsupervised(無監督)和suervised(有監督)兩種類型,無監督要求設置類別屬性,有監督不要求設置類別屬性。繼續往下分為attribute(屬性)和instance(實例)兩種類型,前者主要處理有關屬性的過濾,后者處理有關實例的過濾。
在分層菜單中按照weka\ filters \ unsupervised \attribute路徑,找到Remove條目,單擊選擇該過濾器。這時,Choose按鈕右邊的文本輸入框應該顯示Remove字符串。單擊該文本框,打開通用對象編輯器對話框以設置參數。

在attributelndices文本框內輸入“2”,如下圖所示。單擊OK按鈕關閉通用對象編輯器對話框。

這時,Choose按鈕右邊的文本框應該顯示“Remove -R 2”,含義是從數據集中去除第二個屬性。單擊該文本框右邊的Applly按鈕使過濾器生效據。

應該看到原來的5個屬性現在變為4個,temperature屬性己經被去除。要特別說明的是,本操作只影響內存中的數據,不會影響數據集文件中的內容。

當然,變更后的數據集也可以通過單擊Save 按鈕並輸入文件名另存為ARFF格式或其他格式的新文件。如果要撤消過濾操作,請單擊 Undo按鈕,撤消操作也只會影響內存中的數。

如果僅需要去除屬性,還有更簡單並且效果一樣的方法。只要在Attributes子面板內選擇要去除的屬性,然后單擊屬性列表下面的Remove按鈕即可。

3、添加屬性
啟動探索者界面並加載weaather.nominal.arff數據集。假如要求在數據集倒數第二個屬性位置添加一個用戶定義的字段,具體操作步驟如下:
在預處理面板上單擊Choose按鈕,選擇AddUserFields過濾器。然后單擊Choose按鈕旁的方框,在通用對象編輯器設置AddUserFields過濾器。

然后單擊Choose按鈕旁的方框,在通用對象編輯器中設置AddUserFields過濾器的選項。

單擊New按鈕,然后設置Attribute name(屬性名稱)為mode,設置Attribute type(屬性類型)為nominal,不設置Date format(日期格式)和Attribute value(屬性值)兩個字段,如下圖所示。


單擊OK按鈕結束選項設置,並在預處理面板上單擊Apply按鈕應用過濾器。這時,應該看到Attributes子面板的屬性表格中看到多出來一個mode屬性。


如果單擊Edit按鈕打開viewer窗口,可以看到新增的屬性並沒有值,因此,下一步是添加標稱屬性值。


再次,單擊Choose按鈕,選擇AddValues過濾器,按照下圖所示設置標稱屬性的標簽。



再次單擊Edit按鈕打開Viewer對話框,如下圖所示。可以看到,這次的最后一個屬性已經有了標稱屬性標簽,可以隨意設置一些值,然后單擊OK按鈕關閉對話框。


注意:我們新增屬性的位置,不符合要求的倒數第二個屬性位置。最后一個屬性一般是類別屬性,需要把第五個屬性與第六個屬性對換一下,則,該怎么對換呢?得用到Recorder過濾器,參數為"-R 1,2,3,4,6,5”。





我們只需,輸入1,2,3,4,6,5即可。然后點擊OK
再點擊Apply

再點擊Edit按鈕打開Viewer對話框去看看

4.離散化
如果數據集包含數值屬性,但所的學習方案只能處理標稱型屬性的分類問題,先將數值屬性進行離散化是必要的,這樣就能使學習方案增加處理數值屬性的能力,通常能獲 得較好的效果。
有兩種類型的離散化技術------無監督離散化和有監督離散化,無監督離散化不需要也不關注類別屬性值,有監督離散化在創建間隔時考慮實例的分類屬性值。離散化數值屬性的直觀方法是將值域分隔為多個預先設定的間隔區間。顯然,如果分隔級別過大,將會混淆學習階段可能有用的差別;如果分級算法不妥,則會將很多不同類別的實例混合在一起影響學習。Weka 無監督離散化數值屬性的 Java 類是 weka.filters.unsupervised.attribute.Discretize,它實現了等寬(默認)和等頻兩種離散化方法。
等寬離散化(或稱為等寬分箱)經常造成實例分布不均勻,有的間隔區域內(箱內)包含很多個實例,但有的卻很少甚至沒有。這樣會降低屬性輔助構建較好決策結果的能力。通常也允許不同大小的間隔區域存在,從而使每個區間內的訓練實例數量相等,這樣的效果會好一些,該方法稱為等頻離散化(或稱為等頻分箱),其方法是:根據數軸上實例樣木的分布將屬性區間分隔為預先設定數量的區間。如果觀察結果區間的直方圖,會發現其形狀平直。等頻分箱與朴素貝葉斯學習方案一起應用時效果較好。但是,等頻分箱也沒有注意實例的類別屬性,仍有可能導致不好的區間划分。例如,如果一個區域內的全部實例都屬於—個類別,而下一個區域內除了第一個實例外都屬於前一個類別,其余的實例都屬於另一 個類別,那么,顯然將第一個實例包含到前一個區域更為合理。
無監督離散化
下面以實例說明這兩種方法的差異。首先,在data目錄中查找到玻璃數據集glass.arf文件,並將它加載至探索者界面,在預處理面板中杳看RI屬性直方圖,如下圖所示。


實施無監督離散化過濾器,分別使用等寬和等頻兩種離散化方法,即首先保持Discretize的全部選項默認值不變,然后將useEqualFrequency選項的值更改為True。得到離散化后對應的RI屬性直方圖分別如下圖所示。




以下是等頻離散化后的RI屬性(將useEqualFrequency選項的值更改為True)

以下是等寬離散化后的RI屬性(將useEqualFrequency選項的值更改為true,再次開啟就可以了)


等寬離散化后的RI屬性 等頻離散化后的RI屬性
等寬離散化數值屬性從最小值到最大值之間平均分為十份,因此每一份所包含的實例數量就各不相等;而等頻離散化按數值屬性的大小順序將全部實例平均分為十份,每份所包含是實例數量為21~22。
大家,也許會形成一個錯覺,等頻離散化后形成的直方圖似乎都會等高。但是,如果等頻離散化Ba屬性,再檢查結果,會發現這些直方圖嚴重地偏向一端,也就是根本不等頻。

這是為什么呢?仔細觀察第一個直方圖的標簽,其值為(-inf-0.03】,即區間大於負無窮且小於等於0.03。使用數據集編輯器打開離散化前的原始數據集,單擊第八列表頭,使數據集按照Ba屬性進行排序,可以看到,有176個實例的Ba屬性值都等於0.0。由於這些值都完全相同,沒有辦法將它們分開。這就是為什么,上圖嚴重地偏向一端的根本原因。

總結:一般情況下,等頻離散化后直方圖大致等高。但如果有很多實例的值都完全相同,則等頻離散化也沒法做到“等頻”。
有監督離散化
有監督的離散化竭力去構建一種間隔,雖然各個間隔之間的分類分布各不相同,但間隔內的分布保持一致。Weka有監督的離散化數值屬性的java類的全路徑名稱為weka.filters.supervised.Discretize。首先,定位到data目錄下的鳶尾花數據集,加載iris.arff文件,施加有監督的離散化方案,觀察得到的直方圖如下圖所示。





有監督離散化后的直方圖
那么,上圖中哪一個經過離散化后的屬性最具有預測能力?
顯然,只有petallength(花瓣長)和petalwidth(花瓣寬)最具競爭力,因為它們的每種分類都已經接近為同一種顏色。
再經仔細對比發現在前者中,有1個virginica實例錯分到versicolor中,有6個實例versicolor錯分到virginica中,因此共有7個錯分的實例;
而后者,只有5個virginica實例錯分到versicolor中,有1個versicolor實例錯分到virginica 中,因此共有6個錯分的實例。
從而得出結論:離散化后的petalwidth屬性最具有預測能力。
通常將離散化后的屬性編碼為標稱屬性,每一個范圍給定一個值。然而,因為范圍是 有序的,離散化后的屬性實際上是一個有序標量。
除了創建多元屬性外,有監督和無監督兩種離散化過濾器都能創建二元屬性,只要將選項makeBinary設置為True即可。下圖就是有監督的離散化方案創建二元屬性后得到。




有監督二元離散化后的直方圖
分類
分類就是得到一個分類函數或分類模型(即分類器),通過分類器將未知類別的數據對象映射到某一個給定的類別。
數據分類可以分為兩步。第一步建立模型,通過分析屬性描述的數據集,來建立反映其特性的模型。該步驟也稱為有監督的學習,基於訓練集而導出模型,訓練集是已知類別標簽的數據對象。第二步使用模型對數據對象進行分類。首先評估模型的分類准確度或其他指標,如果可以接受,才使用它來對未知類別標簽的對象進行分類。
預測的目的是從歷史數據記錄中自動推導出對給定數據的推廣描述,從而能夠對事先未知類別的數據進行預測。分類和回歸是兩類主要的預測問題,分類是預測離散的值,回歸的預測連續值。
Weka提供分類面板來構建分類器。如下圖所示。

在分類面板的最上部是Classifier(分類器)子面板,子面板內有一個Choose按鈕和一個文本框。按鈕用於選擇Weka提供的分類器;文本框用於顯示當前選擇的分類器的名稱和選項。單擊文本框會彈出一個通用對象編輯器對話框,與過濾器的對象編輯器對話框的功 能一樣,可以用來設置當前分類器的選項。右擊(或用Alt + ShifH單擊)分類器文本輸入框,就會彈出一個菜單,選擇菜單項可以讓用戶修改設置,或將當前設置的字符串復制到剪貼板,或直接輸入設置字符串,使用方法與過濾器的相似。


在分類面板的左部有Test options(測試選項)子面板。該子面板是為了設置測試模式, 將設置的選項應用到當前選擇的分類器中。測試模式分為以下四種。

(1) Use training set(使用訓練集)。直接將訓練集實例用於測試,評估分類器預測類別的性能。
(2) Supplied test set(提供測試集)。從一個文件中加載一組實例,評估分類器預測類別的性能。單擊Set按鈕會彈出一個對話框,允許用戶選擇進行測試的文件。
(3) Cross-validation(交叉驗證)。通過交叉驗證評價分類器,在提示為Folds的文本框中輸入交叉驗證的折數。
(4) Percentage split(按比例分割)。在數據集中,取出特定百分比的數據用於訓練,其 余的數據用於測試,評價分類器預測分類的性能。取出的數據量取決於用戶在“%”文本 框中輸入的值。
無論使用哪種測試模式作為評估方法,輸出模型始終從全部訓練數據構建而得。更多的測試選項可以通過單擊More options按鈕進行設置,如下圖所示。

圖 更多測試選項
更多的測試選項解釋如下
(1) Output model(輸出模型)。輸出通過完整訓練集得到的分類模型,以便能夠瀏覽、 可視化等。默認選擇此選項。
(2) Output per-class stats(輸出每個類別的統計信息)。輸出每個分類的査准率/查全率以 及True/False的統計信息。默認選擇此選項。
(3) Output entropy evaluation measures(輸出熵評估度量)。輸出中包括熵評估度量。默認不選擇此選項。
(4) Output confusion matrix(輸出混渚矩陣)。輸出中包含分類器預測得到的混淆矩陣。 各默認選擇此選項。
(5) Store predictions for visualization(存儲預測以便可視化)。保存分類器的預測結果,以便用於可視化。默認選擇此選項。
(6) Output predictions(輸出預測)。輸出預測的評估數據。請注意,在交叉驗證的情況 下,實例序號不對應於其在數據集中的位置。
(7) Output additional attributes(輸出額外的屬性)。如果伴隨預測還需要輸出額外的屬性 (如,跟蹤錯誤分類的1D屬性),可以在這里指定該屬性的索引。Weka通常支持指定范 圍,first和last也是有效的索引,例如:“first-3,6,8,12-last”。
(8) Cost-sensitive evaluation(成本敏感評估成本矩陣用於評估錯誤率。Set按鈕允許 用戶指定所使用的成本矩陣。
(9) Random seed for XVal / % Split(XVal / %分割的隨機種子)。為了評估目的而划分數 據之前,指定將數據進行隨機化處理的隨機種子。
(10) Preserve order for % Split(保持順序按百分比分割)。將數據划分為訓練集和測試集 之前禁止隨機化,即保持原來的順序。
(11) Output source code(輸出源代碼)。如果分類器能夠輸出所構建模型的Java源代 碼,可以在這里指定類名D可以在Classifier output(分類器輸出)區域打印代碼。
在Weka中,進行訓練后的分類器用於預測某個單一的類別屬性,這就是預測的目標。一些分類器只能學習標稱型類別的分類(分類問題),一些分類器只能學習數值型類別的分類(回歸問題),還有一些分類器能學習兩者。
默認情況下,數據集的最后一個屬性是類別屬性。如果想訓練分類器來預測其他屬性,單擊Test options子面板下面的下拉列表框,選擇其他屬性作為類別屬性。
2、分類器訓練
設置好分類器、測試選項和分類屬性后,單擊Start按鈕就啟動學習過程。在Weka忙於訓練分類器的同時,小鳥會站起來左右走動。用戶隨時可以單擊Stop按鈕終止訓練過程。
訓練結束后,右側的分類器輸出區域會顯示訓練和測試結果的文字描述,如下圖所示。同時,在Result list(結果列表)中會出現一個新條目,后文再談結果列表,先仔細分析分類器輸出的文字描述。


3、分類器輸出
拖動Classifier output區域右側的滾動條,可以瀏覽全部結果文本。在文本區域中按住Alt鍵和Shift鍵的同時單擊,會彈出一個對話框,可以以各種不同的格式(目前支持BMP、JPEG、PNG和EPS)保存所顯示的輸出。當然,也可以調整探索者界面的大小,得到更大的顯示面積。
輸出分為以下幾個部分。
(1) Run information(運行信息):提供處理過程所涉及的信息列表,如學習方案及選項(Scheme)、關系名(Relation)、實例(Instances)、屬性(Attributes)和測試模式(Test mode)。
(2) Classifier model(full training set)(分類器模型(完整的訓練集)):完整訓練數據生成的分類模型的文字表述。本例選擇J48決策樹構建分類模型,因此以文字方式描述決策樹。如果選擇其他分類器模型,則顯示相應的文字表述。
(3) 根據所選擇的測試模式,顯示不同文字。例如,如果選擇十折交叉驗證,顯示Stratified cross-validation;如果選擇使用訓練集,顯示Classifier model (full training set),等等。由於評估內容較多,將結果分解顯示如下。
①Summary(總結)。一個統計列表,根據所選抒的測試模式,總結分類器在預測實例真實分類的准確度,其中:
• Comictly Classified Instances(正確分類的實例):顯示正確分類的實例的絕對數里和百分比。
• Incorrectly Classified Instances(錯誤分類的實例):顯示錯誤分類的實例的絕對數和百分比。
• Kappa statistic(kappa 統計):顯示示kappa 統計量,[0,1]范圍的小數。kappa 統計指標用於評判分類器的分類結果與隨機分類的差異度。k=1表明分類器完全與隨機分類相異,K=0表明分類器與隨機分類相同(即分類器沒有效果),K= -1表明分類 器比隨機分類還要差。一般來說,Kappa統汁指標的結果是與分類器的AUC指 標以及准確率成正相關的,所以該伉越接近1越好。
• Mean absolute errror(平均絕對誤差):品示平均絕對誤差,[0,1]范圍的小數。
• Root mean squared error(均方根設差}:顯示均方根誤差,[0,1]范圍的小數。
• Relative absolute enor(相對絕對誤差):顯示相對絕對誤整,百分數。
• Root relative squared error(相對均方根誤差):顯示相對均方根誤差,百分數。
• Coverage of cases (0.95 levelX)(案例的覆蓋度):顯示案例的覆蓋度,該值是分類器使用分類規則對全部實例的薄蓋度,百分數越高說明該規則越有效。
• Mean rel. region size (0.95 level)(平均相對區域大小):顯示平均相對區域大小, 百分數。
• Total Number of Instances(實例總數):品示實例總數。
②Dctai丨ed Accuracy By Class(按類別的詳細准確性)。按每個類別分解的更詳細的分類器的預測精確度。結果以表格形式輸出,其中,表格列的含義如下,
• TP Rate(離陽性率):顯示真陽性率,[0J]范IS的小數。
• FP Rate(假陽性率):51示假陽性率.隊丨]范圍的小數。另外,常使用TN相FN 分別代衣具陰性率和假陰性率。



4、分類算法介紹
分類和回歸是數據挖掘和機器學習中極為重要的技術,其中分類是指利用已知的觀測數據構建一個分類模型,常常稱為分類器,來預測未知類別的對象的所屬類別。分類和回歸的不同點在於,分類的預測輸出是離散型類別值,而回歸的預測輸出是連續型數值。因此,Weka將分類和回歸都歸為同一類算法。
本博客介紹常用的分類算法,包括線性回歸、決策樹、決策規則、支持向量機,將貝葉斯網絡和神經網絡放到后面博客書寫。由於Weka實現的分類算法數量眾多,特點各異,無法在較短篇幅中講清楚,大家可根據自己的需要查閱附錄介紹和相關資料。
1. 線形回歸
線性回歸(linear regression)是利用數理統計中的回歸分析,來確定多個變量之間相互依賴的定量關系的一種統計分析方法,應用十分廣泛。具體來說,它利用稱為線性回歸方程的最小二乘函數對一個或多個自變量(常表示為x)和一個標量型因變量(常表示為y)之間的關系進行建模,這種函數是一個或多個稱為回歸系數的模型參數的線性組合。只涉及一個自變量的稱為簡單線性回歸,涉及多個自變量的稱為多元線性回歸。
線性回歸的主要目標是用於預測。線性回歸使用觀測數據集的y值和x值來擬合一個預測模型,構建這樣一個模型后,如果給出一個新的x值,但沒有給出對應的y值,這時就可以用預測模型來預測y值。


2. 決策樹
決策樹(decision tree)是一種預測模型,它包括決策節點、分支和葉節點三個部分。其中,決策節點代表一個測試,通常代表待分類樣本的某個屬性,在該屬性上的不同測試結果代表一個分支,分支表示某個決策節點的不同取值。每個葉節點存放某個類別標簽,表示一種可能的分類結果,括號內的數字表示到達該葉節點的實例數。
使用訓練集用決策樹算法進行訓練,經過訓練之后,學習方案只需要保存類似於如下圖的樹形結構,而不像最近鄰學習等消極學習算法那樣,不保存模型,只有在需要分類時才去查找與測試樣本最為相近的訓練樣本。決策樹對未知樣本的分類過程是,自決策樹根節點開始,自上向下沿某個分支向下搜索,直到到達葉節點,葉節點的類別標簽就是該未知樣本的類別。
對於下圖所示的決策樹,假如有一個新的未知樣本,屬性值如下:





3. 基於規則的分類器


4. 基於實例的算法
基於決策樹的分類框架包括兩個步驟:第一步是歸納步,由訓練數據構建分類模型;第二步是演繹步,將模型應用於測試樣本。前文所述的決策樹和基於規則的分類器都是先對訓練數據進行學習,得到分類模型,然后對未知數據進行分類,這類方法通常稱為積極學習器(eager learner)。與之相反的策略是推遲對訓練數據的建模,直到需要對未知樣本進行分類時才進行建模,采用這種策略的分類器稱為消極學習器(lazy learner)。消極學習器的典型代表是最近鄰方法,其途徑是找出與測試樣本相對接近的所有訓練樣本,這些訓練樣本稱為最近鄰(Nearest Neighbor,NN),然后使用最近鄰的類別標簽來確定測試樣本的類別。


5. 支持向量機
支持向量機(Support Vector Machine,SVM)分類器是一種有監督學習的方法,廣泛地應用於統計分類以及回歸分析。SVM的特點是能夠同時最小化經驗誤差與最大化幾何邊緣。因此,支持向量機也被稱為最大邊緣分類器。
支持向量機技術具有堅實的統計學理論基礎,並在實踐上有諸多成功示例。SVM可以很好地用於高維數據,避免維數災難。它有一個獨特的特點,就是使用訓練實例的一個子集來表示決策邊界,該子集稱為支持向量,這就是其名稱的來歷。



6. 集成學習
集成學習(ensemble learning)就是通過聚集多個分類器的預測結果來提高分類准確率。集成方法由訓練數據構建一組基分類器(base classifier),然后通過每個基分類器的預測的投票來進行分類。一般來說,集成分類器的性能要好於任意的單個分類器,因為集體決策在全面可靠性和准確度上優於個體決策。




5 分類模型評估
1. 定性評估標准
一般來說,分類模型有如下評估標准。
(1) 預測的准確率:模型正確地預測新的或先前沒見過的樣本的類別標簽能力。
(2) 速度:產生和使用模型的計算開銷。
(3) 強壯性:對於有噪聲或具有缺失值的樣本,模型能正確預測的能力。
(4) 可伸縮性:給定很大的數據集,能有效地構造模型的能力。
(5) 可解釋性:學習模型提供的理解和解釋的層次。
預測的准確率常用於比較和評估分類器的性能,它將每個類別看成同等重要,因此可能不適合用來分析不平衡數據集。在不平衡數據集中,稀有類別比多數類別更有意義。也就是說,需要考慮錯誤決策、錯誤分類的代價問題。例如,在銀行貸款決策中,貸款給違規者的代價遠遠比由於拒絕貸款給不違規者而造成生意損失的代價大得多;在診斷問題中,將實際沒有問題的機器誤診為有問題而產生的代價比因沒有診斷出問題而導致機器損壞而產生的代價小得多。



手把手教你使用Weka的分類器(完整)
- 1. 使用C4. 5分類器
- 2. 使用分類器預測未知數據
- 3. 使用決策規則
- 4. 使用線性回歸
- 5. 使用用戶分類器
- 6. 使用支持向量機
- 7. 使用元學習器
- 8. 深入研究離散化
- 9. 初識最近鄰分類器
- 10. 分類噪聲與最近鄰學習
- 11. 研究改變訓練集大小的影響
1、使用C4.5分類器(名稱為J48)
本例使用C4.5分類器對天氣數據集進行分類。
首先加載天氣數據集,操作步驟為:啟動探索者窗口,在預處理面板中單擊Open file按鈕,選擇並打開data目錄中的weather.nominal.arff文件,然后,單擊Classify標簽頁切換到Classify面板。


從上面的學習中,我們可以自動,構建決策樹的C4.5算法在Weka中是作為一個分類器來實現,名稱為J48。單擊Classfiy面板上部的Choose按鈕,會出現一個對話框,顯示不同類型的分類器。單擊tress條目以展開其子條目,然后單擊J48選擇該分類器。與過濾器一樣,分類器也按層次進行組織,J48的全名為weka.classifiers.tress.J48。

在Choose按鈕旁邊的文本框內,可以看到當前分類器及選項:J48 -C 0.25 -M 2。這是此分類器默認的參數設置。對於J48分類器,很少需要為獲得良好的性能而更改這些參數。

為了便於說明,使用訓練數據進行性能評估,訓練數據在預處理面板就已經完成加載。使用訓練數據進行評估並不是一個好方法,是因為它導致盲目樂觀的性能估計。從分類面板中Test options(測試選項)部分,選擇Use training set(使用訓練集)選項,以確定測試策略。做好上述的准備之后,可以單擊Start(開始)按鈕,啟動分類器的構建和評估,使用當前選擇的學習算法----J48,通過訓練集構建J48分類器模型。然后,使用構建的模型對訓練數據的所有實例進行分類以評估性能,並輸出性能統計信息,如下圖所示。


=== Run information === Scheme: weka.classifiers.trees.J48 -C 0.25 -M 2 Relation: weather.symbolic Instances: 14 Attributes: 5 outlook temperature humidity windy play Test mode: evaluate on training data === Classifier model (full training set) === J48 pruned tree ------------------ outlook = sunny | humidity = high: no (3.0) | humidity = normal: yes (2.0) outlook = overcast: yes (4.0) outlook = rainy | windy = TRUE: no (2.0) | windy = FALSE: yes (3.0) Number of Leaves : 5 Size of the tree : 8 Time taken to build model: 0.03 seconds === Evaluation on training set === Time taken to test model on training data: 0.02 seconds === Summary === Correctly Classified Instances 14 100 % Incorrectly Classified Instances 0 0 % Kappa statistic 1 Mean absolute error 0 Root mean squared error 0 Relative absolute error 0 % Root relative squared error 0 % Coverage of cases (0.95 level) 100 % Mean rel. region size (0.95 level) 50 % Total Number of Instances 14 === Detailed Accuracy By Class === TP Rate FP Rate Precision Recall F-Measure MCC ROC Area PRC Area Class 1.000 0.000 1.000 1.000 1.000 1.000 1.000 1.000 yes 1.000 0.000 1.000 1.000 1.000 1.000 1.000 1.000 no Weighted Avg. 1.000 0.000 1.000 1.000 1.000 1.000 1.000 1.000 === Confusion Matrix === a b <-- classified as 9 0 | a = yes 0 5 | b = no
訓練和測試結果會以文本方式顯示在窗口右側的Classifier Output(分類器輸出)框中。大家可以拖動右邊的滾動條以檢查這些文字信息。首先看決策樹的描述部分,其信息重新摘錄如下圖所示。

J48 pruned tree ------------------ outlook = sunny | humidity = high: no (3.0) | humidity = normal: yes (2.0) outlook = overcast: yes (4.0) outlook = rainy | windy = TRUE: no (2.0) | windy = FALSE: yes (3.0) Number of Leaves : 5 Size of the tree : 8
上述文字表述構建的J48(就是決策樹的) 剪枝決策樹,包括決策支點、分支和葉節點,決策節點用一個測試表示,分支用 “|” 加上縮進表示,葉節點后面有一個括號,括號內的數字代表到達該葉節點的實例數量。當然,采用文字對模型進行表述十分笨拙且難以理解,因此Weka也能生成等效的圖形表示。
按照上述的方法,如果更改數據集或調整選項,每次單擊Start按鈕,都會構建和評估一個新的分類器模型,在如下圖所示窗口的左下角的Result List(結果列表)面板上就會相應添加一條新條目。
可以按照如下方法得到圖形化表示的決策樹。右擊剛剛被添加到結果列表中的"tree.J48”條目,並在彈出菜單中選擇 Visualize tree(可視化樹)菜單項,會彈出一個如下圖所示的決策樹窗口。


該決策樹視圖可以自動縮放和平移,可以通過選擇鼠標右擊空白處帶出的上下文菜單中的菜單項,實現自動縮放;可以通過拖動鼠標實現視圖平移。

大家要知道。如下兩幅圖表示的信息,是一致的。其中,葉節點中用括號引起的數字表示到達該節點的實例數量。另外,決策樹的文字描述圖還包含兩條額外信息 :Number of Leaves(葉子數量)表示葉子節點的數量,Size of the tree(樹大小)表示樹中全部節點的數量。

決策樹的文字描述圖 構建的決策樹
這段文字描述了正確分類的測試實例有多少條,占多大比例。它表示使用數據進行測試模型的准確性。本例中,准確性高達100%,表示完全正確,不用驚奇,這是把訓練集 用於測試的條件下經常發生的事。
分類器輸出的最后一項是一個如下所示的混淆矩陣:
矩陣中的每一個元素是實例的計數值。行表示真實類別,列表示預測類別。大家可以看到,全部9個真實類別為yes的實例都己預測為yes,全部5個真實類別為no的實例都己預測為no。只有主對角線上的數值很大,而非主對角線上的數值都為0時,表明預測完全正確。
以上是使用訓練集作為J48算法測試策略得到的訓練結果,當然,還可以選擇使用其他的測試策略。單擊Start按鈕啟動所選學習算法的運行,使用預處理面板中加戟的數據集和所選擇 的測試策略。例如,如果使用十折交叉驗證,需要運行10次學習算法,以構建和評估10 個分類器。要注意的是,打印到分類器輸出區域的分類器模型是由完整的訓練集構建的, 這可能是最后一次運行學習算法得到的結果。
現在加載iris數據集,還是使用J48分類器進行學習。首先選擇使用Use training set 測試選項,再做一個選擇使用Cross-validation 10折測試選項,分別訓練並評估J48分類器,運行結果如下表所示。

先來使用Use training set 測試選項,訓練並評估J48分類器


=== Run information === Scheme: weka.classifiers.rules.ZeroR Relation: iris Instances: 150 Attributes: 5 sepallength sepalwidth petallength petalwidth class Test mode: evaluate on training data === Classifier model (full training set) === ZeroR predicts class value: Iris-setosa Time taken to build model: 0.11 seconds === Evaluation on training set === Time taken to test model on training data: 0.05 seconds === Summary === Correctly Classified Instances 50 33.3333 % Incorrectly Classified Instances 100 66.6667 % Kappa statistic 0 Mean absolute error 0.4444 Root mean squared error 0.4714 Relative absolute error 100 % Root relative squared error 100 % Coverage of cases (0.95 level) 100 % Mean rel. region size (0.95 level) 100 % Total Number of Instances 150 === Detailed Accuracy By Class === TP Rate FP Rate Precision Recall F-Measure MCC ROC Area PRC Area Class 1.000 1.000 0.333 0.333 0.333 0.000 0.500 0.333 Iris-setosa 0.000 0.000 0.000 0.000 0.000 0.000 0.500 0.333 Iris-versicolor 0.000 0.000 0.000 0.000 0.000 0.000 0.500 0.333 Iris-virginica Weighted Avg. 0.333 0.333 0.111 0.333 0.167 0.000 0.500 0.333 === Confusion Matrix === a b c <-- classified as 50 0 0 | a = Iris-setosa 50 0 0 | b = Iris-versicolor 50 0 0 | c = Iris-virginica
再來,使用Cross-validation 10折測試選項,來訓練並評估J48分類器

=== Run information === Scheme: weka.classifiers.rules.ZeroR Relation: iris Instances: 150 Attributes: 5 sepallength sepalwidth petallength petalwidth class Test mode: 10-fold cross-validation === Classifier model (full training set) === ZeroR predicts class value: Iris-setosa Time taken to build model: 0 seconds === Stratified cross-validation === === Summary === Correctly Classified Instances 50 33.3333 % Incorrectly Classified Instances 100 66.6667 % Kappa statistic 0 Mean absolute error 0.4444 Root mean squared error 0.4714 Relative absolute error 100 % Root relative squared error 100 % Coverage of cases (0.95 level) 100 % Mean rel. region size (0.95 level) 100 % Total Number of Instances 150 === Detailed Accuracy By Class === TP Rate FP Rate Precision Recall F-Measure MCC ROC Area PRC Area Class 1.000 1.000 0.333 0.333 0.333 0.000 0.500 0.333 Iris-setosa 0.000 0.000 0.000 0.000 0.000 0.000 0.500 0.333 Iris-versicolor 0.000 0.000 0.000 0.000 0.000 0.000 0.500 0.333 Iris-virginica Weighted Avg. 0.333 0.333 0.111 0.333 0.167 0.000 0.500 0.333 === Confusion Matrix === a b c <-- classified as 50 0 0 | a = Iris-setosa 50 0 0 | b = Iris-versicolor 50 0 0 | c = Iris-virginica

從上表的數據可以看到,使用訓練集的正確分類所占的比例較高,達到98%。但由於是直接將訓練集用於測試,因此結論並不可靠。相反,十折交叉驗證將數據集分為10 等份,將其中的1份用於測試,另外9份用於訓練,如此依次進行10次訓練和評估,顯然得到的結論要可靠一些。
最后,檢查一下分類錯誤的可視化表示。右擊結果列表中的trees.J48條目,然后從上下文菜單中選擇Visualize classifier errors(可視化分類錯誤)菜單項。會彈出一個散點圖窗口,正確分類的實例標記為小十字,不正確的分類實例標記為小空心方塊,如下圖所示。
注意:這里是接着上面的iris.arff文件來的。


橫坐標表示真實的類別,縱坐標表示預測的類別。請注意,不要為表而現象迷惑,一個小十字並不一定只代表一個實例,一個小空心方塊有時也並不僅僅代表一個 錯分的實例。如果想看到底有幾個實例錯分,可以拉動Jitter滑條,會錯開一些相互疊加 的實例,便於看清楚到底有多少個錯分的實例。另一種辦法是單擊小空心方塊,就會彈出 如下圖所示的實例信息,顯示每個實例的各屬性值以及預測類別和真實類別。

2、使用分類器預測未知數據
還是使用J48分類器對天氣數據集進行訓練,得到如下圖所示的決策樹。
現在構建一個測試數據集,用任意的文本編輯器,編輯如下內容:

將測試數據集保存為weather.nominal.test.arff文件。

然后,在探索者分類面板的Test options子面板下,選擇Supplied test set作為測試策略,單擊后面的Set按鈕,打開測試實例對話框,如圖2.52所示。單擊對話框里的Open file按鈕,打開剛才保存的測試數據集weather.nominal.test.arff文件,單擊Close按鈕關閉 對話框。





然后,單擊Test options子面板下部的More option按鈕,打開如下圖所示的分類器評估選項對話框,單擊對話框中部的Choose按鈕,選擇PlainText選項,該選項使分類器 的輸出中包含預測信息,單擊0K按鈕關閉對話框。




現在,一切准備就緒了。單擊start按鈕,啟動分類器訓練和評估過程,像以前一樣。探索者在分類器輸出區域輸出性能統計信息。仔細查看,會返現多了如下一項測試集的預測結果,表明測試集僅有一個實例,預測值和實際值都為yes,預測沒有錯誤。



=== Run information === Scheme: weka.classifiers.misc.InputMappedClassifier -I -trim -W weka.classifiers.rules.ZeroR Relation: iris Instances: 150 Attributes: 5 sepallength sepalwidth petallength petalwidth class Test mode: user supplied test set: size unknown (reading incrementally) === Classifier model (full training set) === InputMappedClassifier: ZeroR predicts class value: Iris-setosa Attribute mappings: Model attributes Incoming attributes ----------------------- ---------------- (numeric) sepallength --> - missing (no match) (numeric) sepalwidth --> - missing (no match) (numeric) petallength --> - missing (no match) (numeric) petalwidth --> - missing (no match) (nominal) class --> - missing (no match) Time taken to build model: 0 seconds === Predictions on test set === inst# actual predicted error prediction 1 1:yes 1:yes 0.333 === Evaluation on test set === Time taken to test model on supplied test set: 0 seconds === Summary === Correctly Classified Instances 1 100 % Incorrectly Classified Instances 0 0 % Kappa statistic 1 Mean absolute error 0.4444 Root mean squared error 0.4714 Relative absolute error 100 % Root relative squared error 100 % Coverage of cases (0.95 level) 100 % Mean rel. region size (0.95 level) 100 % Total Number of Instances 1 === Detailed Accuracy By Class === TP Rate FP Rate Precision Recall F-Measure MCC ROC Area PRC Area Class 1.000 0.000 1.000 1.000 1.000 0.000 ? 1.000 Iris-setosa 0.000 0.000 0.000 0.000 0.000 0.000 ? ? Iris-versicolor 0.000 0.000 0.000 0.000 0.000 0.000 ? ? Iris-virginica Weighted Avg. 1.000 0.000 1.000 1.000 1.000 0.000 0.000 1.000 === Confusion Matrix === a b c <-- classified as 1 0 0 | a = Iris-setosa 0 0 0 | b = Iris-versicolor 0 0 0 | c = Iris-virginica
3、使用決策規則
本示例使用決策規則訓練天氣數據集,並評估分類器性能。
首先啟動探索者界面,在預處理面板中加載weather.nominal.arff數據文件。切換至分類面板,單擊Classifier子面板下的Choose按鈕,選擇rules條目下的JRip分類器,保持默認參數不變,單擊Start按鈕啟動訓練,訓練結果如下所示。






=== Run information === Scheme: weka.classifiers.rules.JRip -F 3 -N 2.0 -O 2 -S 1 Relation: weather.symbolic Instances: 14 Attributes: 5 outlook temperature humidity windy play Test mode: 10-fold cross-validation === Classifier model (full training set) === JRIP rules: =========== (humidity = high) and (outlook = sunny) => play=no (3.0/0.0) (outlook = rainy) and (windy = TRUE) => play=no (2.0/0.0) => play=yes (9.0/0.0) Number of Rules : 3 Time taken to build model: 0.01 seconds === Stratified cross-validation === === Summary === Correctly Classified Instances 9 64.2857 % Incorrectly Classified Instances 5 35.7143 % Kappa statistic 0.186 Mean absolute error 0.3674 Root mean squared error 0.5338 Relative absolute error 77.1635 % Root relative squared error 108.1927 % Coverage of cases (0.95 level) 92.8571 % Mean rel. region size (0.95 level) 75 % Total Number of Instances 14 === Detailed Accuracy By Class === TP Rate FP Rate Precision Recall F-Measure MCC ROC Area PRC Area Class 0.778 0.600 0.700 0.700 0.700 0.189 0.656 0.757 yes 0.400 0.222 0.500 0.500 0.500 0.189 0.656 0.646 no Weighted Avg. 0.643 0.465 0.629 0.643 0.632 0.189 0.656 0.717 === Confusion Matrix === a b <-- classified as 7 2 | a = yes 3 2 | b = no
經過訓練,生成的規則一共有如下三條。
JRIP rules: =========== (humidity = high) and (outlook = sunny) => play=no (3.0/0.0) (outlook = rainy) and (windy = TRUE) => play=no (2.0/0.0) => play=yes (9.0/0.0) Number of Rules : 3
每條規則用“=>”分開規則前件和規則后件,規則后件有用括號引起的兩個數字,第一個數字表示規則覆蓋的實例數量,第二個數字表示錯分的實例數量。注意到第三條規則的規則前件為空,表示這條規則覆蓋除去前兩條規則覆蓋的訓練實例外的所有實例。
同樣也可以可視化分類錯誤。右擊結果列表中的rules. JRip條目,然后從上下文菜單中選擇Visualize classifier errors菜單項。會彈出一個散點圖窗口,在窗口中拉動Jitter滑條,會錯開一些相互疊加的實例,如下圖所示。



可視化JRip分類錯誤散點圖
在分類錯誤散點圖中,左上角和右下角的小方塊都是正確分類的實例,左下角的小藍叉和右上角的小紅叉都是錯分的實例,可視化能直觀看到錯分實例的數量。
4、使用線性回歸
本示例使用線性回歸訓練CPU數據集,並評估分類器性能。
首先啟動探索者界面,在預處理面板中加載cpu.arff數據文件。如下圖所示,在窗口右下角可以看到第一個屬性MYCT的直方圖,由於類別屬性是連續型數值,因此該直方圖不是彩色的。



切換至分類面板,單擊Classifier子面板下的Choose按鈕,選擇functions條目下的LinearRegression分類器,保持默認參數不變,單擊Start啟動訓練,訓練結果如下所示



=== Run information === Scheme: weka.classifiers.functions.LinearRegression -S 0 -R 1.0E-8 Relation: cpu Instances: 209 Attributes: 7 MYCT MMIN MMAX CACH CHMIN CHMAX class Test mode: 10-fold cross-validation === Classifier model (full training set) === Linear Regression Model class = 0.0491 * MYCT + 0.0152 * MMIN + 0.0056 * MMAX + 0.6298 * CACH + 1.4599 * CHMAX + -56.075 Time taken to build model: 0.06 seconds === Cross-validation === === Summary === Correlation coefficient 0.9012 Mean absolute error 41.0886 Root mean squared error 69.556 Relative absolute error 42.6943 % Root relative squared error 43.2421 % Total Number of Instances 209
從結果中可以看到,LinearRegression分類器構建了一個回歸公式,交叉驗證顯示其性能不佳。
再次單擊Choose按鈕,選擇另一種分類器——M5P,該分類器在trees條目下。還是 保持默認參數不變,單擊Start按鈕啟動訓練,訓練結果如下圖所示。


=== Run information === Scheme: weka.classifiers.trees.M5P -M 4.0 Relation: cpu Instances: 209 Attributes: 7 MYCT MMIN MMAX CACH CHMIN CHMAX class Test mode: 10-fold cross-validation === Classifier model (full training set) === M5 pruned model tree: (using smoothed linear models) CHMIN <= 7.5 : LM1 (165/12.903%) CHMIN > 7.5 : | MMAX <= 28000 : | | MMAX <= 13240 : | | | CACH <= 81.5 : LM2 (6/18.551%) | | | CACH > 81.5 : LM3 (4/30.824%) | | MMAX > 13240 : LM4 (11/24.185%) | MMAX > 28000 : LM5 (23/48.302%) LM num: 1 class = -0.0055 * MYCT + 0.0013 * MMIN + 0.0029 * MMAX + 0.8007 * CACH + 0.4015 * CHMAX + 11.0971 LM num: 2 class = -1.0307 * MYCT + 0.0086 * MMIN + 0.0031 * MMAX + 0.7866 * CACH - 2.4503 * CHMIN + 1.1597 * CHMAX + 70.8672 LM num: 3 class = -1.1057 * MYCT + 0.0086 * MMIN + 0.0031 * MMAX + 0.7995 * CACH - 2.4503 * CHMIN + 1.1597 * CHMAX + 83.0016 LM num: 4 class = -0.8813 * MYCT + 0.0086 * MMIN + 0.0031 * MMAX + 0.6547 * CACH - 2.3561 * CHMIN + 1.1597 * CHMAX + 82.5725 LM num: 5 class = -0.4882 * MYCT + 0.0218 * MMIN + 0.003 * MMAX + 0.3865 * CACH - 1.3252 * CHMIN + 3.3671 * CHMAX - 51.8474 Number of Rules : 5 Time taken to build model: 0.2 seconds === Cross-validation === === Summary === Correlation coefficient 0.9274 Mean absolute error 29.8309 Root mean squared error 60.7112 Relative absolute error 30.9967 % Root relative squared error 37.7434 % Total Number of Instances 209
從上圖可以看到,M5P是決策樹方案和線性回歸方案的結合體。前半部分使用剪枝的決策樹,后半部分則使用線性回歸。如果要稍微深入了解M5P算法的原理,不妨在結果列表中單擊藍色的條目,在彈出的上下文菜單中選擇Visualize tree菜單項,Weka彈出如下圖所示的決策樹的可視化結果。


剪枝模型樹使用數據集中六個屬性中的三個進行分叉,樹根對CHMIN屬性分叉,在左分支上得到一個線性模型——LM1,剩余的結構放到右分支上。繼續分叉,得到另外的四個線性模型——LM2〜LM5。一共有五個葉節點, 每個葉節點對應一個線性模型。括號中有兩個數字,第一個數字是達到該葉子節點的實例數量,第二個百分數是用該葉節點的線性模型對這些實例進行預測的均方根誤差,用百分比表示對全部訓練數據計算而得到的類別屬性的標准偏差。
為了對兩個分類器的性能有一個直觀的認識,使用可視化方法來觀察兩個學習方案的誤差。在歷史列表子面板中分別右擊兩個條目,選擇Visualize classifier errors菜單項,得到兩個學習方案的可視化誤差如下兩個圖所示。


LinearRegression誤差


M5p誤差
顯示的數據點隨類別屬性值的不同而異,由於類別屬性是連續數值,因此數據點的顏色也是連續變化的。這里選擇 MMAX屬性作為X軸,CACH屬性作為^軸,這樣數據點能夠盡量散開。每個數據點用 一個小叉表示,其大小表示該實例的誤差的絕對值。可以看到,圖M5p誤差的小叉數量多於 圖LinearRegression誤差的小叉數量,說明M5P的性能優於LinearRegression。
5、 使用用戶分類器
用戶分類器(User Classifier)允許Weka用戶以交互方式建立自己的分類器。該分類器位於分層菜單trees部分之下,名稱為User Classifier,全名為weka.classifiers.trees. UserClassifier。如果在自己的Weka版本中找不到該分類器,說明還沒有安裝,請按照之前寫的Weka包管理器的相關內容進行安裝。
本例使用segment數據集來說明操作方式。根據給定平均intensity(亮度)、hue(色調)、 size(大小)、position(位置),以及各種簡單的紋理特征的屬性,將視覺圖像數據分割成各種 分類標簽,如grass(草)、sky(天空)、foliage(樹葉)、brick(磚)和cement(水泥)。訓練數據文 件隨Weka軟件配附,名稱為segment-challenge.arff。加載該數據文件,選擇UserClassifier 分類器。
評估使用特殊的測試集,名為segment-test.arff。


如果在自己的Weka版本(我的目前是weka3.7.8)中找不到該UserClassifier分類器,說明還沒有安裝,請按照之前寫的Weka包管理器的相關內容進行安裝。或者見如下也是可以的。




這里,大家得要去升級下,自己的Weka版本。很簡單,暫時沒有提供在線升級,直接去官網,下載最新的weka版本。
Weka中數據挖掘與機器學習系列之Weka系統安裝(四)
我這里,以weka3.7.8 到 3.9.0
(因為,我本地windows7下,已經安裝好了jdk1.7了)

下載,請見
http://download.csdn.net/detail/u010106732/9842662



我這里,在我自己電腦里,這兩款版本我都保留了。大家也可以這樣去做。因為,有些資料網上,還現在很大程度上,停留在3.7,當然慢慢會有3.9的資料增加!
大家也許會有個疑問:那么在環境變量那一步,怎么共存兩個不同的weka版本呢?
很簡單:WEKA37_HOME=D:\SoftWare\Weka-3-7
WEKA39_HOME=D:\SoftWare\Weka-3-9
Weka中數據挖掘與機器學習系列之Weka3.7和3.9不同版本共存(七)
然后,安裝好之后,去蓋好相關的配置和數據庫連接,這里自己去看我前面都博客,不要嫌麻煩。學習本來就是一個更新替換的過程,沒有多次弄,怎么會學好呢?
然后,再把UserClassifier分類器下載好。
Weka中數據挖掘與機器學習系列之Weka Package Manager安裝所需WEKA的附加算法包出錯問題解決方案總結(八)
為此,我這里是,以weka3.9.0版本為例。

在Classify面板的Test options子面板 中選擇Supplied test set(提供測試集)選項。這里要注意,用戶分類器不能使用交叉驗證進行評估,因為無法為每個折都手動構建分類器。單擊Supplied test set選項后面的Set按鈕,彈出Test Instances(測試實例)窗口,然后單擊Openfile按鈕,如下圖所示在標准的打開文件窗口中選擇data目錄下的segment-test.arff文件。單擊Close按鈕關閉測試實例窗口。



然后,單擊Weka探索者Classify標簽頁下的Start按鈕,啟動交互構建分類器的界面,這時,探索者界面右下角的小鳥站起來不斷走動,表明Weka正在等待用 下圖選擇測試集戶完成分類器的構建工作。

=== Run information === Scheme: weka.classifiers.trees.UserClassifier Relation: segment Instances: 810 Attributes: 20 region-centroid-col region-centroid-row region-pixel-count short-line-density-5 short-line-density-2 vedge-mean vegde-sd hedge-mean hedge-sd intensity-mean rawred-mean rawblue-mean rawgreen-mean exred-mean exblue-mean exgreen-mean value-mean saturation-mean hue-mean class Test mode: user supplied test set: size unknown (reading incrementally)
窗口分為Tree Visualizer(樹可視化工具)和Data Visualizer(數據可視化工具)兩個標簽頁,可以切換不同的視圖。前者顯示分類樹的當前狀態,並且每個節點都給出到達該節點的每個類別的實例數目。構建用戶分類器的目標就是得到一棵其葉節點都盡可能純凈的樹。最初只有一個根節點,其中包含全部數據。切換到Data Visualizer標簽頁去創建分割,顯示了一個二維散點圖,可以參考本博文后面的“可視化面板”的使用方法,選擇哪個屬性作為X軸,哪個屬性作為Y軸。這里的目標是要找到一個X軸和Y軸的屬性組合,將不同類別盡可能完全進行分離。嘗試多遍以后,讀者可能會找到一個好的選擇:使用region- centroid-row 屬性作為X軸,使用 intensity-mean 屬性作為Y軸,這樣會將紅色的實例幾乎 完全與其他實例分離,如下圖所示。


找到了很好的分離點之后,必須在圖中指定一個區域。在Jitter滑塊之上的下拉菜單,可以選擇四種選擇工具:
選擇Select Instance(選擇實例)選項標識一個特定實例;
選擇 Rectangle(矩形)選項在圖形上拖出一個矩形:
選擇Polygon(多邊形)選項畫一個自由形狀的 多邊形;
選擇Polyline(折線)選項畫一種自由形狀的折線。

操作方式都是:單擊添加了一個頂點,右擊完成操作。一旦選擇某個區域,該區域會變成灰色。在下圖中,用戶己經定義好了一個矩形。
(這一步其實是本博文后面所要講到的可視化界面)。
Select Instance(選擇實例)下拉列表框,以及Reset、Clear、Save按鈕,讓用戶修改數據集。可以選擇某些實例並刪除其他實例。例如,嘗試這樣使用Rectangle(矩形)選項:首先從下拉框中選中Rectangle選項,然后單擊並拖動鼠標來選擇一個區域。這時,Reset按鈕會自動變成Submit按鈕,單擊Submit按鈕,矩形以外的所有實例都將被刪除(注意看如下的圖)。用戶可以使用Save按鈕將修改過的數據集保存到文件中,當然,Open按鈕可以打開保存后的數據集文件。單擊Redet按鈕,可以恢復到原來的數據集。

如果單擊Submit(提交)按鈕,則在樹中創建兩個新的節點,一個節點容納選定的實例,另一個節點容納其余的實例。Clear(清除)按鈕清除選擇,Save(保存)按鈕將當前樹的節點實例保存為一個ARFF文件。

這時,Tree Visualizer標簽頁顯示如下圖所示,左邊的節點表示為sky類別,純粹只有一種類別,但右邊的節點還是混合了多個分類,需要進一步進行分割。單擊不同節點,可以在Data Visualizer標簽頁中切換顯示哪個數據子集。繼續添加節點,直到得到滿意的結果,也就是說,直到葉子節點大多是只有一種分類的純潔點為止。然后,在Tree Visualizer標簽頁的任意空白處右擊,並選擇Accept the Tree(接受樹)菜單項。Weka使用測試集評估建立的樹,並輸出性能統計信息。對於本例而言,90%已經是很高的得分了。

這是非常考驗細心和耐心的工作,如果能得到93以上成績真值得驕傲。
現在和Weka的機器學習比試一下。還是使用同樣的訓練集和測試集,但選擇J48分類器來替換用戶分類器,單擊Start按鈕啟動訓練和評估,本例J48分類器的正確率高達96.1728%,的確是手工交互進行分類難以達到的目標。
6、使用支持向量機
本示例分為兩個部分,第一部分展示如何使用SMO分類器,第二部分展示如何使用LibSVM。
啟動探索者界面,首先在預處理面板中加載iris數據集,然后切換到分類面板,單擊Classifier子面板下的Choose按鈕,選擇functions條目下的SMO分類器,使用默認的十折交叉驗證測試選項,單擊Start按鈕啟動分類模型構建並評估,運行結果如下圖所示。





=== Run information === Scheme: weka.classifiers.functions.SMO -C 1.0 -L 0.001 -P 1.0E-12 -N 0 -V -1 -W 1 -K "weka.classifiers.functions.supportVector.PolyKernel -E 1.0 -C 250007" -calibrator "weka.classifiers.functions.Logistic -R 1.0E-8 -M -1 -num-decimal-places 4" Relation: iris Instances: 150 Attributes: 5 sepallength sepalwidth petallength petalwidth class Test mode: 10-fold cross-validation === Classifier model (full training set) === SMO Kernel used: Linear Kernel: K(x,y) = <x,y> Classifier for classes: Iris-setosa, Iris-versicolor BinarySMO Machine linear: showing attribute weights, not support vectors. 0.6829 * (normalized) sepallength + -1.523 * (normalized) sepalwidth + 2.2034 * (normalized) petallength + 1.9272 * (normalized) petalwidth - 0.7091 Number of kernel evaluations: 352 (70.32% cached) Classifier for classes: Iris-setosa, Iris-virginica BinarySMO Machine linear: showing attribute weights, not support vectors. 0.5886 * (normalized) sepallength + -0.5782 * (normalized) sepalwidth + 1.6429 * (normalized) petallength + 1.4777 * (normalized) petalwidth - 1.1668 Number of kernel evaluations: 284 (68.996% cached) Classifier for classes: Iris-versicolor, Iris-virginica BinarySMO Machine linear: showing attribute weights, not support vectors. 0.3176 * (normalized) sepallength + -0.863 * (normalized) sepalwidth + 3.0543 * (normalized) petallength + 4.0815 * (normalized) petalwidth - 4.5924 Number of kernel evaluations: 453 (61.381% cached) Time taken to build model: 0.1 seconds === Stratified cross-validation === === Summary === Correctly Classified Instances 144 96 % Incorrectly Classified Instances 6 4 % Kappa statistic 0.94 Mean absolute error 0.2311 Root mean squared error 0.288 Relative absolute error 52 % Root relative squared error 61.101 % Total Number of Instances 150 === Detailed Accuracy By Class === TP Rate FP Rate Precision Recall F-Measure MCC ROC Area PRC Area Class 1.000 0.000 1.000 1.000 1.000 1.000 1.000 1.000 Iris-setosa 0.980 0.050 0.907 0.980 0.942 0.913 0.965 0.896 Iris-versicolor 0.900 0.010 0.978 0.900 0.938 0.910 0.970 0.930 Iris-virginica Weighted Avg. 0.960 0.020 0.962 0.960 0.960 0.941 0.978 0.942 === Confusion Matrix === a b c <-- classified as 50 0 0 | a = Iris-setosa 0 49 1 | b = Iris-versicolor 0 5 45 | c = Iris-virginica
本例使用指數為1的Polykernel(多項式核),使得模型成為線性支持向量機。由於iris數據包含三個類別值,就輸出三個對應的二元SMO模型,
這是因為一個超平面分隔每個可能類別值對。此外,由於SVM是線性的,超平面表示為在原來空間中的屬性值的函數,如上的函數表達式。
下圖所示的是將多項式核函數的指數設置為2的結果,這使得支持向量機成為非線性的。和前面的一樣,也有三個二元的SMO模型,但這次超平面表示為支持向量的函數。支持向量顯示在尖括號中,還顯示其系數α的值。


7、使用元學習器
元學習器能將簡單的分類器變為更強大的學習器,這里以實例進行說明。
首先加載鳶尾花數據集,然后選擇DecisionStump分類器,這是一個稱為決策樹樁的簡單分類器,全名為weka.classifiers.trees.DecisionStump。



然后選擇十折交叉驗證為測試選擇項進行訓練和評估,得到的分類正確率為66.6667%。


=== Run information === Scheme: weka.classifiers.trees.DecisionStump Relation: iris Instances: 150 Attributes: 5 sepallength sepalwidth petallength petalwidth class Test mode: 10-fold cross-validation === Classifier model (full training set) === Decision Stump Classifications petallength <= 2.45 : Iris-setosa petallength > 2.45 : Iris-versicolor petallength is missing : Iris-setosa Class distributions petallength <= 2.45 Iris-setosa Iris-versicolor Iris-virginica 1.0 0.0 0.0 petallength > 2.45 Iris-setosa Iris-versicolor Iris-virginica 0.0 0.5 0.5 petallength is missing Iris-setosa Iris-versicolor Iris-virginica 0.3333333333333333 0.3333333333333333 0.3333333333333333 Time taken to build model: 0.04 seconds === Stratified cross-validation === === Summary === Correctly Classified Instances 100 66.6667 % Incorrectly Classified Instances 50 33.3333 % Kappa statistic 0.5 Mean absolute error 0.2222 Root mean squared error 0.3333 Relative absolute error 50 % Root relative squared error 70.7107 % Coverage of cases (0.95 level) 100 % Mean rel. region size (0.95 level) 55.5556 % Total Number of Instances 150 === Detailed Accuracy By Class === TP Rate FP Rate Precision Recall F-Measure MCC ROC Area PRC Area Class 1.000 0.000 1.000 1.000 1.000 1.000 1.000 1.000 Iris-setosa 1.000 0.500 0.500 0.500 0.500 0.500 0.750 0.500 Iris-versicolor 0.000 0.000 0.000 0.000 0.000 0.000 0.750 0.500 Iris-virginica Weighted Avg. 0.667 0.167 0.500 0.667 0.556 0.500 0.833 0.667 === Confusion Matrix === a b c <-- classified as 50 0 0 | a = Iris-setosa 0 50 0 | b = Iris-versicolor 0 50 0 | c = Iris-virginica
接下來,選擇AdaboostM1分類器,這是一個使用提升算法的集成學習器,其全名為weka.classifiers.meta.AdaBoostM1。單擊該分類器進行設置,出現如下圖所示的對象編輯器。為了和DecisionStump分類器進行比較,設置AdaboostM1的基分類器為DecisionStump分類器。如果需要,還可以繼續單擊以進一步配置基分類器的選項,但由於DecisionStump剛好沒有課編輯的屬性。因此,單擊OK按鈕返回到主分類面板,並且單擊Start按鈕啟動訓練。



由於上圖中的numIterations參數默認為10,也就是訓練會迭代提升DecisionStump分類器10次。
在下圖中的運行結果表明,在150個iris數據中,只有7個錯分的實例,分類正確率高達95.3333%。
考慮到DecisionStump算法本類就十分原始。並且只聽過很少次數的提升迭代,性能提高很大,令人滿意。

8、深入研究離散化
這里,研究離散化的效果,加載ionosphere.arff數據文件,構建J48決策樹。該數據集包括從電離層傳回的雷達信號信息。數據集共有34個屬性外加1個類別屬性,共有351個實例,沒有缺失值。

二元類別標簽分別是good和bad,其中,“好”的樣本指那些能夠顯示出電離層中的一些結構類型證據的實例,而“壞”的樣本指信號直接穿過電離層的實例。更為詳細的信息可以查看ARFF文件中的注釋。

首先以無監督離散化開始,采用十折交叉驗證,比較不同學習方案的正確率以及決策樹的大小。采用J48分類器對原始數據進行分類,正確分類的實例數量為321,正確率為 91.453%,葉節點數為18,樹的大小為35;然后使用無監督的Discretize過濾器,保持過濾器參數為默認值,先進行過濾,再采用j48分類器對過濾后的數據進行分類,正確分類的實例數最為304,正確率為86.6097%,葉節點數為46,樹的大小為51;最后將無監督 Discretize過濾器的makeBinary參數設置為True,其余參數仍為缺省值,先進行過濾,再 采用J48分類器對過濾后的數據進行分類,正確分類的實例數量為326,正確率為 92.8775%,葉節點數為9,樹的大小為17。無監督離散化的效果如下表所示。

研究上表的結果,可以得出這樣的結論:使用二元化的無監督離散化,可以提高分 類器的正確率,並大幅減少決策樹的大小。
現在輪到有監督離散化。這里出現一個微妙的問題,如果簡單地重復使用有監督離散化方法替換無監督離散化,結果必然過於樂觀。因為這里將交叉驗證用於評價,測試集里的數據在確定離散間隔時己經使用過,必然造成如同預先偷看到答案再考試的效果。對於新的數據,這就無法給出一個合理的性能評估。
要合理地評估有監督離散化,最好使用Weka的元學習器FilteredClassifier。它僅使用訓練數據來構建過濾器,然后,使用訓練數據計算得到的離散間隔來離散化冊數數據,並予以評估。總之,這種方式完全符合在真實實戰中處理新數據的過程。
仍然使用ionsphere.arff數據文件,取消在過濾器標簽頁中選擇的過濾器,並在分類器標簽頁中選擇FilteredClassifier分類器,其全名為weka.classifiers.meta.FilterdClassifier。設置該分類器的classifier為J48。filter為有監督的Discretize,保持默認參數不變,如下圖所示。




=== Run information === Scheme: weka.classifiers.meta.FilteredClassifier -F "weka.filters.supervised.attribute.Discretize -R first-last" -W weka.classifiers.trees.J48 -- -C 0.25 -M 2 Relation: ionosphere Instances: 351 Attributes: 35 a01 a02 a03 a04 a05 a06 a07 a08 a09 a10 a11 a12 a13 a14 a15 a16 a17 a18 a19 a20 a21 a22 a23 a24 a25 a26 a27 a28 a29 a30 a31 a32 a33 a34 class Test mode: 10-fold cross-validation === Classifier model (full training set) === FilteredClassifier using weka.classifiers.trees.J48 -C 0.25 -M 2 on data filtered through weka.filters.supervised.attribute.Discretize -R first-last Filtered Header @relation ionosphere-weka.filters.supervised.attribute.Discretize-Rfirst-last @attribute a01 {'\'(-inf-0.5]\'','\'(0.5-inf)\''} @attribute a02 {'\'All\''} @attribute a03 {'\'(-inf-0.19028]\'','\'(0.19028-0.73947]\'','\'(0.73947-0.998505]\'','\'(0.998505-inf)\''} @attribute a04 {'\'(-inf--0.609635]\'','\'(-0.609635--0.00017]\'','\'(-0.00017-0.007075]\'','\'(0.007075-0.74685]\'','\'(0.74685-inf)\''} @attribute a05 {'\'(-inf-0.04144]\'','\'(0.04144-0.418075]\'','\'(0.418075-0.995175]\'','\'(0.995175-inf)\''} @attribute a06 {'\'(-inf--0.79531]\'','\'(-0.79531--0.217515]\'','\'(-0.217515--0.000715]\'','\'(-0.000715-0.00101]\'','\'(0.00101-0.82509]\'','\'(0.82509-inf)\''} @attribute a07 {'\'(-inf-0.029375]\'','\'(0.029375-0.999995]\'','\'(0.999995-inf)\''} @attribute a08 {'\'(-inf--0.983575]\'','\'(-0.983575--0.000375]\'','\'(-0.000375-0.000985]\'','\'(0.000985-0.994515]\'','\'(0.994515-inf)\''} @attribute a09 {'\'(-inf--0.704705]\'','\'(-0.704705--0.036395]\'','\'(-0.036395-0.011975]\'','\'(0.011975-0.05561]\'','\'(0.05561-inf)\''} @attribute a10 {'\'(-inf--0.57299]\'','\'(-0.57299-0.591395]\'','\'(0.591395-0.9891]\'','\'(0.9891-inf)\''} @attribute a11 {'\'(-inf--0.91576]\'','\'(-0.91576--0.01058]\'','\'(-0.01058-0.08713]\'','\'(0.08713-0.9991]\'','\'(0.9991-inf)\''} @attribute a12 {'\'(-inf--0.56293]\'','\'(-0.56293--0.00027]\'','\'(-0.00027-0.001845]\'','\'(0.001845-0.981525]\'','\'(0.981525-inf)\''} @attribute a13 {'\'(-inf--0.96941]\'','\'(-0.96941--0.076515]\'','\'(-0.076515-0.01567]\'','\'(0.01567-0.35474]\'','\'(0.35474-0.998725]\'','\'(0.998725-inf)\''} @attribute a14 {'\'(-inf--0.554585]\'','\'(-0.554585-0.652535]\'','\'(0.652535-0.97565]\'','\'(0.97565-inf)\''} @attribute a15 {'\'(-inf--0.98825]\'','\'(-0.98825--0.0283]\'','\'(-0.0283-0.239955]\'','\'(0.239955-0.99914]\'','\'(0.99914-inf)\''} @attribute a16 {'\'(-inf--0.90517]\'','\'(-0.90517--0.00197]\'','\'(-0.00197-0.00143]\'','\'(0.00143-0.96841]\'','\'(0.96841-inf)\''} @attribute a17 {'\'(-inf--0.96177]\'','\'(-0.96177--0.57273]\'','\'(-0.57273--0.05415]\'','\'(-0.05415-0.29207]\'','\'(0.29207-0.99815]\'','\'(0.99815-inf)\''} @attribute a18 {'\'(-inf--0.805795]\'','\'(-0.805795-0.99361]\'','\'(0.99361-inf)\''} @attribute a19 {'\'(-inf--0.989535]\'','\'(-0.989535--0.04391]\'','\'(-0.04391-0.12183]\'','\'(0.12183-0.46784]\'','\'(0.46784-0.998845]\'','\'(0.998845-inf)\''} @attribute a20 {'\'(-inf--0.912755]\'','\'(-0.912755-0.975495]\'','\'(0.975495-inf)\''} @attribute a21 {'\'(-inf--0.957365]\'','\'(-0.957365--0.000015]\'','\'(-0.000015-0.07206]\'','\'(0.07206-0.99888]\'','\'(0.99888-inf)\''} @attribute a22 {'\'(-inf--0.96798]\'','\'(-0.96798--0.0014]\'','\'(-0.0014-0.000375]\'','\'(0.000375-0.923655]\'','\'(0.923655-inf)\''} @attribute a23 {'\'(-inf--0.96809]\'','\'(-0.96809--0.0092]\'','\'(-0.0092-0.18657]\'','\'(0.18657-0.999665]\'','\'(0.999665-inf)\''} @attribute a24 {'\'(-inf--0.987455]\'','\'(-0.987455-0.89747]\'','\'(0.89747-inf)\''} @attribute a25 {'\'(-inf--0.87839]\'','\'(-0.87839--0.00017]\'','\'(-0.00017-0.08722]\'','\'(0.08722-0.999495]\'','\'(0.999495-inf)\''} @attribute a26 {'\'(-inf--0.98148]\'','\'(-0.98148-0.80245]\'','\'(0.80245-inf)\''} @attribute a27 {'\'(-inf-0.52812]\'','\'(0.52812-0.999945]\'','\'(0.999945-inf)\''} @attribute a28 {'\'(-inf--0.936175]\'','\'(-0.936175-0.86022]\'','\'(0.86022-inf)\''} @attribute a29 {'\'(-inf--0.91183]\'','\'(-0.91183--0.00009]\'','\'(-0.00009-0.06779]\'','\'(0.06779-0.997]\'','\'(0.997-inf)\''} @attribute a30 {'\'(-inf--0.91428]\'','\'(-0.91428-0.930305]\'','\'(0.930305-inf)\''} @attribute a31 {'\'(-inf--0.84848]\'','\'(-0.84848--0.1671]\'','\'(-0.1671-0.132415]\'','\'(0.132415-0.99556]\'','\'(0.99556-inf)\''} @attribute a32 {'\'(-inf--0.969765]\'','\'(-0.969765-0.87076]\'','\'(0.87076-inf)\''} @attribute a33 {'\'(-inf--0.959515]\'','\'(-0.959515--0.00004]\'','\'(-0.00004-0.0002]\'','\'(0.0002-0.994855]\'','\'(0.994855-inf)\''} @attribute a34 {'\'(-inf--0.974115]\'','\'(-0.974115--0.00003]\'','\'(-0.00003-0.0054]\'','\'(0.0054-0.95098]\'','\'(0.95098-inf)\''} @attribute class {b,g} @data Classifier Model J48 pruned tree ------------------ a05 = '(-inf-0.04144]': b (67.0) a05 = '(0.04144-0.418075]' | a03 = '(-inf-0.19028]': b (5.0) | a03 = '(0.19028-0.73947]' | | a33 = '(-inf--0.959515]': g (0.0) | | a33 = '(-0.959515--0.00004]' | | | a16 = '(-inf--0.90517]': b (1.0) | | | a16 = '(-0.90517--0.00197]': g (2.0) | | | a16 = '(-0.00197-0.00143]': b (0.0) | | | a16 = '(0.00143-0.96841]': b (2.0) | | | a16 = '(0.96841-inf)': b (0.0) | | a33 = '(-0.00004-0.0002]': g (0.0) | | a33 = '(0.0002-0.994855]': g (9.0) | | a33 = '(0.994855-inf)': b (1.0) | a03 = '(0.73947-0.998505]': g (1.0) | a03 = '(0.998505-inf)': g (1.0) a05 = '(0.418075-0.995175]': g (163.0/9.0) a05 = '(0.995175-inf)' | a08 = '(-inf--0.983575]': b (15.0) | a08 = '(-0.983575--0.000375]' | | a18 = '(-inf--0.805795]': b (3.0) | | a18 = '(-0.805795-0.99361]': g (32.0/3.0) | | a18 = '(0.99361-inf)': g (0.0) | a08 = '(-0.000375-0.000985]': b (8.0) | a08 = '(0.000985-0.994515]': g (27.0/1.0) | a08 = '(0.994515-inf)': b (14.0/3.0) Number of Leaves : 21 Size of the tree : 27 Time taken to build model: 0.72 seconds === Stratified cross-validation === === Summary === Correctly Classified Instances 320 91.1681 % Incorrectly Classified Instances 31 8.8319 % Kappa statistic 0.8043 Mean absolute error 0.1185 Root mean squared error 0.2769 Relative absolute error 25.733 % Root relative squared error 57.7242 % Coverage of cases (0.95 level) 96.2963 % Mean rel. region size (0.95 level) 67.2365 % Total Number of Instances 351 === Detailed Accuracy By Class === TP Rate FP Rate Precision Recall F-Measure MCC ROC Area PRC Area Class 0.833 0.044 0.913 0.913 0.913 0.806 0.926 0.904 b 0.956 0.167 0.911 0.911 0.911 0.806 0.926 0.939 g Weighted Avg. 0.912 0.123 0.912 0.912 0.911 0.806 0.926 0.927 === Confusion Matrix === a b <-- classified as 105 21 | a = b 10 215 | b = g
這時,單擊Start按鈕啟動訓練及評估,得到輸出結果:正確分類的實例數量為320,正確率為91.1681%,葉節點數為21,數的大小為27。然后,修改FilterClassifier分類器的filter參數,將有監督Discretize的makeBinary參數設置為True,其余參數仍為缺省值,輸入框中的命令行應該是Doscretize -D -R first-last。再次單擊Start按鈕,得到輸出結果值:正確分類的實例數量為325,正確率為92.5926%,葉子節點數為9,數的大小為17。有監督離散化的效果如下所示。

仍然可以得出這樣的結論:使用二元化的有監督離散化,可以提高分類器的正確率,並大幅度減少決策樹的大小。
9、初識最近鄰分類器
本節使用IBk分類器,這是一種k-最近鄰分類器,既可以在交叉驗證的基礎上選擇合適的k值,也可以加距離權重。
在探索者界面中加載glass.arff數據集,切換至Classify面板,單擊Choose按鈕選擇 IBk分類器,其全名為weka.classifiers.lazy.IBk。


使用交叉驗證測試該分類器的性能,使用交叉驗證,保持折數為默認值10。IBk的選項都保持為默認值,這里要注意的參數是KNN,KNN值默認為1,這是分類時所用的近鄰實例的數量。

單擊Start按鈕運行一次分類算法,記錄正確分類的百分比,其值為70%.5607%。

=== Run information === Scheme: weka.classifiers.lazy.IBk -K 1 -W 0 -A "weka.core.neighboursearch.LinearNNSearch -A \"weka.core.EuclideanDistance -R first-last\"" Relation: Glass Instances: 214 Attributes: 10 RI Na Mg Al Si K Ca Ba Fe Type Test mode: 10-fold cross-validation === Classifier model (full training set) === IB1 instance-based classifier using 1 nearest neighbour(s) for classification Time taken to build model: 0 seconds === Stratified cross-validation === === Summary === Correctly Classified Instances 151 70.5607 % Incorrectly Classified Instances 63 29.4393 % Kappa statistic 0.6005 Mean absolute error 0.0897 Root mean squared error 0.2852 Relative absolute error 42.3747 % Root relative squared error 87.8627 % Coverage of cases (0.95 level) 70.5607 % Mean rel. region size (0.95 level) 14.2857 % Total Number of Instances 214 === Detailed Accuracy By Class === TP Rate FP Rate Precision Recall F-Measure MCC ROC Area PRC Area Class 0.786 0.167 0.696 0.696 0.696 0.602 0.806 0.628 build wind float 0.671 0.130 0.739 0.739 0.739 0.554 0.765 0.629 build wind non-float 0.294 0.051 0.333 0.333 0.333 0.258 0.590 0.144 vehic wind float 0.000 0.000 0.000 0.000 0.000 0.000 ? ? vehic wind non-float 0.769 0.030 0.625 0.625 0.625 0.671 0.895 0.456 containers 0.778 0.015 0.700 0.700 0.700 0.726 0.838 0.598 tableware 0.793 0.011 0.920 0.920 0.920 0.834 0.884 0.772 headlamps Weighted Avg. 0.706 0.109 0.709 0.706 0.704 0.598 0.792 0.598 === Confusion Matrix === a b c d e f g <-- classified as 55 9 6 0 0 0 0 | a = build wind float 15 51 4 0 3 2 1 | b = build wind non-float 9 3 5 0 0 0 0 | c = vehic wind float 0 0 0 0 0 0 0 | d = vehic wind non-float 0 2 0 0 10 0 1 | e = containers 0 1 0 0 1 7 0 | f = tableware 0 3 0 0 2 1 23 | g = headlamps
然后,修改KNN值為5,再次運行分類算法,記錄正確分類的百分比,其值為67.757%,如下圖所示。


=== Run information === Scheme: weka.classifiers.lazy.IBk -K 5 -W 0 -A "weka.core.neighboursearch.LinearNNSearch -A \"weka.core.EuclideanDistance -R first-last\"" Relation: Glass Instances: 214 Attributes: 10 RI Na Mg Al Si K Ca Ba Fe Type Test mode: 10-fold cross-validation === Classifier model (full training set) === IB1 instance-based classifier using 5 nearest neighbour(s) for classification Time taken to build model: 0 seconds === Stratified cross-validation === === Summary === Correctly Classified Instances 145 67.757 % Incorrectly Classified Instances 69 32.243 % Kappa statistic 0.5469 Mean absolute error 0.1085 Root mean squared error 0.2563 Relative absolute error 51.243 % Root relative squared error 78.9576 % Coverage of cases (0.95 level) 89.7196 % Mean rel. region size (0.95 level) 26.1682 % Total Number of Instances 214 === Detailed Accuracy By Class === TP Rate FP Rate Precision Recall F-Measure MCC ROC Area PRC Area Class 0.843 0.229 0.641 0.641 0.641 0.582 0.867 0.713 build wind float 0.684 0.174 0.684 0.684 0.684 0.510 0.848 0.756 build wind non-float 0.000 0.010 0.000 0.000 0.000 -0.029 0.642 0.161 vehic wind float 0.000 0.000 0.000 0.000 0.000 0.000 ? ? vehic wind non-float 0.385 0.025 0.500 0.500 0.500 0.407 0.952 0.546 containers 0.667 0.010 0.750 0.750 0.750 0.695 0.909 0.565 tableware 0.793 0.016 0.885 0.885 0.885 0.814 0.890 0.843 headlamps Weighted Avg. 0.678 0.142 0.635 0.678 0.651 0.533 0.853 0.685 === Confusion Matrix === a b c d e f g <-- classified as 59 10 1 0 0 0 0 | a = build wind float 20 52 1 0 3 0 0 | b = build wind non-float 12 5 0 0 0 0 0 | c = vehic wind float 0 0 0 0 0 0 0 | d = vehic wind non-float 0 5 0 0 5 0 3 | e = containers 0 2 0 0 1 6 0 | f = tableware 1 2 0 0 1 2 23 | g = headlamps
可見,將KNN值由1增大至5后,IBK准確度稍微有所下降。從這個實例中,大家可能會憑着直覺得出KNN值越小越好的結論,事實會是這樣的嗎?且看后文。
10、分類噪聲與最近鄰學習
和其他技術一樣,最近鄰學習對訓練數據中的噪聲很敏感。在本節中,將大小不等的分類噪聲注入數據中,並觀察其對分類器性能的影響。
本節使用一種稱為AddNoise的無監督的屬性過濾器來添加噪聲,該屬性過濾器位於 weka.filters.unsupervised.attribute包中,使用該過濾器,可以將數據中一定比例的類別標簽翻轉為隨機選擇的其他值。然而,對於本次實驗,最重要的是要保證測試數據不受分類噪聲的影響,這樣才能得到可靠的評估結果。很多實際情況都要求過濾訓練數據,但不能過濾測試數據,滿足這種要求的元學習器稱為niteredClassifier,位於weka.classifiers.meta包中。本例將該元學習器配置為使用IBK作為分類器,使用AddNoise作為過濾器。在運行學習算法之前,FilteredClassifier先對數據應用過濾器過濾,分兩批完成:先訓練數據,后測試數據。AddNoise過濾器只在遇到的首批數據中添加噪聲,也就是說,隨后的測試數據在通過時不受任何影響。
還是使用玻璃數據集,在Classify面板中選擇FilteredClassifier分類器。


然后打開通用對象編輯器編輯該分類器的參數,選擇classifier為IBk, filter參數為AddNoise,如圖下圖所示。




修改IBk分類器的鄰居數量KNN參數,分別設置為k = 1,k=3, k = 5。同時修改 AddNoise過濾器的分類噪聲百分比percent參數,從0%、10%—直到100%。每次設置完畢后,單擊Start按鈕啟動訓練和評估,將得到的分類正確率填入下表中。


=== Run information === Scheme: weka.classifiers.meta.FilteredClassifier -F "weka.filters.unsupervised.attribute.AddNoise -C last -P 10 -S 1" -W weka.classifiers.lazy.IBk -- -K 1 -W 0 -A "weka.core.neighboursearch.LinearNNSearch -A \"weka.core.EuclideanDistance -R first-last\"" Relation: Glass Instances: 214 Attributes: 10 RI Na Mg Al Si K Ca Ba Fe Type Test mode: 10-fold cross-validation === Classifier model (full training set) === FilteredClassifier using weka.classifiers.lazy.IBk -K 1 -W 0 -A "weka.core.neighboursearch.LinearNNSearch -A \"weka.core.EuclideanDistance -R first-last\"" on data filtered through weka.filters.unsupervised.attribute.AddNoise -C last -P 10 -S 1 Filtered Header @relation Glass-weka.filters.unsupervised.attribute.AddNoise-Clast-P10-S1 @attribute RI numeric @attribute Na numeric @attribute Mg numeric @attribute Al numeric @attribute Si numeric @attribute K numeric @attribute Ca numeric @attribute Ba numeric @attribute Fe numeric @attribute Type {'build wind float','build wind non-float','vehic wind float','vehic wind non-float',containers,tableware,headlamps} @data Classifier Model IB1 instance-based classifier using 1 nearest neighbour(s) for classification Time taken to build model: 0.02 seconds === Stratified cross-validation === === Summary === Correctly Classified Instances 134 62.6168 % Incorrectly Classified Instances 80 37.3832 % Kappa statistic 0.4954 Mean absolute error 0.1116 Root mean squared error 0.3213 Relative absolute error 52.717 % Root relative squared error 98.9904 % Coverage of cases (0.95 level) 62.6168 % Mean rel. region size (0.95 level) 14.2857 % Total Number of Instances 214 === Detailed Accuracy By Class === TP Rate FP Rate Precision Recall F-Measure MCC ROC Area PRC Area Class 0.729 0.215 0.622 0.622 0.622 0.495 0.753 0.559 build wind float 0.605 0.130 0.719 0.719 0.719 0.496 0.725 0.587 build wind non-float 0.235 0.066 0.235 0.235 0.235 0.169 0.570 0.111 vehic wind float 0.000 0.005 0.000 0.000 0.000 0.000 ? ? vehic wind non-float 0.769 0.030 0.625 0.625 0.625 0.671 0.892 0.439 containers 0.667 0.024 0.545 0.545 0.545 0.584 0.759 0.446 tableware 0.586 0.032 0.739 0.739 0.739 0.612 0.814 0.545 headlamps Weighted Avg. 0.626 0.129 0.638 0.626 0.627 0.500 0.745 0.519 === Confusion Matrix === a b c d e f g <-- classified as 51 9 7 1 1 0 1 | a = build wind float 16 46 5 0 3 2 4 | b = build wind non-float 9 3 4 0 0 1 0 | c = vehic wind float 0 0 0 0 0 0 0 | d = vehic wind non-float 0 2 0 0 10 0 1 | e = containers 1 1 0 0 1 6 0 | f = tableware 5 3 1 0 1 2 17 | g = headlamps


=== Run information === Scheme: weka.classifiers.meta.FilteredClassifier -F "weka.filters.unsupervised.attribute.AddNoise -C last -P 10 -S 1" -W weka.classifiers.lazy.IBk -- -K 3 -W 0 -A "weka.core.neighboursearch.LinearNNSearch -A \"weka.core.EuclideanDistance -R first-last\"" Relation: Glass Instances: 214 Attributes: 10 RI Na Mg Al Si K Ca Ba Fe Type Test mode: 10-fold cross-validation === Classifier model (full training set) === FilteredClassifier using weka.classifiers.lazy.IBk -K 3 -W 0 -A "weka.core.neighboursearch.LinearNNSearch -A \"weka.core.EuclideanDistance -R first-last\"" on data filtered through weka.filters.unsupervised.attribute.AddNoise -C last -P 10 -S 1 Filtered Header @relation Glass-weka.filters.unsupervised.attribute.AddNoise-Clast-P10-S1 @attribute RI numeric @attribute Na numeric @attribute Mg numeric @attribute Al numeric @attribute Si numeric @attribute K numeric @attribute Ca numeric @attribute Ba numeric @attribute Fe numeric @attribute Type {'build wind float','build wind non-float','vehic wind float','vehic wind non-float',containers,tableware,headlamps} @data Classifier Model IB1 instance-based classifier using 3 nearest neighbour(s) for classification Time taken to build model: 0.01 seconds === Stratified cross-validation === === Summary === Correctly Classified Instances 149 69.6262 % Incorrectly Classified Instances 65 30.3738 % Kappa statistic 0.5784 Mean absolute error 0.1203 Root mean squared error 0.2701 Relative absolute error 56.8261 % Root relative squared error 83.2287 % Coverage of cases (0.95 level) 84.1121 % Mean rel. region size (0.95 level) 25.4339 % Total Number of Instances 214 === Detailed Accuracy By Class === TP Rate FP Rate Precision Recall F-Measure MCC ROC Area PRC Area Class 0.857 0.236 0.638 0.638 0.638 0.587 0.837 0.661 build wind float 0.658 0.123 0.746 0.746 0.746 0.552 0.803 0.673 build wind non-float 0.235 0.025 0.444 0.444 0.444 0.283 0.634 0.175 vehic wind float 0.000 0.000 0.000 0.000 0.000 0.000 ? ? vehic wind non-float 0.538 0.015 0.700 0.700 0.700 0.593 0.918 0.547 containers 0.556 0.010 0.714 0.714 0.714 0.616 0.909 0.621 tableware 0.793 0.022 0.852 0.852 0.852 0.795 0.877 0.793 headlamps Weighted Avg. 0.696 0.127 0.697 0.696 0.687 0.580 0.822 0.636 === Confusion Matrix === a b c d e f g <-- classified as 60 6 3 0 0 0 1 | a = build wind float 22 50 2 0 1 0 1 | b = build wind non-float 9 4 4 0 0 0 0 | c = vehic wind float 0 0 0 0 0 0 0 | d = vehic wind non-float 0 4 0 0 7 0 2 | e = containers 1 2 0 0 1 5 0 | f = tableware 2 1 0 0 1 2 23 | g = headlamps


=== Run information === Scheme: weka.classifiers.meta.FilteredClassifier -F "weka.filters.unsupervised.attribute.AddNoise -C last -P 10 -S 1" -W weka.classifiers.lazy.IBk -- -K 5 -W 0 -A "weka.core.neighboursearch.LinearNNSearch -A \"weka.core.EuclideanDistance -R first-last\"" Relation: Glass Instances: 214 Attributes: 10 RI Na Mg Al Si K Ca Ba Fe Type Test mode: 10-fold cross-validation === Classifier model (full training set) === FilteredClassifier using weka.classifiers.lazy.IBk -K 5 -W 0 -A "weka.core.neighboursearch.LinearNNSearch -A \"weka.core.EuclideanDistance -R first-last\"" on data filtered through weka.filters.unsupervised.attribute.AddNoise -C last -P 10 -S 1 Filtered Header @relation Glass-weka.filters.unsupervised.attribute.AddNoise-Clast-P10-S1 @attribute RI numeric @attribute Na numeric @attribute Mg numeric @attribute Al numeric @attribute Si numeric @attribute K numeric @attribute Ca numeric @attribute Ba numeric @attribute Fe numeric @attribute Type {'build wind float','build wind non-float','vehic wind float','vehic wind non-float',containers,tableware,headlamps} @data Classifier Model IB1 instance-based classifier using 5 nearest neighbour(s) for classification Time taken to build model: 0.01 seconds === Stratified cross-validation === === Summary === Correctly Classified Instances 138 64.486 % Incorrectly Classified Instances 76 35.514 % Kappa statistic 0.5026 Mean absolute error 0.1265 Root mean squared error 0.2635 Relative absolute error 59.7351 % Root relative squared error 81.1902 % Coverage of cases (0.95 level) 90.6542 % Mean rel. region size (0.95 level) 32.1095 % Total Number of Instances 214 === Detailed Accuracy By Class === TP Rate FP Rate Precision Recall F-Measure MCC ROC Area PRC Area Class 0.843 0.257 0.615 0.615 0.615 0.553 0.858 0.684 build wind float 0.618 0.167 0.671 0.671 0.671 0.461 0.836 0.709 build wind non-float 0.118 0.020 0.333 0.333 0.333 0.159 0.604 0.150 vehic wind float 0.000 0.000 0.000 0.000 0.000 0.000 ? ? vehic wind non-float 0.308 0.025 0.444 0.444 0.444 0.337 0.960 0.551 containers 0.444 0.010 0.667 0.667 0.667 0.529 0.896 0.492 tableware 0.759 0.027 0.815 0.815 0.815 0.754 0.901 0.841 headlamps Weighted Avg. 0.645 0.150 0.631 0.645 0.626 0.502 0.843 0.656 === Confusion Matrix === a b c d e f g <-- classified as 59 9 2 0 0 0 0 | a = build wind float 24 47 1 0 3 0 1 | b = build wind non-float 11 4 2 0 0 0 0 | c = vehic wind float 0 0 0 0 0 0 0 | d = vehic wind non-float 0 6 0 0 4 0 3 | e = containers 1 2 0 0 1 4 1 | f = tableware 1 2 1 0 1 2 22 | g = headlamps


在上圖的折線圖中,橫坐標為噪聲,縱坐標為分類准確率。對折線圖進行分析,容易得到如下結論:
第一,當噪聲增大時,分類准確率隨之下降;
第二,改變k值,對分類正確率的影響較為復雜。當分類噪聲百分比較小(低於60%) 時,增大k值會增加分類准確率:但分類噪聲百分比較大(約高於60%)時,增大k值會降 低分類准確率。
11、研究改變訓練集大小的影響
本節討論學習曲線,顯示訓練數據量逐漸増加后的效果。同樣使用玻璃數據集,但這—次使用IBk以及在Weka中的實現為J48的C4.5決策樹學習器。
獲取學習曲線,再次使用FilteredClassifier分類器,這一次結合Resample (其全稱為 weka. filters.unsupervised. instance.Resampie)過濾器,其功能是抽取出給定的一定比例的數據集,返回減少后的數據集。與上一個示例相同,只為第一批訓練數據應用過濾器,所以測試數據通過FilteredClassifier分類器到達分類器之前,並不會受任何修改。
具體步驟是,首先加載玻璃數據集,然后選擇FilteredClassifier分類器。


打開通用對象編輯器編輯該分類器的參數,分別選擇classifier為IBk和J48, filter參數為Resample, 如下圖所示。


選擇classifier為IBK(k=1)或J48。同時修改Resample過濾器的子樣本大小百分比 sampleSizePercent參數,從10%—直到100%。


.. 省略

選擇classifier為IBK(k=1)或J48。同時修改Resample過濾器的子樣本大小百分比 sampleSizePercent參數,從10%—直到100%。

...省略

每次設置完畢后,單擊Start按鈕啟動訓練和評估,將得到的分類正確率如下表中。


4、聚類
聚類是對物理對象或抽象對象的集合進行分組的過程,所生成的組

