SVM支持向量机
可以做分类(经典的二分类问题)也可以做回归
如上图,不能找到一个边界将×和○分开?可以使用核函数,将数据映射到高维进行分割
边界都必须是直线吗?可以是直线也可以是平面‘
无论选哪一个决策面,支持向量(雷区点)都不会改变(作垂线可以很清楚的发现),从而就涉及到下面的第一步,找点
决策边界:是中间的那条实线,不是雷区边界线
选择的决策边界是②
距离公式
点为x,平面为wx+b=0,平面的发向量为w
乘单位向量
在变量i的情况下,点到决策面的距离越小越好(选点的时候,只拿一个边界,但是拿了多个点)。当确定了i,即支持向量确定后后,在变量w,b的情况下,距离越大越好(选边界的时候,只拿了一个点,但拿了多个边界)
距离表达式中的绝对值可以直接去掉,只需要乘yi即可
SVM中正例为1,负例为-1,区别于LR中的1和0,这样的目的是方便化简
w为权重参数,b为偏置参数,x表示数据
通过决策方程值来判断正例还是负例,将数据点带入方程
找到一个决策边界使离边界最近的点到边界的距离最远
距离表达式中本来没有yi,为了去掉绝对值乘yi(yi值为1或-1)
xi表示数据,yi表示标签
目标函数
放缩变换:通过放缩,即乘上某个系数,总能是电到决策面的距离>=1
优化目标:选点(对xi)选面(对w,b)
①先找点:求点xi到所有决策边界的距离。
②再找面:根据找出的点,求出所有点到决策边界的距离,选择距离最大时决策边界对应的w,b两个参数(如上图,先选出黑色点,根据黑色点应该选出 红色边界)
放缩的目的:在求min时,不能让最小值为0。放缩后最小值取1,直接把求距离部分去掉
求解任何实际问题首先要找到目标函数,这里的目标函数是没有加约束条件的目标函数。带约束条件求极值方法使用的拉格朗日乘子法。
求最大值转化为求最小值(常规套路求最小)。模去掉转化为平方。为了求导方便加上系数1/2,这不影响求最小值
求w
接下来就是对式子求偏导
对偶出现在SVM中,求带约束条件的最小值
求λ
将所求w带入目标函数L中进一步求解λ
实例:根据这三个点怎么求出解决策边界
没有满足条件的解,则一定在边界上,α存在0
计算时只选择到边界上的点,边界外的点对应的α全为0
支持向量机中支持向量含义:点x1,x2将平面支持起来的,与其它点无关,即决策边界
只要决策边界上的点不变,在边界外加入任意数据点,决策边界不改变
软间隔:因为存在噪声点/离群点
表达式能脱口而出:y乘yi要大于等于1减松弛因子,yi表示将数据点带入决策边界的值
如果存在离群点,可能会将决策边界确定为图中的实线。为了避开这个特殊点的影响,使决策边界还是虚线,就可以引入松弛因子
之前的数据乘标签必须满足大于1,这个标准太严格了,现在引入松弛因子(用1减去松弛因子)
目标函数越小越好(给出了C值对目标函数的影响)
C惩罚因子,ξ为松弛因子。C就是配合松弛因子来使用的,便于调节隔离带的宽度,所以就引入了C
目标函数需要记清楚,不然怎么判断C对模型的影响
C越大,但要求目标函数越小,因此只能要求ξ尽可能小了,这样没松弛也就是更加严格了
C越大,要求严格,泛化能力也弱一些
到底C大好还是C小好,通过交叉验证来选C值(经验值不靠谱)
面试时问到就直接说通过交叉验证选择参数,再把训练集分成三份
SVM出现线性不可分的情况:
第一种方法当然是:引入松弛因子
第二种方法:引入核函数
核函数:低维不可分的,通过核函数弄一个层次感出来
Φ:通过某一函数关系进行维度映射
没有真正的把数据映射到高维,实际是在低维中计算的再映射到高维(两种计算结果相等)
想象映射到高维空间
这里的线性核函数还是没有把数据点分开
rbf/高斯核函数
cluster簇
C和γ对决策边界的影响
惩罚因子C对决策边界的隔离带宽度有影响,γ对决策边界的复杂程度也有影响
越复杂的边界,泛化能力越低
泛化能力越强越有实用价值,选右边的模型
人脸分类实例
sklearn中包含人脸数据集
图像数据:图像中每个位置都是一个像素点,每个点对应一个值。每个点都可以当做一个特征
PCA降维
分类结果对应的混淆矩阵:对角线上的数值表示分类正确的个数
纵轴最上面的名字和横轴第一个名字相同
手推过程
拉格朗日方程的构造规则是:用约束方程乘以非负的拉格朗日系数,然后再从目标函数中减去(这就决定了构造函数时,中的符号为负)
参考链接:https://blog.csdn.net/american199062/article/details/51322852
不懂为什么是取最小最大