Scikit-Learn 支持向量机学习

1、支持向量机

支持向量机是一种有监督的学习方法,可以用来做分类、回归和离群点检测。

2、支持向量机的优缺点

优点
  1. 在高维空间是有效的
  2. 当特征的维数比样本数量多的时候仍然有效
  3. 在决策函数中仅使用支持向量,能够节省内存
  4. 能够支持多种不同的核函数
缺点
  1. 当特征的数量远多于样本数量时,性能表现差
  2. SVMs 并不直接给出概率估计

3、分类

a). SVC,NuSVC,LinearSVC 能够进行多个类的分类


  • SVC与NuSVC相似,但是其参数不同,数学推导公式也不同
  • LinearSVC是SVM的另一种实现形式,它是基于线性核的,因此需要注意的是:因为它的假设是线性的,所以LinearSVC并不支持kernel的关键字。

一个小例子:
SVC是sklearn的SVM模块的一个方法,利用fit(),可以拟合数据集,利用predict()进行预测
属性:support_vectors_ 可以得到支持向量
# -*- coding:utf-8 -*-

from sklearn import svm

x = [[0,0],[1,1]]
y = [0,1]
clf = svm.SVC()
clf.fit(x,y)
print clf
print clf.predict([2,2])
print clf.support_vectors_

b). 多分类


SVC和NuSVC利用one VS one 方式实现了多分类,共有n(n-1)/2个分类器, n为类的数量
LinearSVC 利用one VS rest 实现了多分类

c). 得分和概率值


SVC的方法decision_function可以给出每个样本每个类的得分
在二分类中,概率可以利用platt缩放进行校准:platt缩放--> 在SVC的得分上进行逻辑回归(LR),通过额外的训练数据集进行交叉验证。

d). 不平衡问题


对于这个问题,可以利用class_weight和sample_weight给某些类和样本更最重要的权值
SVC的fit方法有class_weight关键字
SVC、NuSVC、SVR、NuSVR、OneClassSVM 利用sample_weight关键字调整特定样本的权重

4、回

SVR,NuSVR,LinearSVR 提供支持向量机回归方法
一个小例子:

# -*- coding:utf-8 -*-

from sklearn import svm
X = [[0, 0], [2, 2]]
y = [0.5, 2.5]
clf = svm.SVR()
clf.fit(X, y)

print clf.predict([[1, 1]])

输出:
[ 1.5]

5、密度估计和离群点检测

OneClassSVM 可以用来做利群点检测,它会训练一个边界,当新的点需要进行检测时,判断它是否在边界内或者是在边界外
OneClassSVM 是一个无监督的方法,只需要提供X即可,并不需要提供标签。

6、复杂度

时间复杂度在O(n^2) - O(n^3) 之间, 需要依据libsvm的cache而定
注意: 在线性案例中,基于liblinear的LinearSVC 比基于libsvm的SVC效率更高,并且可以处理几百万的样本或者属性。


7、径向基函数的参数选择

RBF有两个参数需要选择,C,gamma
C:SVM核函数通用的。一个小的C,使决策平面光滑; 一个大的C, 使所有的训练实例都被正确分类
gamma:定义一个样本的影响度,它越大,与它越近得样本收到的影响越大。
选择合适的C和gamma会对SVM的性能有影响,可以利用sklearn.model_selection.GridSearchCV来寻找合适的参数。


















  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值