训练ksvm prob.model中的行搜索失败

roe*_*eek 14 r svm kernlab

使用R中的ksvm大型支持向量机的无效概率模型中跟进:

我正在使用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
Run Code Online (Sandbox Code Playgroud)

当发生这种情况时,得到的值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
Run Code Online (Sandbox Code Playgroud)

cat*_*ure 1

查看源代码,这是引发该错误的行

它是.probPlatt使用牛顿法来优化函数的方法,在本例中是普拉特缩放。如果您检查第 3007 行,您会看到一些与该方法相关的参数。

这些参数之一minstep基本上是方法应不断尝试优化函数的最小数字步骤。你看,这正是第 3090 行错误的情况:if (stepsize < minstep)。因此,基本上,即使达到最小步长,该函数也不会收敛。

您可以尝试更改minstep为较低的值来规避它。亚历山德罗斯甚至评论说这些参数可能应该在界面中。