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来寻找合适的参数。