1. 程式人生 > >基於weka的資料探勘開發技術分析研究

基於weka的資料探勘開發技術分析研究

一、基本概念

 

資料探勘就是在資料中尋找模式的過程。(如客戶忠誠度分析、市場購物籃分析等)

 

這個尋找過程可以是自動的或者是半自動的。(資料量特別大的時候只能是自動的)

 

而自動的資料分析方法則來自機器學習的結果。(機器學習就是自動找出資料模式的一套方法)

 

分類與迴歸

         分類函式或者分類模型,預測資料的類別。區別:分類是離散值,迴歸是連續值。

聚類分析

        

把資料劃分成不同的簇

關聯分析

         資料的聯絡,發現關聯規則

二、關聯規則挖掘

定義

關聯規則:分為兩部分,一個是規則的前提,一個是規則的結論。即由前提推匯出結論。

覆蓋率=支援度:可以表示為0-1之間的一個比值(小數),指的是滿足整個規則(前提和結論)的例項數與例項總數的比例。

最低支援度:就是支援度的下限的意思。

 

準確率=置信度:書面上的解釋為:表示支援度數值佔應用規則後的例項數量的比例。這段話估計沒幾個人能看的明白,其實很簡單。就是滿足某個規則的前提,又滿足該規則的結論的例項數(雙滿足),與 滿足這個規則前提(單滿足)的例項數之比。它的目的其實就是告訴使用者,符合了這個規則的前提,有多大比例能導致這個規則推匯出的結論。

 

項集 包含 多個 項:每個項都是 欄位名=欄位值 的形式

 

提升度:
提升度指的是: 符合規則前提的例項,其置信度 除以 所有例項的置信度(指符合當前關聯規則的結論),所得的倍數。 P(L,R)/(P(L)P(R))   4/14   /  4/14  * 9/14
這是一個衡量關聯價值的指標,獨立於支援度
Lift=1時表示LR獨立。這個數越大,越表明LR存在在一個購物籃中不是偶然現象。
英文原文定義如下:

Lift is confidence divided by the proportion of all examples that are covered by the consequence.

This is a measure of the importance of the association that is independent of support.

 

槓桿率:指的是新增例項符合關聯規則的前提及結論的比例是多少。後面括號中的數字就是符合這個槓桿率的例項數量。P(L,R)-P(L)P(R)    4/14 -  4/14 * 9/14

它和Lift的含義差不多。Leverage=0LR獨立,Leverage越大LR的關係越密切。

Leverage is the proportion of additional examples covered by both the premise and consequence above those expected if the premise and consequence were independent of each other. The total number of examples that this represents is presented in brackets following the leverage.

 

確信度:

確信度= P(L)P(!R)/P(L,!R) !R表示R沒有發生),P(L,!R)  最小值為 P(1),而不是實際的P(0)     4/14  * 5/14  /  1/14  =

Conviction is another measure of departure from independence. Conviction is given by P(premise)P(!consequence) / P(premise, !consequence).

 

例項1

Weather.nominal.arff

單擊 Explorer  開啟 探索者介面。 單擊 open file ,然後選擇Weather.nominal.arff 檔案。

(這個檔案在你weka的安裝資料夾下,我的是 C:\Program Files\Weka-3-7\data 下)

 

單擊 Edit  可以開啟 Weather.nominal.arff  中的資料,我們可以檢視、排序、修改、刪除資料,也可以刪除欄位、修改欄位名等操作。

注意一點:這裡的修改隻影響記憶體中的資料,對資料檔案本身沒有影響。

最上面的一行是欄位名、欄位型別。

因為關聯演算法只支援欄位型別為nominal(就是字元型) 的欄位資料,所以如果遇到numeric(就是數字)的欄位型別,得先轉化。轉化的方式就是分類(比如小於10的屬於一類, 10 – 20 的一類等等),如果不想分類的話,就直接刪掉這個數字欄位。(分類其實也是一個複雜的資料探勘大功能,但我們就採用自定義分類的方式簡單處理好了)

 

