kunlong00 2018-06-30
支持向量机是一种可用于分类和回归的监督机器学习算法。SVM更常用于分类问题,因此,这就是我们在本文中关注的内容。
在该算法中,我们将每个数据项绘制为n维空间中的一个点(其中n是您拥有的特性的数量),每个特性的值是一个特定坐标的值。然后,我们通过寻找最优超平面来进行分类,从而很好地区分这两个类。
超平面是一维数据的点,二维数据的线,三维数据的平面等。
在图中,显然存在两个类。一个类用蓝色圆圈表示,另一个类用红色方块表示。现在我们必须找到一条线,将这两个类分开。正如你看到的,有很多行分离了这两个类,那么在这种情况下,最优的线是什么?
如果线过得太靠近点,就会很糟糕,因为它会对噪声敏感,而且不会正确地泛化。因此,我们的目标应该是找到从所有点尽可能远的经过的直线。
支持向量机算法的操作是基于寻找给训练样本最大最小距离的超平面。在支持向量机的理论中,这个距离两次接收到重要的边界名。因此,最佳分离超平面最大化了训练数据的边际。
现在寻找最优超平面的任务在上面的例子中很简单,因为数据点是线性可分离的。但是如果数据点不是线性可分的呢?在这种情况下,我们如何找到最优超平面。
考虑下面的情况,我们的目标是找到一个超平面,将两个类分开。正如你所看到的那样,不存在可以分隔两个类的一条线。SVM可以解决这个问题。我们可以引入一个新的特征z =x²+y²并绘制z特征。
在SVM中,在这两个类之间很容易有一个线性超平面。但是,另一个亟待解决的问题是,我们是否需要手动添加这个特性才能拥有一个超平面。SVM有一种叫做kernel trick的技术。这些函数取低维输入空间并将其转化为高维空间,即将不可分离问题转化为可分离问题,这些函数称为kernels。它在非线性分离问题中最有用。
SVM算法是在实践中使用kernel实现的。在线性支持向量机中,超平面的学习是通过使用一些线性代数来转换问题来完成的。
多项式内核
它在图像处理中很受欢迎。
等式是:
其中d是多项式的次数。
高斯内核
它是通用的内核;当对数据没有预先了解时使用。方程是:
拉普拉斯RBF内核
它是通用内核; 在没有关于数据的先验知识时使用。
等式是:
SVM的TUNNING参数
SVM可以使用sklearn在python中实现
sklearn.svm.SVC(C=1.0, kernel='rbf', degree=3, gamma=0.0, coef0=0.0, shrinking=True, probability=False,tol=0.001, cache_size=200, class_weight=None, verbose=False, max_iter=-1, random_state=None)
我正在采取的参数是: -
优点:
缺点: