支撑向量机,SVM(Support VectorMachine),其实就是一个线性分类器。在最初接到这个算法时,我们可能会一头雾水:这个名词好奇怪[问号脸],怎么“支持”?什么“向量”,哪来的“机”?
本篇文章从“不适定问题”开始介绍SVM的思想,通过支撑向量与最大间隔引申到如何将其转换为最优化问题,并数学推导求解有条件限制的最优化问题。相信学完本篇之后,大家一定会对SVM算法有一个大体上的认识。
1分类中的不适定问题
首先,我们看一个简单的二分类问题。在二维的特征平面中,所有的数据点分为了两类:蓝色圆形和黄色三角。我们的目标是找到了一条决策边界,将数据分类。但实际上我们可以找到多条决策边界。其实我们可以看到,SVM算法也没有多么神秘。其最核心的思想就是从Input Space向更高维的Feature Space的映射,进行有Margin的线性分类。
在这一篇文章中,我们要做的就是学习支持向量机算法的相关概念、算法思想、推导过程。一边体会算法的奥义,一边为后续的进一步学习做准备。
在线性可分问题中,对于样本点来说,存在一根直线可以将样本点划分,我们称之为Hard
Margin SVM;但是事实上,并不是所有情况都是完美的,这就引出了下一篇文章就讲解Soft
Margin SVM以及相关知识。大家加油!
解决回归问题的思想
SVM思想也可以解决回归问题。回归问题的本质就是找到一根能够很好滴拟合数据点的线(直线、曲线)。**不同回归算法的关键是怎么定义拟合。**比如我们之前学习的线性回归算法,定义拟合的方式就是数据点到拟合直线的MSE最小。
而对于SVM算法来说,如何定义“拟合”呢?
指定一个Margin值,在Margin区域的范围内,包含的数据点越多越好。这就表示这个Margin范围能够比较好地表达样本数据点,在这种情况下取中间的直线作为真正回归结果,用它来预测其他点的y值。
这和SVM算法解决分类问题的思路是相反的,在解决分类问题时,我们期望Margin中的范围越少越好。但是解决回归问题恰恰相反,我们希望所定义的Margin范围能够拟合更多的数据。
在具体训练SVM解决回归问题时,需要指定Margin范围,这里就引入了一个超参数,即Margin的边界到中间直线的距离。
那么这种思想如何转换成具体的最优化问题表达式极其推导,就不介绍了。我们直接看看如何在sklearn中使用它。
算法回顾
上个世纪六十年代,就提出了SVM的概念,到九十年代才逐渐完善。
最初就是一个线性分类器,对其进行改进,使得Margin最大化,这就导出了Linear SVM,定义了Margin,将其数学表达式求出来,去优化这个函数。
Linear SVM也有一些问题,即在实际情况下不能完美地将各个数据点分开,在不满足限制条件的下就求不到数学解。为了解决线性可分的情况下存在异常点的问题,就提出了Soft Margin的思想,增加正则化项,提高容错性。
那么如何解决线性不可能问题呢?把原始空间的问题映射到高维空间,将线性不可分问题转换成线性可分问题,即将。这种想法非常好,但是高维数据做内积,计算量太大了。
为了解决这个问题,数学家提出了Kernel Trick核函数:。实际上我们从来不会去真正去求高维映射,而是直接用核函数来代替了,既相当于在高维空间进行操作,又解决了计算量大的问题。
总结:
SVM算法是一个很优秀的算法,在集成学习和神经网络之类的算法没有表现出优越性能前,SVM基本占据了分类模型的统治地位。目前则是在大数据时代的大样本背景下,SVM由于其在大样本时超级大的计算量,热度有所下降,但是仍然是一个常用的机器学习算法。
SVM算法的主要优点有:
[if !supportLists]1. [endif]解决高维特征的分类问题和回归问题很有效,在特征维度大于样本数时依然有很好的效果。
[if !supportLists]2. [endif]仅仅使用一部分支持向量来做超平面的决策,无需依赖全部数据。
[if !supportLists]3. [endif]有大量的核函数可以使用,从而可以很灵活的来解决各种非线性的分类回归问题。
[if !supportLists]4. [endif]样本量不是海量数据的时候,分类准确率高,泛化能力强。
SVM算法的主要缺点有:
[if !supportLists]1. [endif]如果特征维度远远大于样本数,则SVM表现一般。
[if !supportLists]2. [endif]SVM在样本量非常大,核函数映射维度非常高时,计算量过大,不太适合使用。
[if !supportLists]3. [endif]非线性问题的核函数的选择没有通用标准,难以选择一个合适的核函数。
[if !supportLists]4. [endif]SVM对缺失数据敏感。
sklearn算法中的使用
网友评论