Support Vector Machines-scikielearn-翻译-毕设系列
写在前面的话
- 本文是一篇译文,来自scikit-learn上的一篇关于SVM的简介。翻译本文的目的是在于更好的理解SVM,另一方面也可锻炼我的英语阅读能力和翻译水平。
- 原文链接Support Vector Machines
支持向量机(SVM)
- 支持向量机是监督学习的一种,它的功能很强大,即可以应用于分类,又可以应用于回归和离群点的检测。
- 支持向量机的优点:
- 在高维空间中有效
- 可以处理由低维空间转换到高维空间中的样本
- 决策函数中只用到训练集中的一个子集(通常被称为支持向量),所以所占内存较小
- 通用性:决策函数中可以指定不同的核函数.支持常用的核函数,但也可以自定义自己的核函数
- 支持向量机的缺点:
- 如果特征维数比样本数要大,那么效果较差
- 支持向量机不直接提供概率估计,它是通过一个较为复杂的5倍交叉验证来完成(看下面的分数和概率
- scikit-learn中实现的支持向量机既接受密集的样本(numpy.ndarray and convertible to that by numpy.asarray)又接受稀少(any scipy.sparse)的样本向量作为输入.但是,如果用支持向量机为稀少的样本向量做预测,它必须先拟合好这样的数据。要得到最佳化的表现,密集的用C-ordered numpy.ndarray,稀少的用scipy.spare.csr_matrix,而且dtype=float64。
分类
- SVC,NuSVC和LinearSVC可以对数据集进行多类分类。
- SVC和NuSVC是相似的方法,但是接收的参数和数学公式有少少不同(详见数学公式)。另一方面,LinearSVC则是通过线性核函数来实现支持向量机的另一种方式。既然LinearSVC不接受kernel作为关键字,那么我们就默认它是线性的。它还可能缺少SVC和NuSVC中的某些字段,例如support_。
- SVC,NuSVC和LinearSVC中的输入为两个数组,X数组为训练集,它的大小是[n_samples, n_features],Y数组是一个标签类,字符串或者整数,大小为[n_samples]。
1 | from sklearn import svm |
- 拟合之后,模型就可以用来预测新变量:
1 | 2., 2.]]) clf.predict([[ |
- 支持向量机决策函数依赖训练集的某个子集,被称作支持向量。这些支持向量的某些属性可以在成员support_vectors,support_和n_support中找到。
1 | # get support vectors |
多类分类器
- SVC和NuSVC为多分类分类器实现了“一对一”的方法(Kerr et al., 1991)。如果n_class代表类的个数,那么就要构造n_class * (n_class - 1) / 2个分类器,而且每一个数据训练成两个类:
1 | 0], [1], [2], [3]] X = [[ |
- 另一个方面,LinearSVC则为多分类分类器实现了“一对其他”的方法,所以只需要训练n_class个模型,如果是分两类,那么只需要训练一个模型。
1 | lin_clf = svm.LinearSVC() |
- 关于决策函数,详见数学公式
- 既然LinearSVC也实现了另一个候补的多分类策略,由Crammer和Singer构造的所谓的多分类SVM,记作multi_class=’crammer_singer’。这个方法是很稳定的,但是对于“一对其他”的分类器并非如此。实际上,“一对其他”分类器通常是首选的,因为结果大多数比较相似的,但是运行时间就没有什么比较的意义了。
- 对于“一对其他”的LinearSVC中的coef_和intercept_属性,他们分别表示为[n_class,n_features]和[n_class]。
后记
- 本文标题:Support Vector Machines-scikielearn-翻译-毕设系列
- 创建时间:2015-01-12 13:19:32
- 本文链接:2015/01/12/毕业设计系列/Support-Vector-Machines-scikielearn/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
评论