2013-04-09 90 views
12

Invalid probability model for large support vector machines using ksvm in R跟进:线搜索失败

我正在训练的SVM使用ksvm从kernlab包R.我想使用的概率模型,但乙状结肠在装配过程中,我得到以下错误消息:

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 
+0

你能想出来吗? – 2013-06-03 17:56:34

+4

不,我发现它也发生在较小的数据集中,但尚未能找到一致的解释。通常,减少或增加观察次数可以修复问题,从而增加其本质的不规则性... – roelandvanbeek 2013-07-03 12:12:37

+0

@roelandvanbeek,当我尝试为我的数据集绘制学习曲线时,我看到问题,但是当我仅运行例如某些分裂70/30,它不显示该问题?这是你的意思吗减少或增加观察? – 2017-09-23 03:14:55

回答

1

看的源代码,this is the line that throws that error

它的方法.probPlatt使用牛顿法优化函数,在这种情况下,普拉特的缩放。如果您检查line 3007,虽然您会看到有关该方法的一些参数。

其中一个这样的参数是minstep基本上最小的数字步骤方法应该不断尝试优化功能。你看,这正是第3090行错误的条件:​​。所以,基本上,即使达到最小步长,功能也不收敛。

您可以尝试更改minstep以降低值以避开它。 Alexandros甚至评论说这些参数应该可能在界面中。

+0

您是否在说我们应该更改代码并重新编译它? – 2017-09-23 03:14:04

+0

@EB是的,关于改变代码,虽然并不严格要求重新编译。 – 2017-09-23 15:09:45