第五章——支持向量机(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 ...
随机推荐
- 求剁手的分享,如何简单开发js图表
前段时间做的一个项目里需要用到js图表,在网上找了下,大概找到了highcharts.fusioncharts这些国外产品. 因为都收费,虽然有盗版,我也不敢用,万一被找上们来就砸锅卖铁了要.自己写j ...
- 为多态基类声明virtual析构函数
一个函数的返回值为基类指针,而当指针指向一个派生类对象,接下来派生类对象被这个基类指针删除的时候,就出现了局部销毁的问题.因为C++指出,当派生类经由一个基类指针被删除,而该基类指针带着一个non-v ...
- Oracle E-Business Suite Maintenance Guide Release 12.2(Patching Utilities)
更多内容参考: http://docs.oracle.com/cd/E51111_01/current/acrobat/122ebsmt.zip Oracle Patch Application As ...
- ubuntu下如何安装codeblocks集成开发环境
codeblocks是一个十分优秀的C/C++开发IDE,虽然后起之秀codelite目前来看大有超越之势哦. 不过在ubuntu下安装codeblocks却比较麻烦,不像其他linux发行版,比如s ...
- 和菜鸟一起学linux之linux性能分析工具oprofile移植
一.内核编译选项 make menuconfig General setup---> [*] Profiling support <*> OProfile system profil ...
- Java IO学习--(三)通道
Java IO中的管道为运行在同一个JVM中的两个线程提供了通信的能力.所以管道也可以作为数据源以及目标媒介. 你不能利用管道与不同的JVM中的线程通信(不同的进程).在概念上,Java的管道不同于U ...
- 解决:MySQL 报错:1045 - Access denied for user 'root'@'localhost'(using password YES)
一.前言 今年疯狂迷上了开源,只要看到好的开源项目,就会不顾一切一股脑扎进去研究,五一期间发现一个很好的关于众筹的开源项目,但不巧,这个项目竟然是 PHP 写的,没学过 PHP,自然对这个开源项目毫无 ...
- remove Nth Node from linked list从链表中删除倒数第n个元素
Given a linked list, remove the nth node from the end of list and return its head. For example, Give ...
- Spring Aop中,获取被代理类的工具
在实际应用中,顺着过去就是一个类被代理.反过来,可能需要逆向进行,拿到被代理的类,实际工作中碰到了,就拿出来分享下. /** * 获取被代理类的Object * @author Monkey */ p ...
- DDGScreenShot—图片擦除功能
写在前面 图片擦除功能,也是运用图片的绘制功能, 将图片绘制后,拿到相应的图片.当然,有一涨底图更明显 实现代码如下 /** ** 用手势擦除图片 - imageView --传图片 - bgView ...