SVM,support vector machine,是一种经典的分类算法,本文重点讲解SVM的原理,目的是读者快速理解SVM,关于算法中复杂的数学推导及代码,感兴趣读者可在后台留言,我将为大家单独分享。
分类算法,旨在将样本合理的分成不同类别,即用一个超平面将样本点划分开,但有时这样的超平面不止一个,如何选择最鲁棒的超平面呢?
SVM的思想是:使分开后的样本间距离最大。在上图中,蓝色为超平面,两条虚线的间距为两个类别之间的距离。
从SVM思想可以看出,分类的关键是如何使得两条虚线的间距最大化,也就是如何使得两个类别分得更开。当找到鲁棒的超平面后,两条虚线也被固定,此时除了虚线上的样本点(即支持向量)外,其他样本点的分布对模型毫无影响。
抽象的数学表达式为:
max 2/w
s.t. y(wx + b) ≥1
接下来就是优化问题了
拓展一:
如果样本本身无法线性分割呢?
此时可以将样本映射到更高维的空间,比如二维到三维,三维到十维等,只要不断往高维映射,最终总会找到一个超平面将样本线性分割。其实很好理解,样本个数没变,放样本的空间变更加广阔,想要分开就简单了。那之后又回归到上面的问题,通过优化得到最大间距求解(在求解过程中会用到核函数)。
拓展二:
训练得到的模型在测试样本上会不会过拟合呢?
是有这个可能的,在训练集上过分追求完美(即上面的硬间隔)往往在测试集上表现不好,SVM的应对方法是,允许在分割线之间存在一些未分类的杂质,我们称这种方法为软间隔。
拓展三:从二分类到多分类
拓展四:从SVM到SVR(支持向量回归)