算法研习:支持向量机算法基本原理分析

2019-06-19 20:12:44 浏览数 (1)

支持向量机(SVM)是一种监督学习算法,可用于分类和回归问题。支持向量机是最常用也是大家最熟悉的算法,你可能不懂其算法原理,但你绝对听说过这种算法。今天算法研习第三节就来说说关于向量机的基本思想,具体有以下五个问题。

1、什么是SVM?

2、超平面和支持向量

3、SVM内核

4、特征选择

5、Python调用SVM

什么是SVM

支持向量机(SVM)是一种机器学习算法,可用于许多不同的任务。

SVM的主要目标是找到最佳超平面,以便在不同类的数据点之间进行正确分类。超平面维度等于输入特征的数量减去1(例如,当使用三个特征时,超平面将是二维平面)。

为了分离两类数据点,可以选择许多可能的超平面。我们的目标是找到一个具有最大边距的平面,即两个类的数据点之间的最大距离。最大化边距的目的是最大概率的对未知的数据点进行正确分类。

超平面和支持向量

超平面是决策边界,有助于对数据点进行分类。落在超平面两侧的数据点可归因于不同的类。此外,超平面的尺寸取决于特征的数量。如果输入要素的数量是2,则超平面只是一条线。如果输入要素的数量是3,则超平面变为二维平面。当特征数量超过3时,就超出我们的想象了。

最接近超平面的数据点称为支持向量。支持向量确定超平面的方向和位置,以便最大化分类器边界(以及分类分数)。SVM算法应该使用的支持向量的数量可以根据应用任意选择。

SVM内核

如果我们使用的数据不是线性可分的(因此导致线性SVM分类结果不佳),则可以应用称为Kernel Trick的技术。此方法能够将非线性可分离数据映射到更高维空间,使我们的数据可线性分离。使用这个新的维度空间SVM可以很容易地实现。

SVM中有许多不同类型的内核可用于创建这种更高维度的空间,例如线性,多项式,Sigmoid和径向基函数(RBF)。在Scikit-Learn中,可以通过添加内核参数来指定内核函数svm.SVC,也可以通过gamma参数来指定内核对模型的影响。如果特征数量大于数据集中的样本数量,则建议使用线性内核(否则RBF可能是更好的选择)。

特征选择

在SVM中,我们可以使用.coef_训练模型访问分类器系数 。这些权重表示与超平面正交的正交矢量坐标。他们的方向代表预测的阶级。于是通过将这些系数的大小相互比较来确定特征重要性。因此通过查看SVM系数,可以识别分类中使用的主要特征,并消除不重要的特征(保持较小的方差)。

减少机器学习中的功能数量起着非常重要的作用,尤其是在处理大型数据集时。实际上,这可以:加速训练,避免过度拟合,并最终通过降低数据噪音来获得更好的分类结果。例如下图中显示了在Pima Indians糖尿病数据库中使用SVM识别的主要特征。在绿色中显示对应于负系数的所有特征,而蓝色显示为正系数。

Python调用SVM

使用Scikit-Learn Python库在几行代码中轻松实现基本SVM分类。

代码语言:javascript复制
from sklearn import svm 
trainedsvm = svm.SVC().fit(X_Train,Y_Train)
predictionsvm = trainedsvm.predict(X_Test)
print(confusion_matrix(Y_Test,predictionsvm))
print(classification_report(Y_Test,predictionsvm))

SVM算法在进行分类时可选择硬边距或软边距:

  • 硬边距:旨在找到最好的超平面而不会容忍任何形式的错误分类。
  • 软边距:我们在SVM中添加了一定程度的容差。通过这种方式,我们允许模型对一些数据点进行错误分类,从而增加模型的泛化性能。

软边距SVM可以通过在Scikit-Learn中的svm.SVC中添加C惩罚系数实现。C越大表示算法在进行错误分类时得到的惩罚越多。

0 人点赞