SVM(上):如何用一根棍子将蓝红两色球分开?

SVM(上):如何用一根棍子将蓝红两色球分开?

SVM,叫做支持向量机,是最常见的一种分类方法,SVM是有监督的学习模型。

有监督的学习模型是指我们需要事先对数据打上分类标签,这样机器就知道这个数据属于哪个分类,无监督学习就是数据没有被打上分类标签,可能因为不具备先验的知识或者成本很高,需要机器代替我们完成这个工作,比如将数据进行聚类,方便人工对每个类进行分析,SVM作为有监督的学习模型,可以帮我们模式识别、分类以及回归分析

SVM(上):如何用一根棍子将蓝红两色球分开?_第1张图片

这样用一根棍子是分不开红球和篮球的,需要把二维平面变成三维空间,原来的曲线变成一个平面,把蓝球和红球分开,这个平面叫做超平面

SVM(上):如何用一根棍子将蓝红两色球分开?_第2张图片

SVM的工作原理

用SVM计算的过程就是找到这个超平面的过程,这个超平面就是我们的SVM分类器

SVM(上):如何用一根棍子将蓝红两色球分开?_第3张图片

可以形成多种直线的划分,有直线A,B,C,哪种才是更好的划分呢?相比于直线A和直线B,直线C的划分更优,因为直线C的鲁棒性更强,引入一个SVM的概念:分类间隔。我们分类环境不是在二维平面中的,而是在多维空间中,直线C就变成了决策面C,在保证决策面不变,且分类不产生错误的情况下,可以移动决策面C,直到产生两个极限的位置:如决策面A,B,这样两个极限位置A,B之间的分类线C就是最优决策面,极限位置到最优决策面C之间的距离就是分类间隔,如果我们转动这个决最优策面,会发现可能存在多个最优决策面,都能把数据集正确分开,这些最优决策面的分类间隔可能是不同的,而那个拥有“最大间隔”的决策面就是SVM要找的最优解

点到超平面的距离公式

超平面的数学表达式为:

img

w、x是n维空间里的向量,其中x是函数变量;w是法向量,法向量指的是垂直于平面的直线所表示的向量,决定了超平面的方向,SVM就是帮我们找到一个超平面,这个超平面能将不同的样本划分开,使得样本集中的点到这个分类超平面的最小距离最大化,支持向量就是离分类超平面最近的样本点,实际上如果确定了支持向量也就确定了这个超平面,所以支持向量决定了分类间隔到底是多少,而在最大间隔以外的样本点起始对分类没有意义

首先定义某类样本集到超平面的距离是这个样本集合内的样本到超平面的距离是这个样本集合内的样本到超平面的最短距离,用di代表点xi到超平面wxi+b=0的欧氏距离,因此要求di的最小值,用它来代表这个样本到超平面的最短距离,||w||是超平面的范数

SVM(上):如何用一根棍子将蓝红两色球分开?_第4张图片

最大间隔的优化模型

目标是找出所有分类间隔中最大的那个值对应的超平面,数学上,这是凸优化问题(凸优化就是关于求凸集中的凸函数最小化的问题)通过凸优化问题,求出最优的w和b,就是要找的最优超平面,中间用到拉格朗日乘子,和KKT条件

硬间隔、软间隔和非线性SVM

如果数据是完全线性可分的,学习到的模型称为硬间隔支持向量机,硬间隔指的就是完全分类准确,不能存在分类错误的情况,软间隔就是允许一定量的样本分类错误

实际工作中的数据不干净,所以线性可分是一个理想情况,需要用到软间隔SVM近似线性可分,还存在非线性支持向量机,比如下面的样本集就是个非线性的数据,两类数据分别分布为两个圆圈的形状,不论多高级的分类器,只要映射函数是线性的,就没法处理,SVM也处理不了,需要个:核函数,可以将样本从原始空间映射到一个更高维的特质空间中,使得样本在新的空间中线性可分,使用原来的推导在新空间进行计算

SVM(上):如何用一根棍子将蓝红两色球分开?_第5张图片

非线性SVM中,核函数的选择就是影响SVM最大的变量,核函数有线性核、多项式核、高斯核、拉普拉斯核、sigmoid核,这些核函数区别在于映射方式的不同,通过这些核函数可以把样本空间投射到新的高维空间中

用SVM如何解决多分类问题

SVM是一个二值分类器,即回答Yes or No,我们要解决的问题可能是多分类的情况比如对文本进行分类或者对图像进行识别,将多个二分类器组合起来形成一个多分类器,方法是:

  1. 一对多法

    把物体分成A,B,C,D四种分类,先把其中的一类作为分类1,其他类统一归为分类2,可以构造4种SVM,分为:

    • 样本A作为正集,B,C,D为负集
    • 样本B作为正集,A,C,D为负集
    • 样本C作为正集,A,B,D为负集
    • 样本D作为正集,A,B,C为负集

    针对K个分类需要训练K个分类器,分类快,训练速度慢,因为每个分类器都需要对全部样本进行训练,而负样本数量远大于正样本数量,会造成样本不对称的情况,当增加新分类比如第K+1类时,需要重新对分类器进行构造

  2. 一对一法

    可以在任意两类样本之间构造一个SVM,针对K类样本,会有C(k,2)类分类器,划分A,B,C三类,可以构造3个分类器:(1)分类器1:A,B(2)分类器2:A,C(3)分类器3:B,C

    当为一个未知样本进行分类时,每个分类器都会有一个分类结果,即为1票,最终得票最多的类别就是整个未知样本的类别

    如果新增一类不需要重新训练所有的SVM,只需要训练和新增这一类样本的分类器,但是分类器的个数与K的平方成正比

总结:

《Python数据挖掘与机器学习实战》 因为我在代码中用到sklearn比较多,可以结合这个来看,里面有一些关于sklearn数据集的练习,《利用Python进行数据分析》 这本相对基础,没有太多算法部分,主要是关于Python的使用:数据结构,NumPy,Pandas,数据加载、存储、清洗、规整、可视化等。

关于项目实战
可以配合 https://www.kaggle.com/
比如你想做和SVM相关的,可以在kernels中搜索SVM
、可视化等。

关于项目实战
可以配合 https://www.kaggle.com/
比如你想做和SVM相关的,可以在kernels中搜索SVM
https://www.kaggle.com/kernels?sortBy=relevance&group=everyone&search=SVM&page=1&pageSize=20

你可能感兴趣的:(数据分析实战,跟宝宝一起学习)