SVM In MNIST
算法原理简述:
算法中的主要证明在此处不做赘述;主要是介绍代码和与之对应的算法原理。首先,我们是从所有的alpha中调整了其顺序,先遍历那些符合0<alpha<c的数据;然后根据偏离kkt条件的程度,选择出alpha1和alpha2;然后我们根据选择出的alpha1和alpha2计算出alpha1的上下界;计算在未约束的情况下alpha1的最优值;根据和上下界的关系确定新的alpha1值;根据alpha1值确定alpha2值;接下来我们根据新的alpha1和alpha2更新对应的b值和对应的E函数值;至此一轮的迭代结束。
算法中的主要思路是我们有原始问题;但是原始问题相对难以求解,所以选择对偶问题来突破。得到对偶问题的解我们就可以逆向求解得到原始问题的解。对偶问题涉及到多个变量的二次规划问题;所以我们选择每次选择两个变量来不断逼近最优解。选择变量的方式就是找到最不符合KKT条件的第一个变量;然后根据第一个变量找到|E1 - E2|最大的那个第二个变量即可。
代码如下:
|
|
代码运行结果:
从运行结果可以知道,训练的时间较长,且预测的正确率较低。通过与sklearn的包的内置函数比较,正确率和训练时间等方面都较差于sklearn的svm。