对支持向量机SVM的简单理解

支持向量机svm

1、概述

支持向量机(SVM,也称为支持向量网络),是机器学习中常用算法之一,svm很强大,可实现的功能很多(在手写数字识别、人脸识别、文本分类、图像分类中应用广泛)。要深入理解svm的原理,需要掌握统计学理论基础。

2、支持向量机分类器

支持向量机的分类方法,是在一组数据分布中找出一个超平面作为决策边界,使模型在数据上的 分类误差尽量小,尤其是在未知数据集上的误差小,即模型泛化能力强。

  • 超平面
    超平面是一个空间的子空间,它是n维空间小一维的空间。 如果数据空间本身是三维的, 则其超平面是二维平面,而如果数据空间本身是二维的,则其超平面是一维的直线。
    在二分类问题中,如果一个超平面能够将数据划分为两个集合,每个集合为一个类别,这个超平面是数据的“决策边界”。

对于一个数据集来说,让训练误差小的决策边界小的有很多,但怎样寻找一个合适的决策边界让其在未知数据上拟合能力也好呢?那就需要看下面的决策边际。

  • 决策边际
    把决策边界所在的平面向两边平移,直到碰到离这条决策边界最近的数据点后停下,形成两个新的超平面,分别记作 d 1 d_1 d1 d 2 d_2 d2 ,再将该决策边界移到这两条线的中间, d 1 d_1 d1 d 2 d_2 d2距离的一半叫做这条决策边界的边际(margin) d 。

边际大的决策边界在分类中的泛化误差更小。如果边际很小,则加入新的数据点后就会对决策边界的分类产生很大的影响。边际很小一般在训练集上表现很好,在测试集上表现差,即容易出现过拟合。所以在确定决策边界时,边际越大越好。
支持向量机,就是通过找出边际最大的决策边界,来对数据进行分类的分类器。所以,支持向量分类器又叫做最大边际分类器。

那么怎么找到决策边界,求解决策边际,这就需要一大串的数学推理求解过程了。光求解决策边界就要经历繁琐的数学逻辑推理,并且我很多地方都不能很好理解到。。。。所以这一块还需要再多去补补。

推出
推出
推出
决策边界的表达式$w^Tx_a+b=0$
分类函数
求解使边际d最大的w,b
拉格朗日对偶函数将求解w,b转换为求解a
利用SMO或梯度下降求解

3、sklearn中的支持向量机

skleran.svm.SVC(C=1.0,kernel='rbf‘)

  • 常用的类
含义
svm.LinearSVC线性支持向量分类
svm.LinearSVR线性支持向量分类
svm.SVC非线性多维支持向量分类
svm.SVR非线性多维支持向量回归
svm.OneClassSVM无监督异常值检测
  • 核函数(kernel function)
    核函数必须是对称函数,每个核函数都对应一个特征空间,特征空间是否得当对支持向量机的性能至关重要。
    对于线性数据来说,很容易找到一条直线或者平面,来将数据划分开。但对于一些非线性数据,如环形数据,就不容易找到这样一个超平面。所以 ,我们需要对数据就行处理,,因为数据在低维不可分,但是可能在高维空间是可分的。我们可以进行一个升维变化,将数据从原始的低维空间映射到到新空间中,使他可分,通常是。而解决这些问题需要用到核函数

选用不同的核函数,就可以解决不同数据分布下的寻找超平面问题。

kernel 的值可为:
linear : 线性核 ——线性
poly :多项式核——偏线性
sigmoid :双曲正切核(tanh)——非线性
rbf :高斯径向基——偏非线性
linear核函数只能处理线性数据,其他核函数都能处理线性和非线性,rbf,高斯径向基rbf基本在任何数据集上都表现不错,比较万能,建议优先选用。

  • 参数C——松弛系数的惩罚项系数
    当两组数据是完全线性可分(可以找出一个决策边界使得训练集上的分类误差为0)就称该数据是存在硬间隔的。当两组数据几乎是完全线性可分的,但决策边界在训练集上存在较小的训练误差,这两种 数据就被称为是存在软间隔(soft magrin)。(因为有时候貌似线性可分是由于过拟合引起的,所以要允许支持向量机少量出错)
    引入这两个概念后,此时,决策边界需要考虑硬间隔和软间隔了(即训练样本被分错的数量),参数C就是来使训练样本的错误分类尽可能少的同时使决策函数的边际d最大化。

C又叫做松弛系数的惩罚项系数(听到惩罚项系数,是不是想起来正则化,,) : 浮点数,默认1,必须大于等于0,可不填。

如果C值设定较大,那SVC可能会选择边际较小的,训练点分类正确的决策边界,不过模型的训练时间也会更长。如果C的设定值较小,那SVC优先考虑最大化边界,就会牺牲训练的准确度。在算法中,没有一个算法能真正做到万能,很多时候都是鱼与熊掌不可兼得。
如果我们的数据很杂,往往减小C。

  • 其他参数gamma,degree
    这两个参数都是核函数的相关参数,配合核函数使用

degree——整数,可不填,默认3,多项式核函数poly的次数.

gamma——浮点数,可不填,默认“auto",在Kernel=”rbf",“poly"和"sigmoid”的时使用
输入“auto”,自动使用1/(n_features)作为gamma的取值
输入"scale",则使用1/(n_features * X.std())作为gamma的取值
输入"auto_deprecated",则表示没有传递明确的gamma值(不推荐使用)

coef0——浮点数,可不填,默认=0.0,在参数kernel='poly’和’sigmoid’时用

// 实现svc的基本流程
from sklearn.svm import SVC
clf = SVC(C=1.0,kernel="rbf",gamma="auto",cache_size=5000,random_state=200)      //实例化 C默认1.0
clf = clf.fit(X_train, y_train)  //开始训练
result = clf.score(X_test, y_test)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值