我有一个包含6216个观测值和17个预测因子的数据集。我想为regression
分析构建一个SVM
。我的目标是调整超参数,以便尽可能地改进模型。我这样做是为了教学目的,所以我必须展示linear
,radial basis function
,polynomial
和sigmoid
内核的最佳解决方案,因为函数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
。
1条答案
按热度按时间rqdpfwrv1#
我用这个答案更新了这个问题,因为我发现了一个更快的方法来防止每个警告。它只是用
train
和trainControl
函数来实现的。实际上,为了获得更快的调优,有必要选择随机搜索超参数,而不是网格。通过写这两行,调优svm超参数非常容易。字符串
在我的例子中,这个解决方案大约需要2分钟,而问题中的解决方案大约需要10/15分钟。唯一的缺点是我没有在经典的
train
函数中找到sygmoid内核方法。