【发布时间】:2021-06-16 09:58:29
【问题描述】:
我正在使用 caret::train() 函数开发具有 10 倍交叉验证的加权 knn 分类模型 (kknn) 和一个 tuneGrid 包含kmax 有 15 个值,distance 有 1 个值,kernel 有 3 个值。
如果我正确理解了这个过程,那么总共有 450 次迭代(迭代是计算给定结果的概率对于 kmax、distance 和内核)。 x 有大约 480,000 个数据点(6 个预测变量,每个有大约 80,000 个观察值),y 有大约 80,000 个数据点。
了解影响性能的变量数不胜数,如果在配备 8 核 3GHz Intel 处理器和 32GB RAM 的电脑上运行 train 函数,我可以合理地预期需要多长时间? p>
目前每次折叠大约需要 70 分钟,即每次迭代大约需要 1.5 分钟。这是合理的,还是过度的?
这是一个 kknn 学习练习。我意识到还有其他类型的算法可以更有效地产生更好的结果。
这里是基本代码:
x <- as.matrix(train_set2[, c("n_launch_angle", "n_launch_speed", "n_spray_angle_Kolp", "n_spray_angle_adj", "n_hp_to_1b", "n_if_alignment")])
y <- train_set2$events
set.seed(1)
fitControl <- trainControl(method = "cv", number = 10, p = 0.8, returnData = TRUE,
returnResamp = "all", savePredictions = "all",
summaryFunction = twoClassSummary, classProbs = TRUE,
verboseIter = TRUE)
tuneGrid <- expand.grid(kmax = seq(11, 39, 2),
distance = 2,
kernel = c("triangular", "gaussian", "optimal"))
kknn_train <- train(x, y, method = "kknn",
tuneGrid = tuneGrid, trControl = fitControl)
【问题讨论】:
-
您是在 Widows、OSX 还是 Linux 上运行?另外,为什么不并行运行呢?
-
编辑另外请记住,
tune.grid运行,例如,kmax = 1110 次,每个kernel;这继续。所以我不相信450次迭代是正确的。 -
它在 Windows 上运行。我想我的问题是,我应该并行运行吗?它似乎并不那么苛刻,除非我误解了幕后发生的事情,当您说 kmax = 11 导致每个内核进行 10 次迭代时,这似乎是您所暗示的。我不确定我是否理解。虽然文档将 kmax 定义为最大邻居数,但 kmax 也可用于指定特定 k 值的范围或序列。因此,我的代码创建的 tuneGrid 有 45 行(条目),列出了每个折叠的 45 种可能的参数组合。
-
首先,Windows 的定义很慢,除非您使用来自另一个星球的宇宙飞船和组件,Windows 与 R 兼容。无论如何,无论组合如何,您都可以尝试慢慢扩展您的数据。从 1/10 开始,看看需要多长时间。挺折腾的,你问我应该并行吧!
-
Serkan,感谢您的想法。
标签: performance classification cross-validation r-caret knn