支持向量机SVM

目录

  • 支持向量机SVM
    • 1.支持向量机原理
    • 2.如何找出边际最大的决策边界
    • 3.拉格朗日乘数
    • 4.非线性SVM与核函数
    • 5.示例
  • 支持向量机(SVM,也称支持向量网络),是机器学习中获得更关注最多的算法没有之一

  • 从实际应用看

    • SVM在各种实际问题中都表现非常优秀,他在手写识别数字和人脸识别中应用广泛,在文本和超文本的分类中举足轻重。同时,SVM也被用来执行图像的分类,并用于图像分割系统…
  • 从学术角度看

    • SVM是最接近深度学习的机器学习算法

1.支持向量机原理

  • 支持向量机分类原理

    • 支持向量机,就是通过找出边际最大的决策边界,来对数据进行分类的分类器,因此,支持向量机分类器又叫做最大边际分类器。
  • 支持向量机的分类方法,是在一组分布中找出一个超平面作为决策边界,使模型在数据上的分类误差尽量接近于0,尤其是在未知数据集上的分类误差尽量小

  • 超平面

    • 在几何中,超平面是一个空间的子空间,它是维度比所在空间小一维的空间。如果数据空间本身是三维的,则其超几何是二维平面

    • 决策边界:在二分类问题中,如果一个超平面能够将数据划分为两个集合,其中每个集合中包含单独的一个类别,我们就说这个超平面是数据的"决策边界"

  • 决策边界的边际

    • 如图:我们有B1和B2两条可能的决策边界。可以八决策边界B1向两边平移,直到碰到离这条决策边界最近的方块和圆圈后停下,形成两个新的超平面,分别为b11和b12,并且我们将原始的决策边界移动到b11和b12中间,确保B1到b11和b12的距离相等。在b11和b12中间的距离,叫做B1这条决策边界的边际(margin),通常记作d

    • 为了简便,我们称b11和b12为"虚拟超平面"

  • 决策边界的边际对分类效果的影响

    • 如图表现出,拥有更大边际的决策边界在分类中的泛化误差更小,如果边际很小,则任何轻微扰动都会对决策边界的分类产生很大的影响,边际很小,是一种模型在训练集上表现很好,却在测试集表现糟糕的情况,所以会"过拟合"

    • 即,在寻找决策边界时,边际越大越好

