跳轉到內容

R 中的資料探勘演算法/分類/JRip

來自 Wikibooks,開放世界中的開放書籍

此類實現了一個命題規則學習器,即重複增量修剪以產生誤差減少 (RIPPER),該學習器由 William W. Cohen 提出,是 IREP 的最佳化版本。它基於關聯規則和減少誤差修剪 (REP),這是一種在決策樹演算法中發現的非常常見且有效的技術。在 REP 用於規則演算法中,訓練資料被分成一個增長集和一個修剪集。首先,形成一個初始規則集,該規則集使用某種啟發式方法過度擬合增長集。然後,透過應用一組修剪運算元來反覆簡化此過大的規則集,典型的修剪運算元是刪除任何單個條件或任何單個規則。在簡化的每個階段,選擇的修剪運算元是在修剪集上產生最大誤差減少的運算元。當應用任何修剪運算元都會增加修剪集上的誤差時,簡化結束。

該演算法簡要描述如下:初始化 RS = {},對於從較不普遍的類到較頻繁的類的每個類,執行

1. 建立階段

[編輯 | 編輯原始碼]

重複步驟 1.1 和 1.2,直到規則集和示例的描述長度 (DL) 比迄今為止遇到的最小 DL 大 64 位,或者沒有正示例,或者錯誤率 >= 50%。

1.1. 增長階段

[編輯 | 編輯原始碼]

透過貪婪地向規則新增先決條件(或條件)來增長一個規則,直到該規則完美(即 100% 準確)。該過程嘗試每個屬性的每個可能值,並選擇資訊增益最高的條件:p(log(p/t)-log(P/T))。

1.2. 修剪階段

[編輯 | 編輯原始碼]

增量修剪每個規則,並允許修剪先決條件的任何最終序列;修剪度量是 (p-n)/(p+n) - 但實際上是 2p/(p+n) -1,因此在此實現中我們僅使用 p/(p+n)(實際上是 (p+1)/(p+n+2),因此如果 p+n 為 0,則為 0.5)。

2. 最佳化階段

[編輯 | 編輯原始碼]

在生成初始規則集 {Ri} 後,使用過程 1.1 和 1.2 從隨機資料中生成並修剪每個規則 Ri 的兩個變體。但是一個變體是從空規則生成的,而另一個變體是透過貪婪地向原始規則新增先決條件生成的。此外,此處使用的修剪度量是 (TP+TN)/(P+N)。然後計算每個變體和原始規則的最小可能 DL。選擇 DL 最小的變體作為規則集中 Ri 的最終代表。在檢查完 {Ri} 中的所有規則後,如果仍然存在殘留的正值,則使用建立階段再次基於殘留的正值生成更多規則。3. 刪除規則集中如果在規則集中會增加整個規則集的 DL 的規則。並將生成的規則集新增到 RS 中。ENDDO 請注意,原始 ripper 程式中似乎有兩個錯誤會稍微影響規則集的大小和準確性。此實現避免了這些錯誤,因此與 Cohen 的原始實現略有不同。即使在修復錯誤後,由於在 ripper 中未定義具有相同頻率的類的順序,因此此實現與原始 ripper 之間仍然存在一些微不足道的差異,特別是對於 UCI 儲存庫中的聽力學資料,其中存在大量例項很少的類。詳細資訊請參閱

  1. William W. Cohen:快速有效的規則歸納。在:第十二屆國際機器學習會議,115-123,1995 年。

可以使用以下命令在 R 的命令列上安裝 caret 包

install.packages("caret", dependencies = TRUE)

上面的命令將遞迴地下載並安裝 caret 依賴的所有包,以及 fpc 本身。

本節中的示例將說明 caret 在 IRIS 資料庫上的 JRip 使用情況

>library(caret)
>library(RWeka)
>data(iris)
>TrainData <- iris[,1:4]
>TrainClasses <- iris[,5]
>jripFit <- train(TrainData, TrainClasses,method = "JRip")

案例研究

[編輯 | 編輯原始碼]

資料集

[編輯 | 編輯原始碼]

