我正在参加Coursera实践机器学习课程,课程作业要求使用这个数据集构建预测模型。根据感兴趣的结果(标记为y
,但实际上是数据集中的classe
变量),将数据分割为training
和testing
数据集:
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
慢得多)和结果却非常不同:
方法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 418
方法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
似乎是一个很好的包,可以统一这些方法和调用语法,但现在我有些犹豫是否要使用它。