2.如何找出边际最大的决策边界

  • 假设现在数据集中有N个训练样本,每个训练样本i可以表示为(xi,yi)i=1,2,3...N),其中xi是(x1i,x2i,x3i...xni)的特征向量。也就是说训练样本中的特征数据只有两种不同形式的特征。二分类的标签yi的取值为(1,-1)这两类结果。接下来可视化我们的N个样本数据的特征数据:(紫色为一类,红色为另一类)

  • 让所有紫色点的标签为1,红色点的标签为-1。我们要在这个数据集上寻找一个决策边界,在二维平面上,决 策边界(超平面)就是一条直线。二维平面上的任意一条线可以被表示为:

  • 其中[a,-1]是参数向量,X是特征向量,b是截距

  • 在一组数据下,给定固定的w和b,就可以固定一条直线,在w和b不确定的情况下,这个表达式可以是任意一条直线。如果在w和b固定时,给定一个唯一的x取值,这个表达式就可以表示一个固定点,固定下来的直线就可以作为SVM的决策边界

  • 在SVM中,就是用这个表达式来表示决策边界,目标是求解能够让边际最大化的决策边界,所以要求解参数向量w和b

  • 如果在决策边界上任意取两个点xa,xb,则有:


  • 一个向量的转置乘以另一个向量,可以获得向量的点积(dot product)。两个向量的点积为0表示两个向量的方向是互相垂直的。xaxb是一条直线上的两个点,相减后得到的向量方向是由xa指向xb,所以xa-xb的方向是平行于他们所在的直线【决策边界】。而w与xa-xb相互垂直,所以参数向量w的方向必然是垂直于我们的决策边界

    • 此时有了决策边界,图中任意一个紫色的点xp可以表示为

      • w*xp+b=p

        • 紫色点所表示的标签y为1,规定p>0
    • 任意一个红色的点xr可以表示为

      • w*xr+b=r

        • 红色点所表示的标签y是-1,规定r<0
    • 如果有新的测试数据xt,根据以下公式判定

  • 决策边界的两边要有两个超平面,这两个超平面在二维空间中是两条平行线(就是虚拟超平面),他们的距离就是边际d,而决策边界位于这两条线中间,所以两条平行线是对称的,另这两条平行线被表示为:

  • 支持向量:

    • 让这两条线分别过两类数据中距离我们虚线决策边界最近的点,这些点被称为"支持向量"。另辞色类的点为xp,红色类的点为xr(xp和xr作为支持向量),得到:

  • 两式相减为了求出两条虚线之间的距离

  • 如图:xp-xr可以表示两点之间的连线(距离),而边际d平行于w,即,相当于得到了三角形的斜边,并知道一条直线边的方向

    • 数学性质得知:向量a乘以向量b方向上的单位向量,可以得到向量a在向量b方向上的投影的长度

    • xp-xr作为向量a,w作为向量b,既可以求出边际的长度

    • 向量b除以自身的模长||b||可以得到向量b方向上的单位向量

  • 我们将上述式子两边除以||w||,可以得到:

  • 求最大化d,就是求w的最小值,把求解 的最小值转化为,求解以下函数的最小值:

  • 只所以要在模长上加上平方,是因为模长的本质是一个距离(距离公式中是带根号的),所以它是一个带根号的存在,我们对它取平方,是为了消除根号,不带平方也可以。

  • 两条虚线表示的超平面,表示的是样本数据边缘所在的点,所以对于任意样本i,可以把决策函数写作

  • 如果wxi+b>=1,yi=1,则yi(wxi+b)>=1,如果wxi+b<=-1,yi=-1,则yi(wxi+b)>=1

  • 最终得到支持向量机的损失函数

  • subject to:标识并且的意思

3.拉格朗日乘数

  • 对损失函数求解,目标是求解让损失函数最小化的w,如果||w||=0f(w)必然很小,但是||w||=0是一个无效值【因为我们的决策边界wx+b=0,如果w为0,则这个向量包含的所有元素都为0,就有b=0这个唯一值,如果b和w都为0,决策边界不可能是一条直线,条件yi(wxi+b)>=1就不可能实现,所以w不可以是一个0向量】
  • 即,我们希望找出一种方式,能够让我们的条件yi(wxi+b)>=1在计算中也被纳入考虑,就是使用拉格朗日乘数法

4.非线性SVM与核函数

  • 不是所有的数据都是线性可分的,不是所有的数据都能一眼看出有一条直线,或一个平面,甚至一个超平面可以将数据完全分开。如下图,对于这样的数据,需要对它进行升维变化,让数据从原始的空间x投射到新空间q(x)中,升维之后,明显可以找出一个平面,能够将数据切分开来

    • q(x)是一个映射函数,他代表了某种能够将数据升维的非线性的变换,对数据进行这样的变换,确保数据在自己的空间中一定能够线性可分

  • 核函数

    • 我们很难去找出一个函数q(x)来满足我们的需求,并且在我们并不知道数据究竟被映射到了一个多少维度的空间当中,有可能数据被映射到了无限空间中,我们的计算和预测就会很难。
    • 核函数K(xi,test)能够用原始的数据空间中的向量计算来表示升维后的空间中的点积q(x)*q(xtest),以帮助我们寻找合适的q(x),适合不同的核函数,就可以解决不同数据分布下寻找超平面问题
    • 这个功能由参数"kernel(ˈkərnl)"和一系列与核函数相关的参数来进行控制

  • 观察结果

    • 线性核函数和多项式核函数在非线性数据上表现会浮动,如果数据相对线性可分,则表现不错,如果是像环形数据那样彻底不可分,则表现很糟糕,在线性数据集上,线性核函数和多项式核函数即便有扰动项也可以表现不错,即多项式核函数【多项式函数妒多被用于图像处理之中】虽然可以处理非线性情况,但是更偏向于线性的功能
    • Sigmoid核函数,在非线性数据上强于两个线性核函数,但效果明显不如rbf,他在线性数据上完全比不上线性的核函数,对扰动项抵抗也比较弱,所以它的功能比较弱小,很少用到
    • rbf:高斯径向基核函数基本在任何数据基上都表现不错,属于比较万能的核函数。【rbf不擅长处理数据分布不均衡的数据】
  • 使用核函数优先使用高斯径向基核函数,它适用于核转换到很高的空间的情况,在各种情况下效果都不错,如果rbf效果不好,再试其它的核函数;