切換到 associate 面板,在關聯面板中我們可以發現系統已經幫我們預設選擇了apriori 關聯演算法,還指定了一大堆預設引數。 其實關聯演算法就兩個,預設的這個就是我們要用的那個,所以什麼都不用設,直接單擊 start, 開始挖掘吧 (其實,為了更好的挖掘,那些引數是需要改動的)。

         挖掘的結果都在右邊欄那一大堆英文上顯示出來了。下面一個一個解釋。(左邊欄那個就是什麼時候開始,用什麼演算法挖掘的意思)

=== Run information ===            //執行資訊

 

Scheme:       weka.associations.Apriori -N 10 -T 0 -C 0.9 -D 0.05 -U 1.0 -M 0.1 -S -1.0 -c -1  

//用了什麼演算法 + 引數

Relation:     weather.symbolic   //資料集名稱

Instances:    14               //例項數,其實就是資料行數

Attributes:   5                //屬性數,就是欄位數

              Outlook        // 欄位列表,5個欄位名稱被一一列出

              temperature

              humidity

              windy

              play

=== Associator model (full training set) ===  // 關聯模型 (完整的訓練集),機器學習的過程又叫訓練,意思就是完整的機器學習,找出了下面這些模式規律

 

 

Apriori   //演算法名字

=======

 

Minimum support: 0.15 (2 instances)  //最低支援度 0.15,也就是15%。總數的15%也就是14*0.15=2.1  約為2 個例項

 

Minimum metric <confidence>: 0.9 // 最低置信度 0.9

Number of cycles performed: 17  //演算法迴圈執行了17次,這個次數是由兩個演算法引數決定的,後面會解釋

 

Generated sets of large itemsets:  //生成的頻繁項集列表(只要符合最低支援度0.15,即2個例項滿足即可,此時還不涉及結論,只是前提)

 

Size of set of large itemsets L(1): 12  //12 個大小為1 的項集

 

Size of set of large itemsets L(2): 47   //47 個大小為2 的項集

 

Size of set of large itemsets L(3): 39   //39 個大小為3 的項集

 

Size of set of large itemsets L(4): 6    //6 個大小為4 的項集

 

如果你想看看到底都是些什麼項集的話,可以把演算法引數的outputitemsets 設定成 true。你就會看到這些東西:

Generated sets of large itemsets:

 

Size of set of large itemsets L(1): 12

 

Large Itemsets L(1):

outlook=sunny 5   // 後面的數字表示符合這個項集的例項數

outlook=overcast 4

outlook=rainy 5

temperature=hot 4

temperature=mild 6

temperature=cool 4

humidity=high 7

humidity=normal 7

windy=TRUE 6

windy=FALSE 8

play=yes 9

play=no 5

 

Size of set of large itemsets L(2): 47

 

Large Itemsets L(2):

outlook=sunny temperature=hot 2

outlook=sunny temperature=mild 2

outlook=sunny humidity=high 3

outlook=sunny humidity=normal 2

outlook=sunny windy=TRUE 2

outlook=sunny windy=FALSE 3

outlook=sunny play=yes 2

outlook=sunny play=no 3

outlook=overcast temperature=hot 2

outlook=overcast humidity=high 2

outlook=overcast humidity=normal 2

outlook=overcast windy=TRUE 2

outlook=overcast windy=FALSE 2

outlook=overcast play=yes 4

outlook=rainy temperature=mild 3

outlook=rainy temperature=cool 2

outlook=rainy humidity=high 2

outlook=rainy humidity=normal 3

outlook=rainy windy=TRUE 2

outlook=rainy windy=FALSE 3

outlook=rainy play=yes 3

outlook=rainy play=no 2

temperature=hot humidity=high 3

temperature=hot windy=FALSE 3

temperature=hot play=yes 2

temperature=hot play=no 2

temperature=mild humidity=high 4

temperature=mild humidity=normal 2

