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)的更多相关文章

  1. [C7] 支持向量机(Support Vector Machines) (待整理)

    支持向量机(Support Vector Machines) 优化目标(Optimization Objective) 到目前为止,你已经见过一系列不同的学习算法.在监督学习中,许多学习算法的性能都非 ...

  2. 斯坦福第十二课:支持向量机(Support Vector Machines)

    12.1  优化目标 12.2  大边界的直观理解 12.3  数学背后的大边界分类(可选) 12.4  核函数 1 12.5  核函数 2 12.6  使用支持向量机 12.1  优化目标 到目前为 ...

  3. 机器学习课程-第7周-支持向量机(Support Vector Machines)

    1. 优化目标 在监督学习中,许多学习算法的性能都非常类似,因此,重要的不是你该选择使用学习算法A还是学习算法B,而更重要的是,应用这些算法时,所创建的大量数据在应用这些算法时,表现情况通常依赖于你的 ...

  4. Ng第十二课:支持向量机(Support Vector Machines)(三)

    11 SMO优化算法(Sequential minimal optimization) SMO算法由Microsoft Research的John C. Platt在1998年提出,并成为最快的二次规 ...

  5. 十二、支持向量机(Support Vector Machines)

    12.1 优化目标 参考视频: 12 - 1 - Optimization Objective (15 min).mkv 到目前为止,你已经见过一系列不同的学习算法.在监督学习中,许多学习算法的性能都 ...

  6. stanford coursera 机器学习编程作业 exercise 6(支持向量机-support vector machines)

    在本练习中,先介绍了SVM的一些基本知识,再使用SVM(支持向量机 )实现一个垃圾邮件分类器. 在开始之前,先简单介绍一下SVM ①从逻辑回归的 cost function 到SVM 的 cost f ...

  7. Ng第十二课:支持向量机(Support Vector Machines)(二)

    7 核函数(Kernels) 最初在“线性回归”中提出的问题,特征是房子的面积x,结果y是房子的价格.假设从样本点的分布中看到x和y符合3次曲线,那么我们希望使用x的三次多项式来逼近这些样本点.那么首 ...

  8. Ng第十二课:支持向量机(Support Vector Machines)(一)

    1 目录 支持向量机基本上是最好的有监督学习算法了,从logistic回归出发,引出了SVM,揭示模型间的联系,过渡自然. 2 重新审视logistic回归 Logistic回归目的是从特征学习出一个 ...

  9. 机器学习(八)--------支持向量机 (Support Vector Machines)

    与逻辑回归和神经网络相比,支持向量机或者简称 SVM,更为强大. 人们有时将支持向量机看作是大间距分类器. 这是我的支持向量机模型代价函数 这样将得到一个更好的决策边界 理解支持向量机模型的做法,即努 ...

  10. 斯坦福机器学习视频笔记 Week7 支持向量机 Support Vector Machines

    SVM被许多人认为是最强大的“黑箱”学习算法,并通过提出一个巧妙选择的优化目标,今天最广泛使用的学习算法之一. Optimization Objective 根据Logistic Regression ...

随机推荐

  1. 求剁手的分享,如何简单开发js图表

    前段时间做的一个项目里需要用到js图表,在网上找了下,大概找到了highcharts.fusioncharts这些国外产品. 因为都收费,虽然有盗版,我也不敢用,万一被找上们来就砸锅卖铁了要.自己写j ...

  2. 为多态基类声明virtual析构函数

    一个函数的返回值为基类指针,而当指针指向一个派生类对象,接下来派生类对象被这个基类指针删除的时候,就出现了局部销毁的问题.因为C++指出,当派生类经由一个基类指针被删除,而该基类指针带着一个non-v ...

  3. 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 ...

  4. ubuntu下如何安装codeblocks集成开发环境

    codeblocks是一个十分优秀的C/C++开发IDE,虽然后起之秀codelite目前来看大有超越之势哦. 不过在ubuntu下安装codeblocks却比较麻烦,不像其他linux发行版,比如s ...

  5. 和菜鸟一起学linux之linux性能分析工具oprofile移植

    一.内核编译选项 make menuconfig General setup---> [*] Profiling support <*> OProfile system profil ...

  6. Java IO学习--(三)通道

    Java IO中的管道为运行在同一个JVM中的两个线程提供了通信的能力.所以管道也可以作为数据源以及目标媒介. 你不能利用管道与不同的JVM中的线程通信(不同的进程).在概念上,Java的管道不同于U ...

  7. 解决:MySQL 报错:1045 - Access denied for user 'root'@'localhost'(using password YES)

    一.前言 今年疯狂迷上了开源,只要看到好的开源项目,就会不顾一切一股脑扎进去研究,五一期间发现一个很好的关于众筹的开源项目,但不巧,这个项目竟然是 PHP 写的,没学过 PHP,自然对这个开源项目毫无 ...

  8. 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 ...

  9. Spring Aop中,获取被代理类的工具

    在实际应用中,顺着过去就是一个类被代理.反过来,可能需要逆向进行,拿到被代理的类,实际工作中碰到了,就拿出来分享下. /** * 获取被代理类的Object * @author Monkey */ p ...

  10. DDGScreenShot—图片擦除功能

    写在前面 图片擦除功能,也是运用图片的绘制功能, 将图片绘制后,拿到相应的图片.当然,有一涨底图更明显 实现代码如下 /** ** 用手势擦除图片 - imageView --传图片 - bgView ...