首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SMO算法陷入无限循环?

SMO算法陷入无限循环?
EN

Stack Overflow用户
提问于 2015-07-15 01:55:26
回答 1查看 260关注 0票数 0

我有兴趣建立一个支持向量机多类分类器,所以我目前正在实现顺序最小优化SMO。

我的实现是基于John C. Platt的“序贯最小优化快速训练支持向量机”中的伪码。

我观察到,对于某些训练例子。Smo可能会发散,并在主例程中遇到一个无限循环(以下循环)

numChanged = 0;

examineAll = 1;

时间(numChanged >0\x{ examineAll >0) {…}

可能会遇到无限的循环。

是否有防止smo算法例程陷入无限循环的线索或准则?

我要感谢你的回答。问候

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-15 11:39:42

如果需要,可以添加最大迭代条件:

代码语言:javascript
复制
while ((numChanged > 0 || examineAll) && iter < MaxIter)

但在大多数情况下,它不应该遇到无限循环,这是Platt的完整伪代码:

代码语言:javascript
复制
while (numChanged > 0 || examineAll)
{
    numChanged = 0;
    // Adding curly brackets for better readability
    if (examineAll)
    {
        loop I over all training examples
        numChanged += examineExample(I);
    }
    else
    {
        loop I over examples where alpha is not 0 & not C
        numChanged += examineExample(I);
    }

    if (examineAll == 1)
    {
        examineAll = 0;
    }
    else 
    {
        examineAll = 1;
    }
}

请注意,它正在执行一个迭代来检查示例,下一个迭代只对alpha不是0或C的示例执行相同的操作。如果在“检查所有”迭代之后没有任何更改,while循环条件将为false,因此停止循环。

因此,要使其处于无限循环中,必须有一个角的情况(可能是数值误差),它引入振荡,使示例在检查的所有阶段发生变化,但在“仅检查α== 0和C”中不发生变化。

通常情况下,如果数据在-1,1或0,1中进行归一化,且算法的参数有合理的值,则这些角点情况将是罕见的。无论如何,如果你想格外小心,你可以把最大-iter安全网。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31420227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档