机器学习:支持向量机(SVM)

kunlong00 2018-06-30

机器学习:支持向量机(SVM)

支持向量机是一种可用于分类和回归的监督机器学习算法。SVM更常用于分类问题,因此,这就是我们在本文中关注的内容。

在该算法中,我们将每个数据项绘制为n维空间中的一个点(其中n是您拥有的特性的数量),每个特性的值是一个特定坐标的值。然后,我们通过寻找最优超平面来进行分类,从而很好地区分这两个类。

超平面是一维数据的点,二维数据的线,三维数据的平面等。

最佳超平面

机器学习:支持向量机(SVM)

在图中,显然存在两个类。一个类用蓝色圆圈表示,另一个类用红色方块表示。现在我们必须找到一条线,将这两个类分开。正如你看到的,有很多行分离了这两个类,那么在这种情况下,最优的线是什么?

如果线过得太靠近点,就会很糟糕,因为它会对噪声敏感,而且不会正确地泛化。因此,我们的目标应该是找到从所有点尽可能远的经过的直线。

机器学习:支持向量机(SVM)

支持向量机算法的操作是基于寻找给训练样本最大最小距离的超平面。在支持向量机的理论中,这个距离两次接收到重要的边界名。因此,最佳分离超平面最大化了训练数据的边际。

现在寻找最优超平面的任务在上面的例子中很简单,因为数据点是线性可分离的。但是如果数据点不是线性可分的呢?在这种情况下,我们如何找到最优超平面。

如果DATAPOINTS不是线性可分的?

机器学习:支持向量机(SVM)

考虑下面的情况,我们的目标是找到一个超平面,将两个类分开。正如你所看到的那样,不存在可以分隔两个类的一条线。SVM可以解决这个问题。我们可以引入一个新的特征z =x²+y²并绘制z特征。

机器学习:支持向量机(SVM)

在SVM中,在这两个类之间很容易有一个线性超平面。但是,另一个亟待解决的问题是,我们是否需要手动添加这个特性才能拥有一个超平面。SVM有一种叫做kernel trick的技术。这些函数取低维输入空间并将其转化为高维空间,即将不可分离问题转化为可分离问题,这些函数称为kernels。它在非线性分离问题中最有用。

KERNELS

SVM算法是在实践中使用kernel实现的。在线性支持向量机中,超平面的学习是通过使用一些线性代数来转换问题来完成的。

SVM KERNELS示例

多项式内核

它在图像处理中很受欢迎。

等式是:

机器学习:支持向量机(SVM)

其中d是多项式的次数。

高斯内核

它是通用的内核;当对数据没有预先了解时使用。方程是:

机器学习:支持向量机(SVM)

拉普拉斯RBF内核

它是通用内核; 在没有关于数据的先验知识时使用。

等式是:

机器学习:支持向量机(SVM)

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)

我正在采取的参数是: -

  • Kernel:我们有各种可用的内核选项,如' linear ', ' rbf ', ' poly '等。这里的“rbf”和“poly”用于非线性超平面。
  • Gamma:“rbf”、“poly”和“sigmoid”的核系数。当伽马值越高时,则会尝试根据训练数据集拟合,即泛化误差,导致过拟合问题。
  • C:误差项的惩罚参数C。它还控制了平滑决策边界和正确分类训练点之间的权衡。

与SVM相关的优点和缺点

优点:

  • 它工作得很好,分离的边界很清晰
  • 它在高维空间中很有效。
  • 它在维数大于样本数的情况下有效。
  • 它使用决策函数中的一个训练点子集(称为支持向量),因此它也具有内存效率。

缺点:

  • 如果我们有大量数据,因为所需的训练时间较长,它表现不佳
  • 当数据集有更多的噪音即目标类重叠时,它也表现不佳
  • 支持向量机不直接提供概率估计,这些是使用昂贵的五倍交叉验证来计算的。它与Python scikit-learn库的SVC方法有关。

相关推荐