【发布时间】:2016-06-13 14:26:33
【问题描述】:
我对 r 的 caret 包很熟悉,但是,它来自其他编程语言,让我非常困惑。
我现在要做的是一个相当简单的机器学习工作流程,即:
- 获取一个训练集,在我的例子中是 iris 数据集
- 将其拆分为训练和测试集(80-20 拆分)
- 对于从
1到20的每个k,在训练集上训练k最近邻分类器 - 在测试集上测试它
我了解如何执行第一部分,因为 iris 已经加载。然后,第二部分通过调用来完成
a <- createDataPartition(iris$Species, list=FALSE)
training <- iris[a,]
test <- iris[-a,]
现在,我也知道我可以通过调用来训练模型
library(caret)
knnFit <- train()
knnFit <- train(Species~., data=training, method="knn")
但是,这将导致r 已经对参数k 执行了一些优化。当然,我可以限制 k 方法应该尝试的值,例如
knnFit <- train(Species~., data=training, method="knn", tuneGrid=data.frame(k=1:20))
它工作得很好,但它仍然不是我想要它做的。这段代码现在可以为每个k:
- 从
test获取引导样本。 - 使用给定样本评估
k-nn 方法的性能
我想要它做什么:
- 对于每个
k,在我之前构建的同一训练集上训练模型 - 在我之前构建的同一测试集上评估性能。
所以我需要类似的东西
knnFit <- train(Species~., training_data=training, test_data=test, method="knn", tuneGrid=data.frame(k=1:20))
但这当然行不通。
我知道我应该对 trainControl 参数做一些事情,但我看到它可能的方法是:
"boot", "boot632", "cv", "repeatedcv", "LOOCV", "LGOCV", "none"
这些似乎都不能满足我的要求。
【问题讨论】: