1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 支持向量机(SVM)——线性支持向量机

支持向量机(SVM)——线性支持向量机

时间:2020-01-15 23:22:25

相关推荐

支持向量机(SVM)——线性支持向量机

SVM能够做线性或者非线性的分类,回归,甚至异常值检测,适合应用于复杂但中小规模数据集的分类问题。

线性支持向量机

下图是鸢尾花数据集一部分,两个种类能够很容易被一条线分开,左图显示了线性分类器做出的三种可能边界。虚线是一条很差的判定边界,不能正确的划分类别,另外两个线性模型的判定边界虽然能分开,但他们的判定边界离样本点太近,对新数据的表现可能不好。右图中 SVM 分类器的判定边界实线,不仅分开了两种类别,而且还尽可能地远离了最靠近的训练数据点。你可以认为 SVM 分类器在两种类别之间保持了一条尽可能宽敞的街道(图中平行的虚线),其被称为最大间隔分类。

我们注意到添加更多的样本点在“街道”外并不会影响到判定边界,因为判定边界是由位于“街道”边缘的样本点确定的,这些样本点被称为“支持向量”(上图中被圆圈圈起来的点),用中学生的话说就是找两个类别中相距最近的两点,连起来,求它们的法线。

硬间隔分类:严格规定所有数据都不在中间街道上,分布在两边。存在两个问题:1.只对线性可分的数据起作用。2.对异常点敏感。下面左图很难找到硬间隔,右图判定边界很难一般化

软间隔分类:为了避免硬间隔的问题,在保持街道尽可能大和避免间隔违规之间找到一个良好的平衡。可以使用更加软性的模型。

SKlearn的SVM类中是通过C超参数(惩罚系数)来控制平衡,下图显示了在非线性可分隔的数据集上,两个软间隔SVM分类器的判定边界。左边图中,使用了较大的C值,导致更少的间隔违规,但是间隔较小。右边的图,使用了较小的C值,间隔变大了,但是许多数据点出现在了“街道”上。然而,第二个分类器似乎泛化地更好:事实上,在这个训练数据集上减少了预测错误,因为实际上大部分的间隔违规点出现在了判定边界正确的一侧。

如果SVM模型过拟合,可以通过减小超参数C去调整。

SKLearn代码,生成模型为上右图

import numpy as npfrom sklearn import datasetsfrom sklearn.pipeline import Pipelinefrom sklearn.preprocessing import StandardScalerfrom sklearn.svm import LinearSVCiris = datasets.load_iris()X = iris["data"][:, (2, 3)] # petal length, petal widthy = (iris["target"] == 2).astype(np.float64) # Iris-Virginicasvm_clf = Pipeline((("scaler", StandardScaler()),("linear_svc", LinearSVC(C=1, loss="hinge")),))svm_clf.fit(X, y)Then, as usual, you can use the model to make predictions:>>> svm_clf.predict([[5.5, 1.7]])array([ 1.])

转自SKLearn实战

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