temperature=mild windy=TRUE 3

temperature=mild windy=FALSE 3

temperature=mild play=yes 4

temperature=mild play=no 2

temperature=cool humidity=normal 4

temperature=cool windy=TRUE 2

temperature=cool windy=FALSE 2

temperature=cool play=yes 3

humidity=high windy=TRUE 3

humidity=high windy=FALSE 4

humidity=high play=yes 3

humidity=high play=no 4

humidity=normal windy=TRUE 3

humidity=normal windy=FALSE 4

humidity=normal play=yes 6

windy=TRUE play=yes 3

windy=TRUE play=no 3

windy=FALSE play=yes 6

windy=FALSE play=no 2

 

Size of set of large itemsets L(3): 39

 

Large Itemsets L(3):

outlook=sunny temperature=hot humidity=high 2

outlook=sunny temperature=hot play=no 2

outlook=sunny humidity=high windy=FALSE 2

outlook=sunny humidity=high play=no 3

outlook=sunny humidity=normal play=yes 2

outlook=sunny windy=FALSE play=no 2

outlook=overcast temperature=hot windy=FALSE 2

outlook=overcast temperature=hot play=yes 2

outlook=overcast humidity=high play=yes 2

outlook=overcast humidity=normal play=yes 2

outlook=overcast windy=TRUE play=yes 2

outlook=overcast windy=FALSE play=yes 2

outlook=rainy temperature=mild humidity=high 2

outlook=rainy temperature=mild windy=FALSE 2

outlook=rainy temperature=mild play=yes 2

outlook=rainy temperature=cool humidity=normal 2

outlook=rainy humidity=normal windy=FALSE 2

outlook=rainy humidity=normal play=yes 2

outlook=rainy windy=TRUE play=no 2

outlook=rainy windy=FALSE play=yes 3

temperature=hot humidity=high windy=FALSE 2

temperature=hot humidity=high play=no 2

temperature=hot windy=FALSE play=yes 2

temperature=mild humidity=high windy=TRUE 2

temperature=mild humidity=high windy=FALSE 2

temperature=mild humidity=high play=yes 2

temperature=mild humidity=high play=no 2

temperature=mild humidity=normal play=yes 2

temperature=mild windy=TRUE play=yes 2

temperature=mild windy=FALSE play=yes 2

temperature=cool humidity=normal windy=TRUE 2

temperature=cool humidity=normal windy=FALSE 2

temperature=cool humidity=normal play=yes 3

temperature=cool windy=FALSE play=yes 2

humidity=high windy=TRUE play=no 2

humidity=high windy=FALSE play=yes 2

humidity=high windy=FALSE play=no 2

humidity=normal windy=TRUE play=yes 2

humidity=normal windy=FALSE play=yes 4

 

Size of set of large itemsets L(4): 6

 

Large Itemsets L(4):

outlook=sunny temperature=hot humidity=high play=no 2

outlook=sunny humidity=high windy=FALSE play=no 2

outlook=overcast temperature=hot windy=FALSE play=yes 2

outlook=rainy temperature=mild windy=FALSE play=yes 2

outlook=rainy humidity=normal windy=FALSE play=yes 2

temperature=cool humidity=normal windy=FALSE play=yes 2

 

下面就是真正的結論,乾貨了。

 

Best rules found:  //發現的最好規則

 

 1. outlook=overcast 4 ==> play=yes 4    <conf:(1)> lift:(1.56) lev:(0.1) [1] conv:(1.43)

outlook=overcast  4 個例項符合這個前提,play=yes 4 個例項符合這個結論。

置信度 1 , 4除以4 不就是1 嗎,表示只要符合這個前提,百分百得出這個結論。

Conf:置信度

Lift:提升度

Lev:槓槓率

