跳转到内容

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 年。
华夏公益教科书