SVM有三宝:间隔,对偶,核技巧。
软间隔松弛变量(
ζ
{\zeta }
ζ) or 惩罚因子( C)
核函数与松弛变量: 一般的过程应该是这样,还以文本分类为例。在原始的低维空间中,样本相当的不可分,无论你怎么找分类平面,总会有大量的离群点,此时用核函数向高维空间映射一下,虽然结果仍然是不可分的,但比原始空间里的要更加接近线性可分的状态(就是达到了近似线性可分的状态),此时再用松弛变量处理那些少数“冥顽不化”的离群点,就简单有效得多啦。
——————————————————————————————
一 分隔超平面
- 将数据集分隔开来的对象叫做分隔超平面,写成 W T X + b W^{T}X+b WTX+b 。特别地,二维平面的分隔超平面是直线。
- 寻找离分隔超平面最近的点,确保它们离分隔面的距离尽可能远。这里点到分隔面的距离被称为间隔(margin)。
- 支持向量(support vector)就是离分隔超平面最近的那些点。
二 最大间隔
分类器输出的是类别标签,这里输出的是{+1, -1}
目标:寻找分类器定义中的 w 和 b。
第一步就是寻找支持向量,而满足 α \alpha α>0时,则为支持向量。
-
最大化间隔的公式如下:
-
优化目标(对偶问题):
尖括号表示内积。 -
其约束条件为:
三 SMO算法
目标:求出一些列的 α \alpha α和b(进而可得到w),有了w和b就可以得到超平面。
原理:(由约束条件)每次循环中选择两个 α \alpha α进行优化,并固定其他。因为累加和为0,因此,优化过程中一个增大,一个必须减小。<内循环、外循环>
清单6-2 如何判断正间隔还是负间隔?(存疑)
numpy数组过滤 如:alphas[alphas>0]
优化加速:选择最大步长
循环计算cache列表中的预测误差,并返回使误差变化量最大的下标maxK 和最大误差值Ej。
计算w
smoP(…)返回b和 alphas后,根据对偶问题中的公式:
w = ∑ i = 1 m α i y i x i w = \sum_{i=1}^m \alpha_i y_i x_i w=i=1∑mαiyixi
四 核技巧
核函数(kernel)的工具将数据转换成易于分类器理解的形式。将低维特征空间映射到高维空间。 其中,径向基函数(radial basis function)是最流行的二分类的核函数。
将内积替换成核函数的方式,称为核技巧。
- 径向基函数高斯版本中, σ \sigma σ是用户定义的到达率(reach)或者说是函数值跌落到0的速度参数。
- 线性核函数中,内积计算实在“所有数据集X” 和“数据集中的一行X[i, :]”这两个输入中展开。
numpy矩阵中,除法指对矩阵元素展开计算,而不是matlab中的求逆。