行搜索在训练ksvm prob.model时失败

行搜索在训练ksvm prob.model时失败,r,svm,kernlab,R,Svm,Kernlab,后续行动来自: 我正在使用R中kernlab软件包中的ksvm训练SVM。我想使用概率模型,但在sigmoid拟合过程中,我得到以下错误消息: line search fails -1.833726 0.5772808 5.844462e-05 5.839508e-05 -1.795008e-08 -1.794263e-08 -2.096847e-12 发生这种情况时,prob.model(m)的结果值是所有概率的向量,而不是在这些概率上拟合的sigmoid函数的预期参数。导致此错误的原因是

后续行动来自:

我正在使用R中kernlab软件包中的ksvm训练SVM。我想使用概率模型,但在sigmoid拟合过程中,我得到以下错误消息:

line search fails -1.833726 0.5772808 5.844462e-05 5.839508e-05 -1.795008e-08 
-1.794263e-08 -2.096847e-12
发生这种情况时,
prob.model(m)
的结果值是所有概率的向量,而不是在这些概率上拟合的sigmoid函数的预期参数。导致此错误的原因是什么?如何防止?搜索错误消息未产生任何结果

可复制示例:

load(url('http://roelandvanbeek.nl/files/df.rdata'))
ksvm(label~value,df[1:1000],C=10,prob.model=TRUE)->m 
prob.model(m) # works as it should, prints a list containing one named list

# the below, non-working problem, unfortunately takes an hour due to the large
# sample size
ksvm(label~value,df,C=10,prob.model=TRUE)->m # line search fails  
prob.model(m) # just a vector of values

查看源代码

它是在方法
.probPlatt
上使用牛顿法来优化函数,在本例中是Platt的缩放。如果您进行检查,您将看到一些与该方法相关的参数

其中一个参数是
minstep
基本上是最小的数值步,该方法应不断尝试优化函数。您知道,这正是第3090行中错误的条件:
if(stepsize
。因此,基本上,函数不会收敛,即使在达到最小步长时也是如此


您可以尝试将
minstep
更改为较低的值以规避此问题。Alexandros甚至评论说这些参数应该在界面中。

在我看来,问题是随机出现的。因此,我通过多次拟合ksvm模型来避免这个问题,直到它起作用为止

stop.crit = 1
while (stop.crit <= 10) {
    stop.crit = stop.crit + 1
    MOD = ksvm(...)
    tryCatch(PRED = predict(...), error = function(e) e)
    if (exists("PRED") == TRUE) stop.crit = 11
}
stop.crit=1

虽然(stop.crit我不了解优化器的行为。如果达到最大迭代,没有问题。但是如果步长低于最小步长,它会调用
。SigmoidPredict
,它不会返回
A
B
。我认为解决方案不是减少
最小步长,而是不调用
。SigmoidPredicte> 顺便说一句,我不明白他们为什么不使用glm来估计A和B

这是一个基于cran最新来源的存储库,调用SigmoidPredict已被注释掉


devtools::install\u github('elad663/kernlab'))

你找到了这个问题吗?没有。我确实发现在较小的数据集上也会出现这种情况,但还没有找到一致的解释。通常,减少或增加观察次数可以解决问题,这会增加问题的不规则性…@roelandvanbeek,当我尝试绘制le时,我看到了问题我的数据集的学习曲线,但当我只运行某些70/30分割时,例如,它没有显示问题?这就是你减少或增加观察值的意思吗?你是说我们应该更改代码并重新编译它吗?@EB是关于更改代码,但不严格要求重新编译。@灾难性失败我不这么认为了解优化器的行为。如果达到最大迭代,没有问题。但是如果步长低于最小步长,它会调用
。SigmoidPredict
,它不会返回A和B。我不认为解决方案是减少最小步长,而不是调用
。SigmoidPredict
。思考?