跟进Invalid probability model for large support vector machines using ksvm in R:
我正在使用k中的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)
的结果值是所有概率的向量,而不是拟合在这些概率上的S形函数的预期参数 . 导致此错误的原因是什么?如何防止它?搜索错误消息没有产生任何结果 .
可重复的例子:
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
3 回答
看源代码,this is the line that throws that error .
它是在方法
.probPlatt
上使用牛顿方法来优化函数,在这种情况下是Platt的缩放 . 如果你检查line 3007虽然你会看到一些与该方法有关的参数 .其中一个参数是
minstep
,基本上是方法应该继续尝试优化函数的最小数字步骤 . 你看,这正是第3090行中错误的条件:if (stepsize < minstep)
. 因此,基本上,即使达到最小步长,功能也不会收敛 .您可以尝试将
minstep
更改为较低值以绕过它 . Alexandros甚至评论说这些参数可能应该在界面中 .在我看来,问题是随机发生的 . 因此,我通过多次拟合ksvm模型来规避问题直到它起作用 .
我不明白优化器的行为 . 如果达到最大迭代,没问题 . 但如果step低于min_step则调用
.SigmoidPredict
,它不会返回A
和B
. 我不认为解决方案是减少min_step
,而不是调用.SigmoidPredict
,所以我评论了它 . 顺便说一句,我不明白他们为什么不用glm来估算A和B.这是一个基于最新源代码的存储库,其中对SigmoidPredict的调用已经注释掉了 .
devtools::install_github('elad663/kernlab')