300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 支持向量机算法基本原理分析

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

时间:2021-10-03 02:31:51

相关推荐

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

支持向量机(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分类。

fromsklearnimportsvmtrainedsvm=svm.SVC().fit(X_Train,Y_Train)predictionsvm=trainedsvm.predict(X_Test)print(confusion_matrix(Y_Test,predictionsvm))print(classification_report(Y_Test,predictionsvm))importsvm

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可以通过在Scikit-Learn中的svm.SVC中添加C惩罚系数实现。C越大表示算法在进行错误分类时得到的惩罚越多。

参考

/svm-feature-selection-and-kernels-840781cc1a6c

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。