什么是SVM?
便于理解,先从二维数据集开始。假如在平面上有圆圈和三角形,希望用一条直线来将它们分隔开。

这条直线,好像这么放是可以把它们分开的

但如果再增加几个圆圈和三角形(增加样本的数量),有的圆圈分错了

其实在第一次分开他们的时候,可以画很多条不同的线都能够将他们分开,但只有我们画的那条线,距离每个样本点都尽可能远的情况下,在新增加样本点后才不会出现有的样本被分错的情况,所以这条线可以这么画

SVM就是找到这个最佳的画线的位置,来把这两个类别很好地分开;
上边的两种类别的样本没有交叉混淆在一起,所以前面画线的时候还是很容易的,如果是下面这种情况,好像就没法轻易画一条线将他们分开了

在二维平面上,我们好像可以用曲线将他们分开

想象这些圆圈和三角形在一个三维空间中,那么就可以用一个平面将它们分开

上面的例子中,圆圈和三角形就是数据(data),最开始画的分隔线就是分类面(classifier),因为可以画很多条线来分开,但是要找最优的(即有最大的间隔),这个找最优的过程就是优化(optimization),让平面中的样本转到空间中就是核映射(kernelling),将它们分开的平面就是超平面(hyperplane)。
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/178278.html原文链接:https://javaforall.net
