R语言 在使用tune.svm时如何避免“达到最大迭代次数”

iqxoj9l9  于 2023-11-14  发布在  其他
关注(0)|答案(1)|浏览(328)

我有一个包含6216个观测值和17个预测因子的数据集。我想为regression分析构建一个SVM。我的目标是调整超参数,以便尽可能地改进模型。我这样做是为了教学目的,所以我必须展示linearradial basis functionpolynomialsigmoid内核的最佳解决方案,因为函数tune.svm使用10-fold cross validation作为默认值,所以我决定设置一个5-fold cross validation,以降低复杂度。
下面的代码是我试图在线性内核的情况下使用的代码,但我一直得到警告。

svm.tuning <- tune.svm(x = x_scaled[,names(x_scaled)!="sal_perc"],y = x_scaled[,"sal_perc"],
                            cost = 10^(-4:2), tunecontrol=tune.control(cross = 5), kernel="linear")

字符串
如果我运行它,它需要大约10/15分钟的时间来执行(10倍大约一个小时)。我不想想象其他内核需要多长时间,我甚至需要调整gamma参数。在运行它时,我一直看到这样的情况:

> svm.tuning <- tune.svm(x = x_scaled[,names(x_scaled)!="sal_perc"],y = x_scaled[,"sal_perc"],
+                             cost = 10^(-4:2), tunecontrol=tune.control(cross = 5), kernel="linear")

WARNING: reaching max number of iterations

WARNING: reaching max number of iterations

WARNING: reaching max number of iterations

WARNING: reaching max number of iterations

WARNING: reaching max number of iterations

WARNING: reaching max number of iterations

WARNING: reaching max number of iterations

WARNING: reaching max number of iterations

WARNING: reaching max number of iterations


我发现这个家伙也有同样的问题,但给出的解决方案是一个似乎不存在的包(Weird error message when tuning svm with polynomial kernel: "WARNING: reaching max number of iterations")。我还检查了问题是否来自我的数据,但它们是标准化和平衡的,如这里所解释的(https://stats.stackexchange.com/questions/37669/libsvm-reaching-max-number-of-iterations-warning-and-cross-validation).是否可以增加最大迭代次数?因为包含tune.svm的包e1071锁定了这个数字。但是,即使在cost超参数上只分配两个值,我也会得到warning

rqdpfwrv

rqdpfwrv1#

我用这个答案更新了这个问题,因为我发现了一个更快的方法来防止每个警告。它只是用traintrainControl函数来实现的。实际上,为了获得更快的调优,有必要选择随机搜索超参数,而不是网格。通过写这两行,调优svm超参数非常容易。

tune.ctrl <- trainControl(method = "cv",number = 5,search = "random")
svm.tunlin_game <- train(sal_perc ~., data=x_scaled, method="svmLinear2", metric="RMSE",tunecontrol=tune.ctrl)

字符串
在我的例子中,这个解决方案大约需要2分钟,而问题中的解决方案大约需要10/15分钟。唯一的缺点是我没有在经典的train函数中找到sygmoid内核方法。

相关问题