序列最小最优化算法(SMO)的变量优化的第一个变量,你是怎么选择的呢?

作为svm算法的核心,smo算法是我们必须要吃透的。该算法的主要思想是:如果所有变量的解都满足最优化问题的KKT条件,那么这个最优化问题的解就是这个变量,因为KKT条件是这个最优化问题的充分必要条件。否则,选择两个变量,固定其他变量,针对这两个变量构建一个二次规划问题。这两个变量,一个是违反KKT条件最严重的那一个,另一个由约束条件自动确定。好了,李航老师的书就抄到这里吧!

上面说其中的一个变量需要违反KKT条件最恨,我们该怎样把它找出来呢?哎,要求有点高,还最恨?好好,要求降低一些,我们怎样找出一个违反KKT条件的变量呢?换句话说,给你一个变量,大佬你怎么判断它是否违反KKT条件呢?

我觉得可以采用逆向思维:要判断变量是否违反KKT条件,我们可以先给出KKT条件,若满足每个条件,就说明它没有违反,否则就违反了。好机智👌,这里KKT条件长这样:
图片说明
这样一来,我们就可以写出判断变量是否违反KKT条件的代码了。

def _KKT(self, i):
    y_g = self._u(i)*self.Y[i]
    if self.alpha[i] == 0:
        return y_g >= 1
    elif 0 < self.alpha[i] < self.C:
        return y_g == 1
    else:
        return y_g <= 1
全部评论

相关推荐

1 收藏 评论
分享
牛客网
牛客企业服务