svm算法:
SVM本身是一个强分类器,他的目的是找到最优的超平面,SVM思想:找到一个超平面,如果可以使得最不确性样本最确性,可能就找到一个最优的超平面
SVM这个算法很慢
正确分类的点来说,几何间隔就是点到超平面的距离
点到线的距离越小,几何间隔越小,确性度就越小
损失函数就是最大化最小的几何间隔
svm算法会强行不让分类点落在超平面上
确信度的理解:
1. 没有通过距离来描述确性度
2. 通过几何间隔来描述确性度
3. 很巧的是,只有倍正确分类的点来说,距离=确信度,误分类点的几何间隔等于距离的负数
svm损失函数的作用:
在线性可分的情况下,svn第一个解决的问题就是将所有的样本点正确分类
第二个解决的是在所有的超平面中找到一个最好的超平面
拉格朗日:
拉格朗日的约束条件必须是<=0
拉个朗日做的是最小化的问题
svm的求解结果:
1. SVM的求解结果,结果会有2个超平面,wx+b = 1, wx+b = -1, 称之为间隔边界,间隔边界内没有任何样本点,这个情况下,称之为硬间隔
2. 每一个样本点都会被分配到一个ai, 在间隔边界上的点,ai > 0, 在间隔边界外的点,ai =0。
3. 最后真正去计算w,b的值,真正起到计算的是ai > 0的点,这些点的信息,决定了最后w和b的值的信息。它们的信息最终支持了超平面位置的计算,将它们称之为支持向量。
4. 至少有一对支持向量,可以出现多个支持向量
数据线性不可分:
在数据线性不可分的情况下,可以使用软间隔来进行分类
1. 如果点很杂, 并且很可能无法线性可分
2. 引入松弛,从而让条件不再那么严格,从而允许间隔边界内出现点,甚至出误分类点。
3. 为了不然松弛太张狂,将松弛进行惩罚,如何惩罚,就是在损失函数中+C * 松弛就可以了。
4. 当前我们的间隔边界就由硬间隔,变成了软间隔
对于非线性问题:
可以将维度升高,在高维的情况下尝试去找一个超平面
1. 升纬很简单,但是升纬代价太大了,首先要每一个样本都要做维度的升高,第二个地方就是在高纬空间下,每两个本直接都要做点乘,本维度就大,计算过程时间非常长。很有1个2位维度空间,可能会升高高1000个维度下。
2. kernel是一些特别巧妙的函数,这些函数最简单功能就是升维,但是它可能很方便帮助解决维度灾难
3. 可以直接在低纬度空间下做样本和样本的点乘,对结果进行简单的处理,就可以直接得到在高纬度空间样本点乘的结果,就没有任何的必要去做升维了。
简介kernel理解
1. kernel可以帮助我们在高纬空间下找到一个超平面解决当前维度下线性不可分的数据
2. kernel没有必要做升维,简便计算‘
所有核函数中rbf的效果是最好的
在出现数据不平衡的问题的时候,可以和决策树一样通过class_weight进行权重的设置
核函数:
在做核函数时,需要对所有连续型的变量进行去量纲的处理








暂无数据