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

标签: 机器学习svm算法
3129人阅读 评论(8) 收藏 举报
分类:

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,我拉你进我的机器学习群(群里很多高手哦!),或者扫描二维码!当然你也可以关注我的公众号,点击链接:燕哥带你学算法公众号团队简介

这里写图片描述

4
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    我的公众号

    关注微信公众号,专

    为机器学习入门者
    个人资料
    • 访问:146409次
    • 积分:3352
    • 等级:
    • 排名:第10749名
    • 原创:86篇
    • 转载:6篇
    • 译文:4篇
    • 评论:765条
    博客专栏
    最新评论