机械学习之SVM

上次参加英特尔杯的时候,忽然被问到了SVM,我当时说,输入数据输出label(当时忘了是训练出一个分类器),受到了某校院长的质疑,因此我开始对我已有知识产生动摇,虽然我觉得他很菜,但是至少应该会点东西吧。(但我觉得他是在唬我),于是我被唬住了,就不知道怎么回事了,因为一般都是直接sklearn,之前学习过理论,也是很久之前的了。周老师的《机器学习》中的svm中过多的原理(什么泰勒展开,KKT约束条件。着实让我有点头疼)
今天把之前的资料整理了一下。

归纳:
如图:
SVM其实是在寻找什么时候可以得到最大的margin,通过一堆推到,我们可以得出一些结论:
所有support vector到达这个超平面的距离都是1/||w||
这里的w是这个线的斜率。可能不止一个维度。下面是二分类的问题。


先给出一个实例,就是已知support vector 求 超平面:(图不太清晰)
上图可以大致看清楚求解的过程。

svm是用来进行二分类问题的。而要处理多分类问题,就要使用一些策略(1vs rest 或  1 vs 1 或 层级结构)其中sklearn中的SVC采用的是1vs1,linearSVC采用的是1vs rest。

svm之所以备受青睐,是因为他的复杂度很低,只和support vector的数量有关。与有多少个特征点没有任何关系。
对于非线性解决的分类问题,需要寻找一个非线性的高维映射,将特征点投影到更高维的空间中,从而进行数据划分。(如下图)


因此就引入了kernal(核函数),引入核函数的原因,是因为在求解公式都是以内积形式出现的f(x)*f(y)。假设f(x)为把x映射到高维空间的映射函数。内积算法非常复杂,因此具有很高的复杂度,核函数就是为了解决这个问题。

k(x,y)=f(x)*f(y),其中 k 就为核函数,能与内积得到相同的结果。

常用的核函数:
举一个例子来更加准确的理解核函数:


是不是明显感觉到复杂度的巨大差异了?这就是使用核函数的原因。

还有一个人脸识别的svm的例子。先down数据,预处理,降维(pca,lda,iosmap),最后进行fit。得到结果。先到这了,碎觉。

猜你喜欢

转载自blog.csdn.net/qq_36616268/article/details/80589348
今日推荐