【发布时间】:2019-08-25 19:49:26
【问题描述】:
我尝试使用kknn + 循环为模型创建留一交叉验证,并将其与 train.kknn 进行比较。
我将数据分为两部分:训练(80% 数据)和测试(20% 数据)。在训练数据中,我排除了循环中的一个点来手动创建 LOOCV。
我认为predict(knn.fit, data.test) 出了点问题。我试图通过 kknn 包指令和在线查找如何在kknn 中进行预测,但所有示例都是“summary(model)”和“table(validation...)”,而不是对单独测试数据的预测。代码predict(model, dataset) 在train.kknn 函数中成功运行,所以我想我可以在kknn 中使用类似的参数。
我不确定kknn中是否有这样的预测功能。如果是,我应该给出什么论据?
期待您的建议。谢谢。
library(kknn)
for (i in 1:nrow(data.train)) {
train.data <- data.train[-i,]
validation.data <- data.train[i,]
knn.fit <- kknn(as.factor(R1)~., train.data, validation.data, k = 40,
kernel = "rectangular", scale = TRUE)
# train.data + validation.data is the 80% data I split.
}
pred.knn <- predict(knn.fit, data.test) # data.test is 20% data.
这是错误信息:
开关错误(类型,原始 = object$fit,prob = object$prob, stop("invalid type for prediction")) : EXPR 的长度必须为 1 向量
其实我尝试比较 train.kknn 和 kknn+loop 来比较leave-out-one CV的结果。我还有两个问题:
1) 在kknn: 是否可以使用另一组数据作为测试数据来查看knn.fit 预测?
2) intrain.kknn:我将数据拆分并使用整个数据的 80%,并打算将剩余的 20% 用于预测。这是正确的惯例吗?
2) 还是应该将原始数据(整个数据集)用于train.kknn,并创建一个循环:data[-i,] 用于训练,data[i,] 用于在kknn 中进行验证?那么他们会是对手吗?
我发现如果我使用train.kknn函数中的训练数据并在测试数据集上使用预测,则选择最佳k和内核直接用于基于测试数据集生成预测值。
相比之下,如果我使用kknn函数并构建不同k值的循环,模型会根据
每次改变 k 值时的测试数据集。最后在kknn+循环中,根据测试数据的最佳实际预测准确率选择最佳k。简而言之,选择的最佳 k train.kknn 可能不适用于测试数据。
谢谢。
【问题讨论】:
标签: r knn nearest-neighbor