R 中的資料探勘演算法/分類/JRip
此類實現了一個命題規則學習器,即重複增量修剪以產生誤差減少 (RIPPER),該學習器由 William W. Cohen 提出,是 IREP 的最佳化版本。它基於關聯規則和減少誤差修剪 (REP),這是一種在決策樹演算法中發現的非常常見且有效的技術。在 REP 用於規則演算法中,訓練資料被分成一個增長集和一個修剪集。首先,形成一個初始規則集,該規則集使用某種啟發式方法過度擬合增長集。然後,透過應用一組修剪運算元來反覆簡化此過大的規則集,典型的修剪運算元是刪除任何單個條件或任何單個規則。在簡化的每個階段,選擇的修剪運算元是在修剪集上產生最大誤差減少的運算元。當應用任何修剪運算元都會增加修剪集上的誤差時,簡化結束。
該演算法簡要描述如下:初始化 RS = {},對於從較不普遍的類到較頻繁的類的每個類,執行
重複步驟 1.1 和 1.2,直到規則集和示例的描述長度 (DL) 比迄今為止遇到的最小 DL 大 64 位,或者沒有正示例,或者錯誤率 >= 50%。
透過貪婪地向規則新增先決條件(或條件)來增長一個規則,直到該規則完美(即 100% 準確)。該過程嘗試每個屬性的每個可能值,並選擇資訊增益最高的條件:p(log(p/t)-log(P/T))。
增量修剪每個規則,並允許修剪先決條件的任何最終序列;修剪度量是 (p-n)/(p+n) - 但實際上是 2p/(p+n) -1,因此在此實現中我們僅使用 p/(p+n)(實際上是 (p+1)/(p+n+2),因此如果 p+n 為 0,則為 0.5)。
在生成初始規則集 {Ri} 後,使用過程 1.1 和 1.2 從隨機資料中生成並修剪每個規則 Ri 的兩個變體。但是一個變體是從空規則生成的,而另一個變體是透過貪婪地向原始規則新增先決條件生成的。此外,此處使用的修剪度量是 (TP+TN)/(P+N)。然後計算每個變體和原始規則的最小可能 DL。選擇 DL 最小的變體作為規則集中 Ri 的最終代表。在檢查完 {Ri} 中的所有規則後,如果仍然存在殘留的正值,則使用建立階段再次基於殘留的正值生成更多規則。3. 刪除規則集中如果在規則集中會增加整個規則集的 DL 的規則。並將生成的規則集新增到 RS 中。ENDDO 請注意,原始 ripper 程式中似乎有兩個錯誤會稍微影響規則集的大小和準確性。此實現避免了這些錯誤,因此與 Cohen 的原始實現略有不同。即使在修復錯誤後,由於在 ripper 中未定義具有相同頻率的類的順序,因此此實現與原始 ripper 之間仍然存在一些微不足道的差異,特別是對於 UCI 儲存庫中的聽力學資料,其中存在大量例項很少的類。詳細資訊請參閱
- 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 提供。

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

首先,我們需要指定要使用的基準
> 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)
-
JRip 準確率與 NumOpt 引數的關係圖。
- William W. Cohen:快速有效的規則歸納。在:第十二屆國際機器學習會議,115-123,1995 年。