首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么使用插入符号::train(.,method = "rpart")的结果与rpart::rpart(.)不同?

为什么使用插入符号::train(.,method = "rpart")的结果与rpart::rpart(.)不同?
EN

Stack Overflow用户
提问于 2015-03-20 13:09:10
回答 1查看 3.4K关注 0票数 9

我正在参加课程实用机器学习课程,课程要求使用这个数据集建立预测模型。在将数据分割为trainingtesting数据集之后,根据感兴趣的结果(此处标有y,但实际上是dataset中的classe变量):

代码语言:javascript
复制
inTrain <- createDataPartition(y = data$y, p = 0.75, list = F) 
training <- data[inTrain, ] 
testing <- data[-inTrain, ] 

我尝试过两种不同的方法:

代码语言:javascript
复制
modFit <- caret::train(y ~ ., method = "rpart", data = training)
pred <- predict(modFit, newdata = testing)
confusionMatrix(pred, testing$y)

代码语言:javascript
复制
modFit <- rpart::rpart(y ~ ., data = training)
pred <- predict(modFit, newdata = testing, type = "class")
confusionMatrix(pred, testing$y)

我假设它们会给出相同或非常相似的结果,因为初始方法加载'rpart‘包(建议我将这个包用于方法)。然而,时间(caret要慢得多)&结果是非常不同的:

Method 1 (caret)

代码语言:javascript
复制
Confusion Matrix and Statistics

Reference
Prediction    A    B    C    D    E
         A 1264  374  403  357  118
         B   25  324   28  146  124
         C  105  251  424  301  241
         D    0    0    0    0    0
         E    1    0    0    0  418

Method 2 (rpart)

代码语言:javascript
复制
Confusion Matrix and Statistics

Reference 
Prediction    A    B    C    D    E
         A 1288  176   14   79   25
         B   36  569   79   32   68
         C   31   88  690  121  113
         D   14   66   52  523   44
         E   26   50   20   49  651

如您所见,第二种方法是更好的分类器--对于D& E类,第一种方法非常差。

我知道这可能不是最适合提出这个问题的地方,但我很希望能对这个问题和有关问题有更多的了解。caret似乎是统一方法和调用语法的一个很好的包,但我现在对使用它犹豫不决。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-20 16:41:34

实际上,caret在引擎盖下做得更多。特别是它使用交叉验证来优化模型的超参数。。在您的示例中,它尝试三个cp值(键入modFit,您将看到每个值的准确性结果),而rpart只使用0.01,除非您告诉它(参见?rpart.control)。交叉验证也需要更长的时间,特别是在默认情况下caret使用引导。

为了获得类似的结果,您需要禁用交叉验证并指定cp

代码语言:javascript
复制
modFit <- caret::train(y ~ ., method = "rpart", data = training,
                       trControl=trainControl(method="none"),
                       tuneGrid=data.frame(cp=0.01))

此外,对于这两种模型,您应该使用相同的随机种子。

尽管如此,caret提供的额外功能是一件好事,您可能应该只使用caret。如果你想了解更多,这是充分的文档,作者有一本著名的书,应用预测建模。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29167265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档