5.示例

from sklearn.datasets import load_breast_cancer
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScalerdata=load_breast_cancer()
feature=data.data
target=data.target
feature.shape #(569, 30)
np.unique(target)#array([0, 1])pca=PCA(n_components=2)
pca_feature=pca.fit_transform(feature)
pca_feature.shape #(569, 2)
# 处理:初步任意选取两种特征,将其映射在散点图中查看是否线性可分。
plt.scatter(feature[:,0],feature[:,1],c=target)x_train,x_test,y_train,y_test=train_test_split(feature,target,test_size=0.3,random_state=420)
Kernel=['linear','rbf']
for kernel in Kernel:#cache_size:在计算机中为SVM提供多大的内存空间用于计算,单位为Mbclf=SVC(kernel=kernel,cache_size=1000)clf.fit(x_train,y_train)print('the accuracy under kernel %s is %f' %(kernel,clf.score(x_test,y_test)))
# the accuracy under kernel linear is 0.929825
# the accuracy under kernel rbf is 0.918129
# rbf在线性数据上也可以表现得非常好,那在这里,为什么跑出来的结果如此糟糕呢#通过观察特征数据的标准差,最大,最小值发现特征中的数据分布很不均衡,则试着对其进行归一化处理
x=StandardScaler().fit_transform(feature)
x_train,x_test,y_train,y_test=train_test_split(x,target,test_size=0.3,random_state=420)
Kernel=['linear','rbf']
for kernel in Kernel:clf=SVC(kernel=kernel,cache_size=1000)clf.fit(x_train,y_train)print("The accuracy under kernel %s is %f" % (kernel,clf.score(x_test,y_test)))
# The accuracy under kernel linear is 0.976608
# The accuracy under kernel rbf is 0.970760
#发现rbf的分数提高了
#结论:rbf不擅长处理数据分布不均衡的数据。

