机器学习 ——支持向量机SVM

来源:互联网 发布:帝国cms微信支付接口 编辑:程序博客网 时间:2024/04/28 18:56

一、SVM:最大间隔分类器
1、简介
简单说,支持向量机(Support Vector Machine)就是寻找分割线(超平面),介于两个类别之间。
感知机算法(PLA)可以找到一条线,把右图中的x和o分开。
感知机原理

但是在使用时,往往会存在下面这样尴尬的情况:
这里写图片描述
这三条线都能成功的分开训练集中的点。但人类的直观感觉,第三种作为分类边界似乎更加‘稳妥一些’。我们希望寻找一条线,在能正确分类的同时,与数据点的分隔距离(margin)尽量的大。

这里写图片描述

2、 SVM的优缺点
优点:返回的分割直线满足margin最大的条件,所以是一个robust的解
缺点:对数据点的依赖 是稀疏的,只有少量支持向量对最终结果有贡献。传统的SVM只能处理线性可分的问题,并且对数据中的噪音也很敏感,因此我们必要对算法进行改造。
(1)SVM变形一:软间隔SVM
允许SVM犯一点错, Soft-Margin SVM 算法。允许有一些异常点存在,他们或者分类错了,或者只是出现在了绿色的带状禁区里面。参数C就控制着二者的权衡。
这里写图片描述
(2)SVM变形二: kernel method
这样的问题正则项没用,这时我们需要一种新的思想: 升维。通常使用的kernel 有:
linear kernel(其实就是不用kernel不升维)
Polynomial Kernel
Gaussian Kernel(sklearn里叫rbf kernel):在选用rbf kernel时,数据已经被映射到了无穷维的空间中去,从而保证数据一定是线性可分的.

注意:Kernel提供了一种在不写出具体映射表达式的情况下,计算数据内积的方法。 原则上说,但凡是需要计算内积的算法,都可以使用kernel trick,而不仅仅局限于svm

二、SVM编码
使用模块:
导入from sklearn import svm
创建clf = svm.SVC()
拟合 clf.fit(features_train,labels_train)

三、非线性SVM
SVM中会进行特征转换,这会改变你对“线性可分”数据的看法
1、kernel trick核技巧
要点:获取低维空间或特征空间,映射到高维空间,将线性不可分转化为线性可分,再用SVM分离数据点,获得解返回原始空间。当选用kernel时,升维已经自动做好了,所以在调用sklearn中带kernel的svm时才会各种奇形怪状的分类边界。
这里写图片描述

2、SVM参数
(1)gamma
(2)C:一个更大的 C 会得到更多正确的训练点,越大曲线越曲折,容易overfitting