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

SVM能够做线性或者非线性的分类,回归,甚至异常值检测,适合应用于复杂但中小规模数据集的分类问题。
线性支持向量机
下图是鸢尾花数据集一部分,两个种类能够很容易被一条线分开,左图显示了线性分类器做出的三种可能边界。虚线是一条很差的判定边界,不能正确的划分类别,另外两个线性模型的判定边界虽然能分开,但他们的判定边界离样本点太近,对新数据的表现可能不好。右图中 SVM 分类器的判定边界实线,不仅分开了两种类别,而且还尽可能地远离了最靠近的训练数据点。你可以认为 SVM 分类器在两种类别之间保持了一条尽可能宽敞的街道(图中平行的虚线),其被称为最大间隔分类。
在这里插入图片描述
我们注意到添加更多的样本点在“街道”外并不会影响到判定边界,因为判定边界是由位于“街道”边缘的样本点确定的,这些样本点被称为“支持向量”(上图中被圆圈圈起来的点),用中学生的话说就是找两个类别中相距最近的两点,连起来,求它们的法线。

硬间隔分类:严格规定所有数据都不在中间街道上,分布在两边。存在两个问题:1.只对线性可分的数据起作用。2.对异常点敏感。下面左图很难找到硬间隔,右图判定边界很难一般化在这里插入图片描述
软间隔分类:为了避免硬间隔的问题,在保持街道尽可能大和避免间隔违规之间找到一个良好的平衡。可以使用更加软性的模型。
SKlearn的SVM类中是通过C超参数(惩罚系数)来控制平衡,下图显示了在非线性可分隔的数据集上,两个软间隔SVM分类器的判定边界。左边图中,使用了较大的C值,导致更少的间隔违规,但是间隔较小。右边的图,使用了较小的C值,间隔变大了,但是许多数据点出现在了“街道”上。然而,第二个分类器似乎泛化地更好:事实上,在这个训练数据集上减少了预测错误,因为实际上大部分的间隔违规点出现在了判定边界正确的一侧。
在这里插入图片描述

如果SVM模型过拟合,可以通过减小超参数C去调整。
SKLearn代码,生成模型为上右图

import numpy as np
from sklearn import datasets
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import LinearSVC

iris = datasets.load_iris()
X = iris["data"][:, (2, 3)] # petal length, petal width
y = (iris["target"] == 2).astype(np.float64) # Iris-Virginica

svm_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实战

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值