我正在参加课程实用机器学习课程,课程要求使用这个数据集建立预测模型。在将数据分割为training和testing数据集之后,根据感兴趣的结果(此处标有y,但实际上是dataset中的classe变量):
inTrain <- createDataPartition(y = data$y, p = 0.75, list = F)
training <- data[inTrain, ]
testing <- data[-inTrain, ] 我尝试过两种不同的方法:
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)我假设它们会给出相同或非常相似的结果,因为初始方法加载'rpart‘包(建议我将这个包用于方法)。然而,时间(caret要慢得多)&结果是非常不同的:
Method 1 (caret)
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 418Method 2 (rpart)
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似乎是统一方法和调用语法的一个很好的包,但我现在对使用它犹豫不决。
发布于 2015-03-20 16:41:34
实际上,caret在引擎盖下做得更多。特别是它使用交叉验证来优化模型的超参数。。在您的示例中,它尝试三个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))此外,对于这两种模型,您应该使用相同的随机种子。
尽管如此,caret提供的额外功能是一件好事,您可能应该只使用caret。如果你想了解更多,这是充分的文档,作者有一本著名的书,应用预测建模。
https://stackoverflow.com/questions/29167265
复制相似问题