支持向量机SVM算法相关推荐

  1. 支持向量机SVM算法原理及应用(R)

    支持向量机SVM算法原理及应用(R) 2016年08月17日 16:37:25 阅读数:22292更多 个人分类: 数据挖掘实战应用 版权声明:本文为博主原创文章,转载请注明来源. https://b ...

  2. 机器学习算法 08 —— 支持向量机SVM算法(核函数、手写数字识别案例)

    文章目录 系列文章 支持向量机SVM算法 1 SVM算法简介 1.1 引入 1.2 算法定义 2 SVM算法原理 2.1 线性可分支持向量机 2.2 SVM计算过程与算法步骤(有点难,我也没理解透,建 ...

  3. 机器学习-支持向量机SVM算法

    文章目录 简介 原理 硬间隔 支持向量 对偶问题 软间隔 核函数 SMO算法 小结 多分类问题 回归问题 应用示例 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点 ...

  4. 支持向量机——SVM算法及例子(代码)

    终于拖到最后一天交机器学习作业,选择了SVM算法,之前一直听说过,现在终于有了初步的了解,顺便post到这里分享一下,不足地方请大家指出 本文内容有来自<统计学习算法>(李航 著)第7章- ...

  5. 支持向量机SVM算法原理笔记2

    上篇博客介绍了当样本集是线性可分情况下的SVM算法原理.接下来介绍不存在一个划分超平面可以正确分类的问题,比如说"异或问题". 对于此类问题,可以将样本空间映射到更高维度空间,这样 ...

  6. 支持向量机 SVM 算法推导优缺点 代码实现 in Python

    1.基本思想 前面讲到的Logistic Regression在拟合过程,实际上关注所有样本点的贡献,即寻找这么一个超平面,使得正例的特征远大于0,负例的特征远小于0,强调在全部训练数据上达到这一目标 ...

  7. 优雅的读懂支持向量机 SVM 算法

    转自:JerryLead http://www.cnblogs.com/jerrylead/archive/2011/03/13/1982639.html 简介 支持向量机基本上是最好的有监督学习算法 ...

  8. 打造属于自己的量化投资系统9——支持向量机SVM算法在股票预测涨跌中应用

    1.支持向量机即SVM原理 支持向量机即SVM(Support Vector Machine) ,是一种监督学习算法,属于分类的范畴.它的原理就是求出"保证距离最近的点,距离它们最远的线&q ...

  9. 支持向量机SVM算法原理

    SVM 的英文叫 Support Vector Machine,中文名为支持向量机.它是常见的一种分类方法,在机器学习中,SVM 是有监督的学习模型. 什么是有监督的学习模型呢?它指的是我们需要事先对 ...

最新文章

  1. 买不到口罩怎么办?Python爬虫帮你时刻盯着自动下单!| 原力计划
  2. 联想笔记本Win10 F1-F12失效的解决方法
  3. Xcode出现( linker command failed with exit code 1)错误总结
  4. YBTOJ:魔法数字(数位dp)
  5. phpcmsV9子栏目调用其父栏目名称、URL、catid等信息 - 方法总结
  6. 开放式关系抽取_有效的开放式合作伙伴关系的3课
  7. 对一个可进行带括号 加减乘除运算类的分析
  8. JAVA Swing GUI设计 WindowBuilder Pro Container使用大全2——JPanel使用
  9. 怎么用c语言输入一串字符个数字,请问这个用c怎么做:输入一串字符,分别统计其中数字和字母的个数...
  10. 程序员的思维修炼:开发认知潜能的九堂课
  11. chrome浏览器使用
  12. java delight 咖啡是什么意思_各种咖啡的含义是什么?
  13. 手机构建Linux环境,Linux手机DIY.构建统一安装包
  14. 植物神经紊乱、焦虑症和抑郁症之间有哪些区别呢?
  15. 【华为OD机试真题】促销活动(货币兑换)100%通过率
  16. JavaWeb-10-JavaScript高级学习笔记
  17. [HL7_V2.4]HL7消息生成和反射
  18. Mixly 触摸开关的使用
  19. 三国著名人物籍贯一览列表
  20. com.itextpdf.io.IOException Type of font null is not recognized

热门文章

  1. LeetCode 2331. 计算布尔二叉树的值(树的遍历)
  2. Qt之实现3D纹理渲染自由旋转空间立方体
  3. 计算机软考初级含金量高吗?
  4. MATLAB图像分割——使用纹理滤波器分割图像
  5. Proxmox VE安装使用心得记录
  6. 小学计算机课玩的游戏,小学电脑课上偷偷玩儿过的5款游戏,又一个会引来围观...
  7. C语言初级:Hello world、数据类型、变量常量、字符串、转义字符、注释、选择语句、循环语句
  8. 星起航:电商行业竞争日益激烈,如何做好电商运营
  9. 不知道怎么用小图标?简单的iconfont矢量图标教学,装饰你的网页
  10. 【C++详解】——多态