第五章——支持向量机(Support Vector Machines)
svm可用于线性或非线性分类、回归、甚至异常检测。
svm尤其适用于中小数据集的复杂分类问题。
5.1 Linear SVM Classification
svm对feature scales敏感,如下图所示,左图中纵坐标范围远大于横坐标范围,决策边界会因为偏向于横坐标。右图进行了feature scaling之后,决策边界就好得多。

5.2 软间隔分类(Soft Margin Classification)
Scikit-Learn的SVM类有一个C超参数,C越小导致越宽的间隔但是更多的误分点。如下图所示,右侧C较小。C越小的模型也越容易一般化。如果SVM过拟合,可以尝试减小C进行调整。

Scikit-Learn提供了LinearSVC类和SVC类,但是后者会慢得多,由于对于大的训练集,因此不推荐。此外还可以使用SGDClassifier(loss="hinge",alpha=1/(m*C)),这会使用SGD算法训练一个线性SVM分类器,这没有LinearSVC收敛得快,但可以处理海量数据集或者在线分类任务。
The LinearSVC class regularizes the bias term(这半句没看懂), so you should center the training set first by subtracting its mean.这在调用StandardScaler时会自动完成。同时要设置损失超参数为"hinge",对偶(dual)超参数为False(除非特征数多于样本)。
5.3 Nonlinear SVM Classification
有些数据集本身就不是线性的,一个解决方案就是增加特征,比如多项式特征,然后使用线性SVM进行训练。这与4.3的多项式回归类似。
5.3.1 多项式核(Polynomial Kernel)
增加多项式特征很简单,但是次数太低无法拟合复杂函数,次数太高又会增加大量的特征。
幸运的是,SVMs可以使用一种被称作核技巧(kernel trick)的数学方法。它和增加很多多项式特征的表现一样,但实际上有没有增加特征。
5.3.2 增加相似度特征(Adding Similarity Features)
另一个处理非线性问题的方式是使用相似度函数增加特征,该函数计算所有样本点与给定样本点的相似度。比如,我看可以定义$\gamma = 0.3$的高斯径向基函数(Radial Basis Function,RBF)为相似度函数。
Gaussian RBF:
$\phi \gamma(X,l) = exp(-\gamma\left \| X - l \right \|^2)$
至于怎么选取给定的样本点,一个简单的方法是训练集中的所有样本都作为给定样本点,以便新的数据集尽可能的线性可分。但是这样的话,如果训练集很大,那就会增加太多的的特征。
5.3.3 Gaussian RBF Kernel
与多项式核代替直接增加多项式特征相似,我们也可以使用高斯RBF核代替直接增加相似度特征。
还有一些其它的很少用到的核函数。比如一些核函数是专门处理特殊数据结构的。String kernels可用于文本或DNA序列分类(比如string subsequence kernel或者基于Levenshtein distance的核)。
如何选择核函数呢?一般来说,首先应该尝试线性分类器,尤其是训练集很大或者特征很多。如果训练集不是特别大,也可以尝试Gaussian RBF kernel,图适用于大多数情况。
5.3.4 计算复杂度(Computational Complexity)
LinearSVC基于liblinear,它实现了线性SVMs的优化算法,但是不支持核技巧,计算复杂度大概$O(m \times n)$。
SVC基于libsvm,它实现了一个支持核技巧的算法,计算复杂度在$O(m^2 \times n)$到$O(m^3 \times n)$之间。
5.4 SVM回归
与分类问题求得类别间的最大间隔不同,SVM回归的目的是使得间隔里面包含最多的样本点。间隔的宽度通过超参数$\varepsilon$控制,如下图所示:

