机器学习小白最想看的SVM

我通过这篇博客https://blog.csdn.net/d__760/article/details/80387432,对SVM的理解学到很多,具体的推导过程大家可以看里面,我通过用一种最好不用数学的方式把我的理解展示出来,给一些新手,就像我一样,以前只会用不知道怎么来的。

SVM也叫做支持向量机,所谓的支持向量是指在多维空间下进行分类任务中用到的点。简单来说,SVM主要用来分类,在一个二维空间中,对两个点进行分类,一条线足矣。那么在三维,甚至n维空间中对点分类,那么就没有一条线了,取而代之是二维空间中直线对应n维空间的超平面,通常是n-1维的,那么此时距离这个超平面最近的点(两侧到这个面的点,两个点,一边一个,每个点都是个向量,n维嘛)就叫做支持向量。

SVM推导用到的知识

  • 点到直线距离(点到超平面距离)
  • 最大间隔的优化
  • 拉格朗日乘子法
  • KKT条件约束
  • 松弛变量
  • 核函数

大家不用担心,这些我会用我大白话来说,保证您能听懂^_^,拒绝数学公式,哈哈哈

点到(点、直线、超平面)的距离:
首先SVM是一个分类任务,所以就想把两类东西分开。比如说在一个空间中,可以一维,可以二维,也可以多维。一维的话,两类东西分布在一条直线上,那么一个点就可以把这两类东西分隔开。二维的话,两类东西分布在一个平面上,那么一条直线就可以把这两类东西分隔开。同理,三维空间用一个平面分隔,n维空间用一个n-1维的超平面分隔开。那么好,我们需要关注的是在各个维度下,各个点到该维度的分隔(点、直线、超平面)的距离,这个距离是我们的第一步。

最大间隔的优化:
现在我们知道了点到(点、直线、超平面)的距离,那么在这一步里,我们要做的是,找个一个(点、直线、超平面)使得其到它两侧最近点的间隔最大。这就是分类的目的,找到中间那个“面“,并求其表达式就欧了。
在这个推导过程中会用到拉格朗日乘子法和KKT条件约束。简单说,拉格朗日乘子法是一种寻找极值的策略,KKT条件将拉格朗日乘子法中的等式约束优化问题推广至不等式约束,我理解就是求极值并优化问题,结果就是为了找到一个解所用的手段。

松弛变量:
松弛变量这个概念是为了允许分类有一点小错误,目的是不想因为个别点而使整个点到“面“的间距变小。这里引入了一个C,C越大表示允许犯的错误越多。
这里写图片描述
就像这个图,有一个蓝点离得非常远,如果照顾这个点的话,分割线为黑色虚线,如果不照顾这个点,允许犯点错误,那么分割线就是红色实线,我们可以清晰看出,红色实线和黑色虚线所带来的最大分隔距离是不一样的,允许犯点错误可能会带来更好的效果。

核函数:
我的理解是,核函数提供了一种非线性的方法进行分类。
这里写图片描述
实际问题中给出的数据并不是都是线性可分的,那么这种非线性可分的数据是否就不能用svm算法来求解呢?答案是否定的。事实上,对于低维平面内不可分的数据,放在一个高维空间中去就有可能变得可分。以二维平面的数据为例,我们可以通过找到一个映射将二维平面的点放到三维平面之中。理论上任意的数据样本都能够找到一个合适的映射使得这些在低维空间不能划分的样本到高维空间中之后能够线性可分。

当然,核函数的表达式有很多,非线性掰弯的能力也不同。
这里有个表格,我截图的,感兴趣可以看看。
这里写图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章