SVM
什么是超平面
- 超平面的表达式为(omega^Tx+b=0), 其中(omega)为超平面的一个法向量, b为超平面的偏移量
- 更多:
- 在几何中, 直线, 平面, 超平面无一例外都可以被表示成( heta^Tx+b=0)或者(omega^Tx+b=0), 其中, 因为x没有包含偏移量, 所有加上一个b, ( heta)和(omega)为系数向量, 其实就是对应的平面或者直线的法向量, 这里很能有一些人不能理解为什么(omega)成了法向量了, 下面给一个例子
- 一个平面方程: (Ax_1+Bx_2+Cx_3+D=0)
- 首先, 如果我们学过高等数学的话, 希望还记得(A, B, C)就是这个平面的法向量这个结论, 这样的话, ((A, B, C)^T(x_1, x_2, x_3)=0), 截距(D)是不影响的, 显然(omega^Tx=0), (omega)为平面的法向量
- 下面来推导
- 设((x_0, y_0, z_0))是平面(Ax_1+Bx_2+Cx_3+D=0)上的一点, 则有方程$$Ax_0+By_0+Cz_0+D=0$$
- 则可以有$$A(x_1-x_0)+B(x_2-y_0)+C(x_3-z_0)=0$$
- 将上述的方程写成向量式为((A, B, C)^T(x_1-x_0, x_2-y_0, x_3-z_0)=0), 显然((x_1-x_0, x_2-y_0, x_3-z_0))为平面(Ax_1+Bx_2+Cx_3+D=0)上的一条直线, 向量((A, B, C))与他的内积为0表示((A, B, C))为平面(Ax_1+Bx_2+Cx_3+D=0)的法向量
- 将平面方程写成((A, B, C)^T(x_1, x_2, x_3)+D=0), 进一步的, (omega^Tx+D=0), 在上面一步我们一定得出了(omega)为平面的法向量, (x)为平面上的一条直线
SVM类型
-
线性可分SVM
- 在不修改维度的前提下, 可以线性的分隔, 得到一个线性分类器
-
非线性SVM
- 在不修改维度的前提下, 不能通过线性的分隔所有的样本, 如果需要需要分类样本需要借助核函数
- 核函数将当前的特征的维度进行映射, 映射到一个高维度
-
SVM是一个二次规划问题
- 目标函数(min({1over{2}}||omega||^{2}))
- 约束为[egin{cases} omega^Tx_0+b >= 1 & if & y = +1 \ omega^Tx_0+b <= -1 & if & y = -1 end{cases} ]
- 上面是多个式子, 通过一个技巧将多个式子合成一个
- (y(omega^Tx_0)+b)>=1), 这个就是我们的新的约束条件, 只要(y(omega^Tx_0+b)<1)则超平面(omega^Tx+b)不符合我们的要求; 如果(y(omega^Tx_0+b)>=1)则超平面(omega^Tx+b)确实符合我们的约束条件, 但是不一定符合(min({1over{2}}||omega||^{2})), 所有可能有多个超平面符合约束条件但是不是最优的
凸优化
- 对于式子
-
[min({1over{2}}||omega||^{2}) ]
-
[ egin{cases} omega^Tx_0+b >= 1 & if & y = +1 \ omega^Tx_0+b <= -1 & if & y = -1 end{cases} ]
-
- 目标函数是二次的, 约束条件是线性的, 使用拉格朗日乘数法计算
- (L(omega, alpha, eta)=f(omega)+sum_{i=1}^{k}alpha_{i}g_i(x)+sum_{i=1}^{k}eta_ih_i(x))
- 得到最终的目标函数(L(omega, b, alpha)=min({1over{2}}||omega||^{2})-sum_{i=1}^{m}{alpha_i}(y^{i}(omega^Tx_i+b)-1)), 其中(y^{i}(omega^Tx_i+b)-1)是约束条件的进行简单变换的形式, (alpha)为拉格朗日因子
- 现在我们只需要求出(min(L(omega, b, alpha)))即可
- 因为要求极值, 就要求出偏导, 在这里, 分别对(omega)和(b)求偏导, 得到[egin{cases} omega=sum_{i=1}^{m}{alpha}y^{i}x^{i} & (1) & 对omega的偏导\ sum_{i=1}^{m}alpha_{i}y^{i}=0 & (2) & 对b的偏导 end{cases} ]
- 将公式(1)和(2)带入到目标函数中, 消掉(omega)和(b), 这样就得到了一个只含有(alpha)的式子了, 因为(1)告诉我们(omega)和(alpha)的关系, 所有只要求出(alpha)就可以得出(omega)和(b), 有了(omega)和(b)就能计算出最优的超平面了
- 关于计算出最终的结果, 需要使用SMO算法
- 额外的, 如果我们不对原始的问题添加松弛变量的话, 则会导致过拟合的现象, 所有我们还需要修改原始公式添加松弛变量和正则化参数
拉格朗日乘数法(二次优化问题)
- 拉格朗日乘数法知识将原始的问题转换了一下, 我们并不是通过拉格朗日求出最后的结果, 而是为了使用SMO(一个流弊的算法)求出最后的结果做准备
- 借别人的话就是
- 分类间隔,引入SVM。
- 使用拉格朗日乘子来简化SVM问题的优化。
- 非线性分类(核函数)以及松弛变量。
- SMO算法实现简单的SVM分类器。
Hinge + L2损失函数
- 这是从另外给一个角度解决SVM
MATLAB实现SVM
- 将原始问题转换为拉格朗日对偶式, 显然这个也是一个二次规划问题, 调用matlab自带的qualprog函数得到支持向量(得到(alpha)的解)