5.5 底层知识(Under the Hood)
svm的一些理论知识可参考支持向量机。
5.5.6 在线SVMs
这个有时间再了解吧。
第五章——支持向量机(Support Vector Machines)的更多相关文章
- [C7] 支持向量机(Support Vector Machines) (待整理)
支持向量机(Support Vector Machines) 优化目标(Optimization Objective) 到目前为止,你已经见过一系列不同的学习算法.在监督学习中,许多学习算法的性能都非 ...
- 斯坦福第十二课:支持向量机(Support Vector Machines)
12.1 优化目标 12.2 大边界的直观理解 12.3 数学背后的大边界分类(可选) 12.4 核函数 1 12.5 核函数 2 12.6 使用支持向量机 12.1 优化目标 到目前为 ...
- 机器学习课程-第7周-支持向量机(Support Vector Machines)
1. 优化目标 在监督学习中,许多学习算法的性能都非常类似,因此,重要的不是你该选择使用学习算法A还是学习算法B,而更重要的是,应用这些算法时,所创建的大量数据在应用这些算法时,表现情况通常依赖于你的 ...
- Ng第十二课:支持向量机(Support Vector Machines)(三)
11 SMO优化算法(Sequential minimal optimization) SMO算法由Microsoft Research的John C. Platt在1998年提出,并成为最快的二次规 ...
- 十二、支持向量机(Support Vector Machines)
12.1 优化目标 参考视频: 12 - 1 - Optimization Objective (15 min).mkv 到目前为止,你已经见过一系列不同的学习算法.在监督学习中,许多学习算法的性能都 ...
- stanford coursera 机器学习编程作业 exercise 6(支持向量机-support vector machines)
在本练习中,先介绍了SVM的一些基本知识,再使用SVM(支持向量机 )实现一个垃圾邮件分类器. 在开始之前,先简单介绍一下SVM ①从逻辑回归的 cost function 到SVM 的 cost f ...
- Ng第十二课:支持向量机(Support Vector Machines)(二)
7 核函数(Kernels) 最初在“线性回归”中提出的问题,特征是房子的面积x,结果y是房子的价格.假设从样本点的分布中看到x和y符合3次曲线,那么我们希望使用x的三次多项式来逼近这些样本点.那么首 ...
- Ng第十二课:支持向量机(Support Vector Machines)(一)
1 目录 支持向量机基本上是最好的有监督学习算法了,从logistic回归出发,引出了SVM,揭示模型间的联系,过渡自然. 2 重新审视logistic回归 Logistic回归目的是从特征学习出一个 ...
- 机器学习(八)--------支持向量机 (Support Vector Machines)
与逻辑回归和神经网络相比,支持向量机或者简称 SVM,更为强大. 人们有时将支持向量机看作是大间距分类器. 这是我的支持向量机模型代价函数 这样将得到一个更好的决策边界 理解支持向量机模型的做法,即努 ...
- 斯坦福机器学习视频笔记 Week7 支持向量机 Support Vector Machines
SVM被许多人认为是最强大的“黑箱”学习算法,并通过提出一个巧妙选择的优化目标,今天最广泛使用的学习算法之一. Optimization Objective 根据Logistic Regression ...
随机推荐
- java 多线程和线程池
● 多线程 多线程的概念很好理解就是多条线程同时存在,但要用好多线程确不容易,涉及到多线程间通信,多线程共用一个资源等诸多问题. 使用多线程的优缺点: 优点: 1)适当的提高程序的执行效率(多个线程同 ...
- MySQL内存调优
原文链接: MySQL Memory Allocation -- by Rick James原文日期: Created 2010; Refreshed Oct, 2012, Jan, 2014 翻译人 ...
- Android ROM开发(一)——Windows下Cygwin和Android_Kitchen厨房的安装
Android ROM开发(一)--Windows下Cygwin和Android_Kitchen厨房的安装 很久没有碰到ROM开发了,在很久很久以前也是从ROM起步的,无奈还是一脚踏上了Android ...
- 地产IT人福利:帆软地产BI解决方案全解析
解决方案下载地址 帆软大型地产集团项目解决方案 下载地址:http://pan.baidu.com/s/1pJGeqKF帆软地产BI解决方案之KPI考核系统 下载地址:http://pan.baidu ...
- win7 64位下自行编译OpenCV2.4.10+CUDA toolkit 5.5的整个过程以及需要注意的问题(opencv+cuda并行计算元素的使用)
首先说明的是,这个帖子是成功的编译了dll,但是这个dll使用的时候还是很容易出现各种问题的. 发现错误可能是由于系统安装了太多版本的opencv,环境变量的设置混乱,造成dll版本加载 ...
- err:安装程序试图挂载映像 1(缺少ISO 9660图像)
一般出现此错误是因为你没有把相应的CentOS-6.4-i386-bin-DVD1.iso文件放入到你装系统所引导的盘中,造成找不到挂载映像文件. ubuntu-12.04.3-desktop-i38 ...
- “万能数据库查询分析器” 5.03发布,访问EXCEL将自动为表名前后加上中括弧
"万能数据库查询分析器" 5.03发布,访问EXCEL将自动为表名前后加上中括弧 1 引言 中国本土程序员马根峰推出的个人作品----万能数据库查询 ...
- 恶补web之八:jQuery(2)
jquery中非常重要的部分,就是操作dom的能力: text() - 设置或返回所选元素的文本内容 html() - 设置或返回所选元素的内容(包括html标记) val() - 设置或返回表单字段 ...
- ruby中如何直接编译运行C代码
我们知道ruby通过C EXT可以很方便的运行C代码,其实只要是C接口的语言都可以,比如汇编语言也可以哦.但是一些简单的函数难道还得费劲用C扩展的方式吗?其实ruby gem里有RubyInline包 ...
- javascript简单介绍
ECMAScript 1.语法 2.变量:只能使用var定义,如果在函数的内容使用var定义,那么它是一个局部变量,如果没有使用var它是一个全局的.弱类型! 3.数据类型:原始数据类型(undefi ...