Iris 資料集包含 150 個例項,對應於三種等頻率的鳶尾屬植物(Iris setosa、Iris versicolour 和 Iris virginica)。下面展示了 Iris versicolor,由 Wikimedia Commons 提供。

Iris versicolor

每個例項包含四個屬性:花萼長度(釐米)、花萼寬度(釐米)、花瓣長度(釐米)和花瓣寬度(釐米)。下一張圖片顯示了每個屬性相對於其他屬性的繪圖,不同類別用顏色區分。

繪製 Iris 屬性

執行和結果

[編輯 | 編輯原始碼]

首先,我們需要指定要使用的基準

> data(iris)
> summary(iris)
  Sepal.Length    Sepal.Width     Petal.Length    Petal.Width   
 Min.   :4.300   Min.   :2.000   Min.   :1.000   Min.   :0.100  
 1st Qu.:5.100   1st Qu.:2.800   1st Qu.:1.600   1st Qu.:0.300  
 Median :5.800   Median :3.000   Median :4.350   Median :1.300  
 Mean   :5.843   Mean   :3.057   Mean   :3.758   Mean   :1.199  
 3rd Qu.:6.400   3rd Qu.:3.300   3rd Qu.:5.100   3rd Qu.:1.800  
 Max.   :7.900   Max.   :4.400   Max.   :6.900   Max.   :2.500  
       Species  
 setosa    :50  
 versicolor:50  
 virginica :50  

之後,我們就可以使用前 4 列建立用於預測第五列的樸素貝葉斯模型。

>data(iris)
>varIndex <- 1:numSamples
>
>TrainData <- iris[,1:4]
>TrainClasses <- iris[,5]
>jripFit <- train(TrainData, TrainClasses,method = "JRip",preProcess = c("center", "scale"),tuneLength = 10,trControl = trainControl(method = "cv"))
Loading required package: class

Attaching package: 'class'

The following object(s) are masked from 'package:reshape':

   condense

Fitting: NumOpt=1 
Fitting: NumOpt=2 
Fitting: NumOpt=3 
Fitting: NumOpt=4 
Fitting: NumOpt=5 
Fitting: NumOpt=6 
Fitting: NumOpt=7 
Fitting: NumOpt=8 
Fitting: NumOpt=9 
Fitting: NumOpt=10 
Aggregating results
Selecting tuning parameters
Fitting model on full training set
> jripFit

Call:
train.default(x = TrainData, y = TrainClasses, method = "JRip", 
    preProcess = c("center", "scale"), trControl = trainControl(method = "cv"), 
    tuneLength = 10)

150 samples
  4 predictors

Pre-processing: centered, scaled 
Resampling: Cross-Validation (10 fold) 

Summary of sample sizes: 135, 135, 135, 135, 135, 135, ... 

Resampling results across tuning parameters:

  NumOpt  Accuracy  Kappa  Accuracy SD  Kappa SD  Selected
  1       0.953     0.93   0.045        0.0675            
  2       0.953     0.93   0.045        0.0675    *       
  3       0.933     0.9    0.0444       0.0667            
  4       0.94      0.91   0.0584       0.0876            
  5       0.94      0.91   0.0584       0.0876            
  6       0.94      0.91   0.0584       0.0876            
  7       0.94      0.91   0.0584       0.0876            
  8       0.94      0.91   0.0584       0.0876            
  9       0.94      0.91   0.0584       0.0876            
  10      0.94      0.91   0.0584       0.0876            

Accuracy was used to select the optimal model using the largest value.
The final value used for the model was NumOpt = 2.

caret 包運行了訓練,將 NumOpt JRip 引數從 1 調優到 10,並選擇了效能最佳的引數,即 NumOpt=2,準確率為 95.3%。如果選擇了其他演算法,則會調整其他演算法引數。

如果我們繪製結果,我們將得到一個引數選擇準確率的圖

>plot(jripFit)

參考文獻

[編輯 | 編輯原始碼]
  1. William W. Cohen:快速有效的規則歸納。在:第十二屆國際機器學習會議,115-123,1995 年。
華夏公益教科書