SVM:Support Vector Machine。 解决的问题支持向量机主要解决二分类问题,通过学习高维空间的线性分割边界解决原始数据线性不可分问题。 SVM同时也能应用于多分类、回归及单分类异常检测等问题。 SVCSupport Vector Classification,y ϵ {+1, -1}。 Peter Flach Machine Learning 直觉上,线性可分二分类,最好的分类边界应该是使靠的最近的不同类别的数据分开的越远越好。接近边界的数据能被良好地分开,远离边界的数据,分类自然更没问题。 Andrew NG CS229 注意:y ϵ {+1, -1},m=1,不等式约束表达数据都在上图边界构成的管道外,保证w是最优化边界的参数。 考虑不等式约束,根据拉格朗日乘子法,目标函数变为: Andrew NG CS229 再根据拉格朗日对偶问题: Andrew NG CS229 结合KKT条件,最终的目标函数为: Andrew NG CS229 注意最终目标函数的形式:
核函数技巧Kernel Trick,SVM算法的一大利器。 Sergios Theodoridis Machine Learning x -> Φ(x),比如: Andrew NG CS229 但是<Φ(x1), Φ(x2)>的时间复杂度也随着映射空间的复杂而复杂。 核函数技巧的重点通过已知的核函数隐式地实现内积的形式<Φ(x1), Φ(x2)>,并不直接设计Φ;选择核函数的标准也在于能否表达某种<内积>关系。 常见的核函数有四种: National Taiwan University A Practical Guide to Support Vector Classification 可见,以上核函数的计算复杂度都在原始x空间内。 Sergios Theodoridis Machine Learning polynomial多项式核函数: Sergios Theodoridis Machine Learning 不同核函数,分类效果,大致如下: scikit-learn.org svm文档 C-SVC上述推导的SVM是理想情况下,数据集能够完美划分的情形。实际情况,难免会有一些干扰数据。SVM的一个最常见的变体是采用软间隔,增加L1正则,容忍管道内有一定的数据: Simon Haykin《Neural Networks and Learning Machines》 ϵ表达点到其分类决策边界的距离,是个绝对值概念,所以称之为L1正则。 Andrew NG CS229 根据朗格朗日乘子法: 最终的目标函数变为: Andrew NG CS229 和理想的SVM相比,朗格朗日乘子α多了个上界约束,其最终约束为: Andrew NG CS229 分类表达给定一个样本,预测的时候,SVC如何确定属于哪一个分类呢? Simon Haykin《Neural Networks and Learning Machines》 其实就是将样本数据代入映射后的高维空间,按照位置,线性判别即可。 LIBSVM: A Library for Support Vector Machines 可见,SVC只能输出样本属于哪一个分类,而不能像其他分类器一样输出概率。 多分类SVC主流的多分类有one-versus-one和one-versus-all。
LIBSVM: A Library for Support Vector Machines One-class SVM单分类SVM,只有一个类别,SVM等于是在发现训练数据的数据分布。 LIBSVM: A Library for Support Vector Machines 通过ν控制误差及特征向量个数,ρ是个偏移量,可以理解为适应不同象限不同位置的样本分布。 datachemeng.com 映射到高维空间后,让所有样本属于同一个类的同时,尽可能让边界离原点距离最远,最终根据边界判断是否为异常数据。 ϵ-SVRϵ-INSENSITIVE Support Vector Regression:解决回归问题。 类比于分类边界的管道,ϵ-SVR回归的管道是容忍误差ϵ,特征向量对应的点是两个虚线边界上和边界外的样本。 和C-SVC一致,这里线性回归采取的也是绝对值误差: 近似方法为linear ϵ-insensitive loss,在[-ϵ, +ϵ]范围内,误差近似为0,暂且称ϵ为容忍误差: Sergios Theodoridis Machine Learning 以linear ϵ-insensitive loss为基础,与C-SVC类似,将正则误差项替换为回归的损失,优化的原始目标函数为: 注意参数符号与SVC略有不同,应该不影响阅读。 经过对偶、KKT条件约束、求导,最终优化的目标函数为: Sergios Theodoridis Machine Learning 给定样本,预测结果为: 本段的图片来自Sergios Theodoridis的《Machine Learning: A Bayesian and Optimization Perspective》。 复杂度想到只有支持向量参与学习,SVM的速度应该很快,这是一个小误区,因为确定支持向量本身也是学习的一部分。 以主流的libsvm的复杂度为例: scikit-learn.svm 文档 可见,复杂度大概为o(n^2) ~ o(n^3),随着样本的增加,SVM的速度会变得很慢。 代码示例以scikit-learn SVM相关方法为例。 scikit-learn.svm 二分类 scikit-learn.svm one vs one 多分类 scikit-learn.svm 线性核二分类 scikit-learn.svm 回归 总结基础的SVM算法通过拉格朗日相关最优化方法,将欧拉空间线性不可分问题映射到希尔伯特空间线性可分,并通过核函数技巧及支持向量选择,在高维空间有效解决二分类问题。 Simon Haykin《Neural Networks and Learning Machines》 |
|
来自: taotao_2016 > 《AI》