机器学习实战之支持向量机SVM-2
续:机器学习实战之支持向量机SVM-1
后来对前面的代码进行优化,主要是3方面:
1.更加合理选择j,取代原来的随机选择j;
j是从已更新的alpha值的列表中选取,也就是已发现的支持向量列表中选取。
选择原则是:max(abs(Ei-Ej)),
2.选择ai,先遍历整个数据集,后面只遍历支持向量数据集;只更新支持向量的ai,更加合理。
3.将数据结构化,整洁易懂。
对非线性数据的处理,要用到核函数。
这里用到高斯核函数,只用用核函数代替原来代码中的内积,就可以了。
代码中是将数据集和单条数据的内积都保存到(m,m)矩阵k中,用到内积的情况下直接调用就可以。
需要注意的是:
用到核函数以后,原来的w就失去了意义。
核函数用在两个高维映射的内积的情况下,将其转换成二维内积的计算方式。
二维的非线性优化问题,转化成高维,就成了线型优化问题;高维映射的内积,通过核函数转化成二维内积来进行计算。
里面有两个手动设定的参数,一个是高斯函数的delta值,一个是C;
delta值的设置关系到准确率:存在一个delta值的最优范围。1.3左右。
支持向量的最优数目,就是在保证高的准确率条件下,尽可能的少,以减少运算量。