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 年。