Conv:確信度

 

 

 2. temperature=cool 4 ==> humidity=normal 4    <conf:(1)> lift:(2) lev:(0.14) [2] conv:(2)

 

 3. humidity=normal windy=FALSE 4 ==> play=yes 4    <conf:(1)> lift:(1.56) lev:(0.1) [1] conv:(1.43)

 4. outlook=sunny play=no 3 ==> humidity=high 3    <conf:(1)> lift:(2) lev:(0.11) [1] conv:(1.5)

 5. outlook=sunny humidity=high 3 ==> play=no 3    <conf:(1)> lift:(2.8) lev:(0.14) [1] conv:(1.93)

 6. outlook=rainy play=yes 3 ==> windy=FALSE 3    <conf:(1)> lift:(1.75) lev:(0.09) [1] conv:(1.29)

 7. outlook=rainy windy=FALSE 3 ==> play=yes 3    <conf:(1)> lift:(1.56) lev:(0.08) [1] conv:(1.07)

 8. temperature=cool play=yes 3 ==> humidity=normal 3    <conf:(1)> lift:(2) lev:(0.11) [1] conv:(1.5)

 9. outlook=sunny temperature=hot 2 ==> humidity=high 2    <conf:(1)> lift:(2) lev:(0.07) [1] conv:(1)

10. temperature=hot play=no 2 ==> outlook=sunny 2    <conf:(1)> lift:(2.8) lev:(0.09) [1] conv:(1.29)

 

 

引數解釋

單擊choose 後面的編輯框,就彈出引數設定介面了。重要的紅色標註。

Car : 預設false ,分類關聯規則。設定為true 的話會採用分類關聯規則挖掘,以取代預設的普通關聯規則。

ClassIndex:類別屬性的索引,預設-1,表示最後一個屬性作為類別屬性。

