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

为什么使用插入符号::train(…,method=";rpart";)的结果与rpart::rpart(…)不同?,r,r-caret,rpart,R,R Caret,Rpart,我正在参加Coursera实用机器学习课程,该课程要求使用该工具构建预测模型。根据感兴趣的结果(此处标记为y,但实际上是数据集中的classe变量),将数据分为training和testing数据集后: 方法2(rpart): 如您所见,第二种方法是一种更好的分类器——第一种方法对于D&E类来说非常糟糕 我意识到这可能不是问这个问题的最合适的地方,但我真的希望能对这个问题和相关问题有更多的了解插入符号似乎是统一方法和调用语法的一个很好的包,但我现在不太愿意使用它。插入符号实际上在幕后做得更多。特

我正在参加Coursera实用机器学习课程,该课程要求使用该工具构建预测模型。根据感兴趣的结果(此处标记为
y
,但实际上是数据集中的
classe
变量),将数据分为
training
testing
数据集后:

方法2(rpart)

如您所见,第二种方法是一种更好的分类器——第一种方法对于D&E类来说非常糟糕


我意识到这可能不是问这个问题的最合适的地方,但我真的希望能对这个问题和相关问题有更多的了解<代码>插入符号似乎是统一方法和调用语法的一个很好的包,但我现在不太愿意使用它。

插入符号
实际上在幕后做得更多。特别是。在您的例子中,它尝试三个
cp
(键入
modFit
,您将看到每个值的准确度结果),而
rpart
仅使用0.01,除非您另有说明(请参见
?rpart.control
)。交叉验证也需要更长的时间,特别是因为默认情况下,
caret
使用引导

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

modFit <- caret::train(y ~ ., method = "rpart", data = training,
                       trControl=trainControl(method="none"),
                       tuneGrid=data.frame(cp=0.01))

modFit非常感谢@Peyton的回答-这解释了很多,也帮了很多忙!
modFit <- caret::train(y ~ ., method = "rpart", data = training)
pred <- predict(modFit, newdata = testing)
confusionMatrix(pred, testing$y)
modFit <- rpart::rpart(y ~ ., data = training)
pred <- predict(modFit, newdata = testing, type = "class")
confusionMatrix(pred, testing$y)
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
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
modFit <- caret::train(y ~ ., method = "rpart", data = training,
                       trControl=trainControl(method="none"),
                       tuneGrid=data.frame(cp=0.01))