下面是我在学习过程中遇到的对我很难理解的概念和我抄下来的笔记
主要资料来源: 《统计学习方法》,维基百科
假设 f(x),ci(x),hj(x) 是 定义在 Rn 上的连续可微函数,考虑以下最优化问题:
$$
\min_{x \in R^n}{f(x)} \
c_i(x) \leq 0, i = 1, 2, \dots , k\
h_j(x) = 0, j = 1, 2, \dots , l
$$
是一个凸优化问题
叫做约束最优化问题的原始问题
在 h 和l都为0, 即没有约束条件的情况下, 只需要找到
利用拉格朗日函数消除掉约束条件,把求原函数的最优解转化为求解其对应的拉格朗日函数的最优解,
引入广义拉格朗日函数(generalized Lagrange function):
先把x看作常量,那么 L(x,α,β) 则是关于 α,β 的函数, 我们先对这它们求最大值,即:
很明显, 如果 x 不满足我们给它的限定条件, 那么其对应的函数值不应在我们考虑最小值的范围中
那么我们可以定义:
对于x, 如果 ci(x)>0 ,或者 hj(x)≠0 ,那么
并使用 p∗ 代表原始问题的最优解,即:
接下来做什么?
对原始问题的处理时,我们把 α,β 视为常量并得到了以 x 为唯一变元的函数,
那么我们可以考虑把 x 看作常量, 并把 α,β 当作变量, 则得到了 θP(x) 的对偶函数:
对偶问题则是极大化对偶函数的值,即
是的,这个是原问题:
类似于原问题,我们令其最值为 d∗ , 那么:
如果转化后得到的拉格朗日函数并不是凸的,而其对偶函数是凸的,我们可以利用强对偶性把求原问题的最优解转化为求对偶问题的最优解
首先我们需要证明一个定理:
定理:
其中 θP(x)−θD(α,β) 叫做对偶间隔
p∗−d∗ 叫做最佳对偶间隔
很简单:
首先我们有:
我们得到了结论:原始问题的最优解不小于对偶问题的最优解,那么我们只需要使两个解相等, 就能通过对偶问题得到原问题的最优解。
所以有:
设存在两组原始问题和对偶问题的解分别为 x∗,α∗,β∗ , 当原始问题的解 p∗ 与对偶问题的解 d∗ 相等时,则此 x∗ 与 α∗,β∗ 分别是原始问题和对偶问题的最优解。
这种性质叫做强对偶
满足KKT条件的情况
定理:对于待优化函数 f(x) 和其约束条件函数 ci(x) 与 hj(x) , 如果 f(x) 和 ci(x) 为凸函数, hj(x) 为仿射函数(由一阶多项式组成的函数),并且不等式约束 ci(x) 是严格的, 那么一组解 x∗,α∗,β∗ 是原始问题和对偶问题的最优解的充分必要条件是:
满足KKT条件的优化问题我们可以使用拉格朗日对偶来把求解原问题的最优解转化为求解其对偶问题的最优解从而降低解决问题的难度。
对于一个二分类问题,线性可分支持向量机 或者 线性支持向量机 假设输入空间与特征空间的元素一一对应,并将 输入空间中的输入映射为特征空间的特征向量
在特征空间中找到一个分离超平面,将实例分到不同的类。该分离超平面对应于方程:
线性可分支持向量机会利用间隔最大化,找到唯一的一个分离超平面
线性可分支持向量机对应的分类决策函数为:
对于给定的训练数据集 T 和超平面 (w,b) 定义超平面关于样本点 (xi,yi) 的函数间隔为:
为了防止超平面法向量的系数对于函数间隔的干扰,我们可以对平面法向量 w 施加某些约束。
通常我们可以使用规范化,即 :使 ||w′||=1
这时的函数间隔成为了几何间隔。
对于给定的训练数据集 T 和超平面 (w,b) 定义超平面关于样本点 (xi,yi) 的几何间隔为:
类似于函数间隔,超平面对于数据集 T 的几何间隔为
间隔最大化意味着分割平面有着充分大的确信度对训练数据进行分类。即使是在最难以分类的实例点也有足够大的确信度来分开它们
得到一个间隔最大化的超平面,等价于求解以下最优化问题:
则不妨设
则待优化项的形式则为: maxw,b1||w|| , 这个问题是等价于求 minw,b12||w||2 。
那么得到了线性可分支持向量机所要学习的最优化问题:
对于这个问题,我们构建的拉格朗日函数为(其中的 αi 是拉格朗日乘子):
先求解 minw,bL(w,b,α) ,考虑极值点导数为 0 ,有:
直接带入KKT条件中的公式:
所以,我们可以把分类决策函数写成:
所以我们每次只需要求出 L(w,b,α) 对于各个 αi 的偏导数并令其为0即可得到极值
对于线性可分的数据,使用线性可分支持向量机可以得到相当完美的结果。
但是实际问题并不可能有这么好的性质,所以线性可分支持向量机只能作为一个简单的理论模型。
我们需要一个更为一般的学习算法。
线性可分支持向量机处理问题的局限性,对于线性不可分的数据集,或者仅仅是经过混淆后的线性可分数据集都不能工作
考虑下面这个数据集:训练数据中存在一些特异点,将特异点去除后得到的大部份样本是线性可分的。
我们要修改“硬间隔最大化”为“软间隔最大化”
线性不可分意味着某些样本点无法满足线性可分支持向量机中对函数间隔的要求,为了解决这个问题,我们可以对每个样本点引入一个松弛变量: ξi⩾0 , 使函数间隔大于等于1, 于是在线性支持向量机对应的问题中,约束条件变为:
线性不可分的线性支持向量机的学习问题变成如下的下凸二次规划问题:
考虑到新加的限制条件和变量,对于线性支持向量机的拉格朗日函数是:
对偶问题是拉格朗日函数的极大极小问题。
首先求拉格朗日函数 L(w,b,ξ,α,μ) 对
原问题为:
同样类似于线性可分支持向量机,假设对偶问题的最优解为 α ,则原问题的最优解 w,b 为:
得到的 α=(α1,α2,…,αN) 中 αi≠0 对应的样本中的实例 xi 称作支持向量
如果 αi<C , 则 ξi=0 , 即样本恰好落在间隔边界上。
如果 αi=C,0<ξi<1 ,则分类正确,且在分割超平面与间隔边界之间
如果 αi=C,ξi=1 ,则分类正确,且在分割超平面上
如果 αi=C,1<ξi ,则分类错误,且在分割超平面误分的一侧
有——合页损失函数
线性支持向量机也可以视作最小化以下目标函数:
当样本点被正确分类 且 函数间隔(这里也可以理解为置信度)yi(w⋅xi+b) 大于 1 时,损失为 0 ,否则是 1−y(w⋅x+b)
但我们其实稍微注意一下就能发现, 合页损失函数不过是原问题约束条件的另外一种表示方法
刚才讨论的都是线性的问题, 那么如果样本数据集并不是线性可分的或者大多数不是线性可分的呢?
那么我们应该使用非线性支持向量机
提到非线性支持向量机,首先需要提到的就是核技巧(Kernel trick)
核技巧用来把非线性分类问题转化为线性分类问题
非线性分类问题是指通过利用非线性模型才能很好地进行分类的问题。
一般的来说,对于训练数据集 T={(x1,y1),(x2,y2),⋯,(xN,yN)},xi∈Rn,yi∈{−1,+1} ,如果能用 Rn 上的一个超曲面将正负例正确分开,则称这个问题是非线性可分问题
首先使用一个变换将原空间的数据映射到新的空间上,然后在新空间使用线性分类学习方法得到分类模型。
核技巧就是这样的一种方法。
核技巧通过一个非线性变换将输入空间对应到一个特征空间,使得输入空间上的超曲面对应于该特征空间上的超平面,于是原来的问题只需要通过线性支持向量机就能解决了。
我们需要引入核函数
定义: 设 X 是输入空间,(欧式空间 Rn 的子集或离散集合), 又 H 为特征空间(希尔伯特空间),如果存在一个从 X 到 H 的映射
通常在学习和预测中只定义 K(x,z) 而不定义 ϕ(x) 。通常计算前者比较容易,而通过计算 ϕ(x),ϕ(z) 来计算其内积相当复杂。而且在 K(x,z) 固定的情况下, ϕ(x) 和 H 的取值是有无穷种情况的。
我们注意到在线性支持向量机的对偶问题中,目标函数与决策函数都仅仅涉及到输入实例与实例之间的内积,那么我们只需要将 x⋅xi 用 K(x,xi) 来代替,那么对偶问题的目标函数则成为:
也就是说,我们只需要定义核函数,而不需要显式地定义映射函数和特征空间就能将原数据集转化为线性可分的数据集
这种技巧就是核技巧。
在实际应用中,往往依赖领域知识直接选择核函数,并通过实验进行验证
没有学过泛函分析所以只写一种定义
设 X⊂Rn , K(x,z) 是定义在 X×X 上的对称函数,如果对于 ∀xi∈X , K(x,z) 对应的
对应的支持向量机是一个 p 次多项式分类器, 在此情形下,分类决策函数的形式为:
对应的支持向量机是高斯径向基函数(radial basis function) 分类器
核函数同样可以定义在离散的集合上,例如字符串
维基的说法:
In machine learning and data mining, a string kernel is a kernel function that operates on strings, i.e. finite sequences of symbols that need not be of the same length. String kernels can be intuitively understood as functions measuring the similarity of pairs of strings: the more similar two strings a and b are, the higher the value of a string kernel K(a, b) will be.
在机器学习和数据挖掘中,字符串核函数是一种对字符串进行处理的核函数。例如,由有限字符集中的元素组成的长度不一的序列们。你可以直接把字符串核函数当作度量两个字符串的相似度的函数:两个字符串 a 和 b 越相似,那么它们对应的核函数的值 K(a,b) 越大
考虑 Σ 是一个有限字符表,字符串 s 是从 Σ 中取出有限个字符组成的序列,包括空字符串。字符串 s 的长度用 |s| 表示。所有长度为 n 的字符串的集合记作 Σn ,所有字符串的集合记作
考虑字符串 s 的字串 u ,给定一个指标序列 i=(i1,i2,⋯,i|u|),1⩽i1<i2<⋯<i|u|⩽|s| , s 的子串 u 定义为 u=s(i)=s(i1)s(s2)⋯s(i|u|) ,其长度记作 l(i)=i|u|−i1+1 ,如果 i 是连续的,则 l(i)=|u| ;否则, l(i)>|u| ,
假设 S 是长度大于或等于 n 的字符串的集合, s 是 S 中的元素,现在建立字符串集合 S 到特征空间 Hn=RΣn 的映射 ϕn(s) 。 RΣn 表示定义在 Σn 上的实数空间,其每一维对应一个字符串 u∈Σn ,映射 ϕn(s) 把字符串 s 对应于空间 RΣn 的一个向量,其在第 u 维的取值是:
例子:
假设 Σ 是英文字符集, n=3 , S 为长度大于或等于 3 的字符串的集合,考虑将字符串集 S 映射到特征空间 H3 上。
对于 H3 的某一维: asd , 字符串 Nasdaq 在这一维的值为: [ϕ3(Nasdaq)]asd=λ3 , asd 子序列在 Nasdaq 中一共出现过一次,且该子序列跨越的长度为 3 , 所以取值为 λ3;再考虑字符串 lass□das ,它对应的这一维的值是 [ϕ3(lass□das)]asd=2λ5 ,同样的,在 lass□dsa 中出现过两次相同的子序列,而且它们都跨越了 5 的长度.
基于这个映射,我们给出字符串核函数的定义:
如果不能理解,回去再看一遍。
怎么计算以后可以再开一篇笔记
### 非线性支持向量机
通过核技巧,我们可以把线性分类的学习方法应用到非线性分类问题
下面具体地描述非线性支持向量机学习算法:
(1) 选取适当地核函数 K(x,z) 和适当的参数 C ,构造并求解最优化问题:
(2) 选择 α 的一个分量 αi ,计算
当我们选定的 K(x,z) 是正定核函数时,得到的问题是凸二次优化问题,存在最优解。