Delta:演算法從支援度1- delta0.05)開始計算執行 ,每執行一次減一次,直到達到最低支援度(0.10+delta0.05)為止(再執行下去就不符合大於0.10的要求了)。 1- 17*0.05 = 0.15 ,這就是為什麼演算法會執行17次的原因。(執行之前先減delta

LowerBoundMinSupport:最低支援度

MetricType:衡量標準 (預設置信度)

MinMetric 最低置信度 (這個值跟metricType相關聯的)

NumRules:生成規則數

OutputItemSets: 是否顯示頻繁項集

UpperBoundMinSupport:最高支援度

RemovAllMissingCols:是否移除所有的空欄位

TreatZeroAsMissing:是否把0作為空值來處理

Significancelevel:顯著性水平

Donotcheckcapabilities:是否檢查演算法的能力

Verbose:是否啟用詳細模式

 

例項2

vote.arff

 

 

例項3

supermarket.arff

 

 

=== Run information ===

 

Scheme:       weka.associations.Apriori -N 10 -T 0 -C 0.9 -D 0.05 -U 1.0 -M 0.1 -S -1.0 -c -1

Relation:     supermarket

Instances:    4627

Attributes:   217

              [list of attributes omitted]

=== Associator model (full training set) ===

 

 

Apriori

=======

 

Minimum support: 0.15 (694 instances)

Minimum metric <confidence>: 0.9

Number of cycles performed: 17

 

Generated sets of large itemsets:

 

Size of set of large itemsets L(1): 44

 

Size of set of large itemsets L(2): 380

 

Size of set of large itemsets L(3): 910

 

Size of set of large itemsets L(4): 633

 

Size of set of large itemsets L(5): 105

 

Size of set of large itemsets L(6): 1

 

Best rules found:

 

 1. biscuits=t frozen foods=t fruit=t total=high 788 ==> bread and cake=t 723    <conf:(0.92)> lift:(1.27) lev:(0.03) [155] conv:(3.35)

 2. baking needs=t biscuits=t fruit=t total=high 760 ==> bread and cake=t 696    <conf:(0.92)> lift:(1.27) lev:(0.03) [149] conv:(3.28)

 3. baking needs=t frozen foods=t fruit=t total=high 770 ==> bread and cake=t 705    <conf:(0.92)> lift:(1.27) lev:(0.03) [150] conv:(3.27)

 4. biscuits=t fruit=t vegetables=t total=high 815 ==> bread and cake=t 746    <conf:(0.92)> lift:(1.27) lev:(0.03) [159] conv:(3.26)

 5. party snack foods=t fruit=t total=high 854 ==> bread and cake=t 779    <conf:(0.91)> lift:(1.27) lev:(0.04) [164] conv:(3.15)

 6. biscuits=t frozen foods=t vegetables=t total=high 797 ==> bread and cake=t 725    <conf:(0.91)> lift:(1.26) lev:(0.03) [151] conv:(3.06)

 7. baking needs=t biscuits=t vegetables=t total=high 772 ==> bread and cake=t 701    <conf:(0.91)> lift:(1.26) lev:(0.03) [145] conv:(3.01)

 8. biscuits=t fruit=t total=high 954 ==> bread and cake=t 866    <conf:(0.91)> lift:(1.26) lev:(0.04) [179] conv:(3)

 9. frozen foods=t fruit=t vegetables=t total=high 834 ==> bread and cake=t 757    <conf:(0.91)> lift:(1.26) lev:(0.03) [156] conv:(3)

10. frozen foods=t fruit=t total=high 969 ==> bread and cake=t 877    <conf:(0.91)> lift:(1.26) lev:(0.04) [179] conv:(2.92)

 

可以發現

  1. 購買餅乾或冷凍食品 ,會 購買水果 或 蔬菜 (水果 8 條規則,蔬菜 4條規則)
  2. 購買餅乾、冷凍食品 、水果、蔬菜,會購買麵包、蛋糕(多條)
  3. 購買上述食品的,採購量會很大(金額高) (9條)
  4. 採購量會很大(金額高)的,一般會購買麵包、蛋糕(10條規則都包含這兩項)

 

三、專案功能設計

 

挖掘結論可以做一個圖表形式,一目瞭然,且有助於自動分析。

自動分析可以在挖掘結論圖表的基礎上進行一些計算,得出一些總結建議。也可以弄一個圖表的形式。

 

四、WEKA 其它功能

連線sql 2012 資料庫

  1. 下載sql jdbc 驅動jar包 。微軟官網去下載就行了
  2. 下載下來的壓縮包有4個jar檔案。

sqljdbc.jar

sqljdbc4.jar

sqljdbc41.jar

sqljdbc42.jar

在看了文件之後,我們就知道應該選擇sqljdbc42.jar 了

  1. 把sqljdbc42.jar 拷貝到一個沒有中文路徑的資料夾下(建議不要藏太深)

我就這樣

  1. 加上環境變數

Java是通過環境變數找需要的jar包的

  1. 去weka.jar\weka\experiment 中找到 DatabaseUtils.props.mssqlserver2005 檔案

拷貝出來,放到C:\Program Files\Weka-3-7資料夾下,用sql的查詢分析器開啟它

注意這兩行

下面的改成 jdbc:sqlserver://192.168.2.52;databaseName=Wisdom

 

  1. 回到weka

  1. 單擊 1 : 選擇剛才的那個DatabaseUtils.props.mssqlserver2005 檔案

單擊2 :輸入使用者名稱,密碼

單擊3 : 連線資料庫

單擊4:輸入sql

單擊 execute ,可以看到結果了。

 

最下面的info 欄,其實也是可以給出連線提示的。

懂點英文的都看的明白。

 

Weka原始碼匯入專案

因為接下來的開發工作很大程度上得參考weka的原始碼,所有必須得把weka的原始碼跑起來。

  1. 下載eclipse,32位的eclipse最新版下一個就行。(我的jdk是32位的,所以eclipse也得是32位的,當然如果jdk64位的,當然eclipse也得是64位了)
  2. 解壓即可(所有的java程式都是解壓就能用的)。
  3. 在Eclipse下新建工程,可以命名為weka,在src下新建名為weka的包;
  4. 在此專案下import-->File System-->選擇.../weka/src/main/java/weka,並全部匯入;
  5. 匯入庫檔案,在專案上右鍵,biuldpath-->add external Archive-->選擇lib裡的

java-cup.jar  JFlex.jar  junit.jar  packageManager.jar;

  1. 執行weka.gui.main即可;

五、開發說明

首先專案需要引入兩個dll

 

Weka.dll 其實就是拿weka的java原始碼,由IKVM 轉化而來的。這也是為什麼要同時引入IKVM 的dll的原因。

 IKVM轉換weka.jar的命令是:ikvmc -target:library weka.jar。執行後,會產生一個新的檔案weka.dll。

  IKVM 是綠色的,下載解壓就行。

 

從arff檔案中載入資料

new weka.core.Instances(newjava.io.FileReader("G:\\test.arff"));

儲存資料至arff檔案

DataSink.write(‘/some/where/data.arff’,data)

 

 

Apriori 演算法程式碼

 

 

Explorer 程式碼

我們其實只用關注這3個程式碼檔案就行了。

基本功能程式碼都在這3個程式碼檔案中。

 

其它功能請參考api文件

 

六、迴歸分析

定義

迴歸分析屬於分類的一種,分類:得到一個分類函式或分類模型(即分類器),通過分類器將未知的資料物件對映到某個給定的類別(迴歸是某個值)。

分類可分為兩步:1、建立模型

                                     2、使用模型對資料物件進行分類

分類是預測離散的值,迴歸是預測連續的值

 

所有迴歸模型均符合同一個通用模式。多個自變數綜合在一起可以生成一個結果一個因變數。然後用迴歸模型根據給定的這些自變數的值預測一個未知的因變數的結果。

 

一個例子就是給房子定價。房子的價格(因變數)是 很多自變數房子的面積、佔地的大小、廚房是否有花崗石以及衛生間是否剛重灌過等的結果。所以,不管是購買過一個房子還是銷售過一個房子,您都可能會建立一個迴歸模型 來為房子定價。這個模型建立在鄰近地區內的其他有可比性的房子的售價的基礎上(模型),然後再把您自己房子的值放入此模型來產生一個預期價格。

 

對於迴歸模型,只能是 NUMERIC

 

在有監督(supervise)的機器學習中,資料集常被分成2~3個,即:訓練集(train set) 驗證集(validation set) 測試(test set)我們這沒有驗證集。

 

其中訓練集用來估計模型,而測試集則檢驗最終選擇最優的模型的效能如何。二部分都是從樣本中隨機抽取。


樣本少的時候,對N個樣本採用K折交叉驗證法。就是將樣本打亂,然後均勻分成K份,輪流選擇其中K1份訓練,剩餘的一份做測試,計算預測誤差平方和,最後把K次的預測誤差平方和再做平均作為選擇最優模型結構的依據。特別的KN,就是留一法(leave one out

例項1

在預處理面板中載入cpu.arff 檔案

單擊 Classify 選項卡

單擊 Choose 按鈕,然後擴充套件 functions 分支。

選擇 LinearRegression 葉。

 

Test  options   測試選項的解釋如下

Use training set   //用當前指定的資料集中的全部資料進行學習,資料都是訓練集,同時也是測試集

Suplied test  set   //另外指定一個測試集 

Cross-validation   //交叉驗證,在給定的建模樣本中,拿出大部分樣本進行建模型,留小部分樣本用剛建立的模型進行預報,並求這小部分樣本的預報誤差,記錄它們的平方加和。這個過程一直進行,直到所有的樣本都被預報了一次而且僅被預報一次。需要輸入折數,就是平均分成幾份的意思。

Percentage split  //按比例分割 在資料集中,取出特定比例的資料用於訓練(訓練集)。其餘的用來測試(測試集)

 

選擇好因變數class,預設就是

 

選擇第一項的分析結果

=== 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:    evaluate on training data     基於訓練資料的評估

 

=== Classifier model (full training set) ===   分類器形式   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.04 seconds

 

=== Evaluation on training set ===

 

Time taken to test model on training data: 0.01 seconds

 

=== Summary ===

 

Correlation coefficient                  0.93  //相關係數

Mean absolute error                     37.9748   //平均絕對誤差  

Root mean squared error                 58.9899    //均方根誤差

Relative absolute error                 39.592  %    //相對絕對誤差

Root relative squared error             36.7663 %     //相對均方根誤差

Total Number of Instances              209     //例項總數

 

 

選擇第三項的分析結果

=== 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.01 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    

 

選擇第四項的分析結果

=== 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:    split 66.0% train, remainder test

 

=== 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 seconds

 

=== Evaluation on test split ===

 

Time taken to test model on training split: 0 seconds

 

=== Summary ===

 

Correlation coefficient                  0.9158

Mean absolute error                     38.1617

Root mean squared error                 48.9672

Relative absolute error                 45.5102 %

Root relative squared error             46.332  %

Total Number of Instances               71     (參與測試的資料數量 209*34%)

 

例項2

M5P 演算法

一種很實用的迴歸演算法。這個演算法是決策樹和線性迴歸演算法的一個結合體。

舉一個例子向大家說明。

預測 處理器晶片的價格。 處理器晶片分為電腦使用的通用晶片(代表是Intel 和 AMD)和手機、嵌入式裝置使用的晶片(ARM晶片)。即使兩種晶片的其他引數大體一致,通用晶片和嵌入式晶片的價格還是會有很大不同。如果在生成迴歸模型的時候把這兩類晶片的資料混為一談,那麼生成出來的線性模型的誤差必定會變得很大。如果能用決策樹演算法把樣本預先分成兩類(通用和嵌入式),然後對兩個分類分別進行迴歸演算法,那麼迴歸模型就會好很多。

 

在trees條目下找到M5P演算法。

其它都一樣

結果如下:

=== 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:    evaluate on training data

 

=== 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     CHMIN <= 7.5 的前提下使用該演算法,下面的類似

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.11 seconds

 

=== Evaluation on training set ===

 

Time taken to test model on training data: 0 seconds

 

=== Summary ===

 

Correlation coefficient                  0.9728

Mean absolute error                     21.9246

Root mean squared error                 37.5095

Relative absolute error                 22.8582 %

Root relative squared error             23.3784 %

Total Number of Instances              209    

 

貌似m5p演算法效能更優秀。而且它可以顯示演算法樹

右鍵 result list 的條目,在選單上選擇 visualize tree。

括號裡的數字表示: 前一個是達到該節點的例項數量

後一個是標準偏差

 

比較演算法優劣

右鍵 result list 的條目,在選單上選擇visualize  classifier errors

彈出下面介面

叉叉代表一個數據點,越大代表誤差越大,反之誤差越小。所以評價演算法的優劣一個直觀的辦法就是看誰小叉叉多,大叉叉少。  M5P演算法大叉叉要少點。

 

 

七、程式碼分析

Weka 中待分析的資料是放在一個數據集中的:Instances

它包含著多個數據物件:Instance  , 每個 Instance  就相當於是我們的一行記錄。

 

Instances 可以從資料檔案(*.arff)中整個讀取進來。也可以從資料庫中整個讀取(通過sql查詢語句,但一般情況下是不可能的,因為資料格式不相容),通常資料來源是資料庫的話,我們還是得建立 instance(需要格式轉換等一系列操作),然後一個一個插入instances

 

Instances 需要指定類欄位(後面的分析需要)

 

Instances 有很多Attribute,就是屬性,相當於是欄位屬性

 

各種演算法類(關聯演算法、迴歸演算法)都實現了 OptionHandler 介面,我們可以通過這個介面來獲取、設定 演算法引數。

 

每個演算法都有一個父類(Apriori 演算法的父類:Associator

 LinearRegression、m5p 演算法的父類 Classifier

 

可以通過Classifier 來執行他們公共的方法