SVM

来源:互联网 发布:java random 1到100 编辑:程序博客网 时间:2024/05/19 12:15
    SVM 支持向量机,在sklearn里面,有两种,SVC支持向量分类,用于分类问题,SVR,支持向量回归,用于回归问题。

核方法

用于产生非线性分类边界。
linear,线性核,会产生线性分类边界,一般来说它的计算效率最高,而且需要数据最少。线性函数。

from sklearn import svmsvc = svm.SVC(kernel='linear')svc.fit(X, y)

poly,多项式核,会产生多项式分类边界。多项式函数。

svc = svm.SVC(kernel='poly',degree=4)svc.fit(X, y)

rbf,径向基函数,也就是高斯核,是根据与每一个支持向量的距离来决定分类边界的,它能映射到无限维,是最灵活的方法,但是也需要最多的数据。容易产生过拟合问题。指数函数。

svc = svm.SVC(kernel='rbf', gamma=1e2)

多分类器
采用”one vs one”,在任意两个样本之间设计一个SVM,k个类别的样本设计k(k-1)/2个svm,当对一个未知样本进行分类时,最后得票最多的类别即为该未知样本的类别。
线性支持向量分类器(LinearSVC):相比于svm.SVC,使用了不同的算法,在某些数据集(比如稀疏数据集,文本挖掘)上运行得更快,对于多分类采用的就是”one vs all”的策略

svc=svm.LinearSVC(X,Y)

支持向量

就是最靠近分离边界的样本点,它们是二分类问题中最具有代表性的点。支持向量的坐标可以通过方法support_vectors_来找到。

svc.support_vectors_[:, 0], svc.support_vectors_[:, 1]

正则化

只考虑支持向量。使模型在处理样本特征的时候变得更加简单。
正则项可以通过调整系数C来决定

#大的C值:将会有较少的支持向量,决策边界是被大多数支持向量所决定。svc = svm.SVC(kernel='linear', C=1e3)#小的C值:将会有较多支持向量,决策边界=类别A的平均值-类别B的平均值svc = svm.SVC(kernel='linear', C=1e-3)

默认参数C=1,对于很多数据集,默认值就能工作的很好。
实践经验:对许多分类器来说,对样本正则化,采用标准差正则方法是非常重要的提升预测效果的手段。

0 0