您的位置:首页 > 其它

[置顶] Scikit-learn实战之SVM分类

2016-11-27 18:05 337 查看
Support vector machines (SVMs) 是一系列的有监督的学习方法,主要用于分类回归异常点检测

1. SVM的主要优点如下:

在高维空间有效;

当样本空间的维度比样本数高时任然有效;

使用训练样本的子集构建决策函数(这些样本点被称之为支持向量),因此它的内存效率很高;

SVM是一个全能型的机器学习算法:可以指定不同的核函数的决策函数,提供了常见的核函数,但是也可以指定自定义的核函数。

2. SVM的主要缺点有:

当特征维度远高于训练样本数时,该方法可能表现的不好;

SVM不直接提供概率估计,这些都是使用昂贵的5折交叉验证计算得到的。

Scikit-learn中的SVM支持稠密和稀疏两种向量作为输入。但是使用SVM为稀疏数据做预测,他一定是符合这样的数据(scipy.sparse)。为了最佳的性能,使用numpy.ndarray作为稠密向量以及scipy.sparse.csr_matrix 作为稀疏向量,并且dtype=float64。

3. 分类

SVC,NuSVC和LinearSVC是三种在数据集上进行多分类的分类器。SVC和NuSVC是相类似的方法,但是它们接受不同的参数并且它们的数学公式也不一样。

作为分类器,SVC, NuSVC and LinearSVC 都接收两个数组作为输入:训练样本 X [n_samples, n_features], 结果类标 y [n_samples] (可以是字符串或者是整数)。

下面的代码生成一个简单的SVM分类器模型:

>>> from sklearn import svm
>>> X = [[0, 0], [1, 1]]
>>> y = [0, 1]
>>> clf = svm.SVC()
>>> clf.fit(X, y)


接下来就利用训练好的模型进行预测:

>>> clf.predict([[2., 2.]])
array([1])


SVM决策函数依赖于训练数据的某个子集:称之为支持向量。这些支持向量的属性可以从一下三个成员中获取: support_vectors_, support_ 以及 n_support。

>>> # 获取支持向量
>>> clf.support_vectors_
array([[ 0.,  0.],
[ 1.,  1.]])
>>> # 获取支持向量的索引
>>> clf.support_
array([0, 1]...)
>>> # 获取每个类的支持向量
>>> clf.n_support_
array([1, 1]...)


3.1 多类分类(Multi-class classification)

SVC 和 NuSVC 使用了“one-against-one”方法(Knerr et al.,1990)对于多类目标分类。如果n_class是类别的数目,那么n_class * (n_class - 1)/2个分类器会被构造并且每一个都要从两类数据中经过训练。为了提供与其他分类一致的接口,这个decision_function_shape选项允许集合“one-against-one”分类器的所有结果到一个大小为(n_samples,n_classes)的决策函数中:

>>> X = [[0], [1], [2], [3]]
>>> Y = [0, 1, 2, 3]
>>> clf = svm.SVC(decision_function_shape='ovo')
>>> clf.fit(X, Y)
>>> dec = clf.decision_function([[1]])
>>> dec.shape[1] # 4 classes: 4*3/2 = 6
6
>>> clf.decision_function_shape = "ovr"
>>> dec = clf.decision_function([[1]])
>>> dec.shape[1] # 4 classes
4


另一方面, LinearSVC 实现了“one-vs-the-rest”多类的策略,这样训练一个n_class个模型。如果仅仅有两个类,仅仅需要训练一个模型:

>>> lin_clf = svm.LinearSVC()
>>> lin_clf.fit(X, Y)
>>> dec = lin_clf.decision_function([[1]])
>>> dec.shape[1]
4


未完待续…

对机器学习,人工智能感兴趣的小伙伴可以加我微信:JeemyJohn,我拉你进我的机器学习群(群里很多高手哦!),或者扫描二维码!当然你也可以关注我的公众号,点击链接:燕哥带你学算法公众号团队简介

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: