使用SVM包来求θ,选择C与核函数

我们使用已经编写好的软件包(这些软件包效率高,用得多,是经无数人证明已经很好的可以使用的软件包)来求θ,而不是自己去编写软件来求它们(就像我们现在很少编写软件来求x½).经常使用的是liblinear和libsvm

虽然不用我们自己来写optimize函数,但是需要我们确定的是要选择C(cost function里面bias与variance权衡的参数=1/λ),以及选择什么样的kernel函数。

一种选择是不使用kernel(也称为linear kernel),直接使用x: 这种情况是当我们的n很大(即维度很高,features很多)但是训练样本却很少的情况下,我们一般不希望画出很复杂的边界线(因为样本很少,画出很复杂的边界线就会过拟合),而是用线性的边界线。

一种选择是使用Gaussian kernel: 这种情况需要确定σ2(平衡bias还是variance)。这种情况是当x的维度不高,但是样本集很多的情况下。如上图中,n=2,但是m却很多,需要一个类似于圆的边界线。(即需要一个复杂的边界)

如果features的范围差别很大,在执行kernel之前要使用feature scaling

我们需要自己编写kernel函数,当然许多SVM都包含了高斯kernel和linear kernel(因为这两个是最常见的);自己编写kernel函数时,将x1,x2(landmarks)做为输入,输出features f(f1,f2.........fm)

在使用高斯kernel时,如果features之间的范围相差太大,要先做feature scaling。因为如果不做feature scaling 的话,在求范数时,则范数主要取决于大的数值的features,而不会去关注小数值的features,这样导致不均衡。如房子价格的预测,有面积与房间个数的话,则范数主要与房子的面积相关,因为房间个数对于范数的贡献太小。

成为有效的kernels需要满足的条件以及其它的一些kernel函数

我们最常用的是高斯kernel和linear kernel(即不使用kernel),但是需要注意的是不是任何相似度函数都是有效的核函数,它们(包括我们常使用的高斯kernel)需要满足一个定理(默塞尔定理),这是因为SVM有很多数值优化技巧,为了有效地求解参数Θ,需要相似度函数满足默塞尔定理,这样才能确保SVM包能够使用优化的方法来求解参数Θ。

一些其它可能会被用到的kernels(很少使用): 多项式核函数,将x与l(landmark)的内积做为一种相似度的度量,如上图所示,它的一般形式为(xTl+constant)degree,有两个参数,一个是constant,一个是degree。多项式核函数一般会要求x与l都是非负的,这样它们的内积才是正的

一些更少用到的核函数:字符串核函数-如果你输入的数据为字符串的话,有时会用到这个核函数,来比较两个对象之间的相似度。卡方核函数,直方图交叉核函数。

我们基本上很少用到这些核函数(用得最多的是高斯kernel与linear kernel),但是碰到它们时,要知道它们为核函数的定义.

SVM中的多分类问题

当我们遇到多分类的问题时,如何有效地画出多分类的边界呢?

大多数的SVM都已经内置了多分类问题的软件包,我们可以直接使用。

另一种方法时使用one-vs.-all方法(参考之前的),训练K个SVM(如果有K个分类的话),这样得出K个参数θ向量(每一个参数θ都是将这一类与其它类分别时所求的θ),然后预测时选择最大时的θTx所表示的那个class

logistic regression/SVM/神经网络比较

我们将logistic regression的cost function进行了修改得出了SVM,那么我们在什么情况下应该使用什么算法呢?

如果我们的features要比样本数要大的话(如n=10000,m=10-1000),我们使用logistic regression或者linear kernel,因为在样本较少的情况下,我们使用线性分类效果已经很好了,我们没有足够多的样本来支持我们进行复杂的分类。

如果n较小,m大小适中的话,使用SVM with Gaussion kernel.如我们之前讲的有一个二维(n=2)的数据集,我们可以使用高斯核函数很好的将正负区分出来.

如果n较小,m非常大的话,会创建一些features,然后再使用logistic regeression 或者linear kernel。因为当m非常大的话,使用高斯核函数会较慢

logistic regeression 与linear kernel是非常相似的算法,如果其中一个适合运行的话,那么另一个也很有可能适合运行。

我们使用高斯kernel的范围很大,当m多达50000,n在1-1000(很常见的范围),都可以使用SVM with 高斯kernel,可以解决很多logistic regression不能解决的问题。

神经网络在任何情况下都适用,但是有一个缺点是它训练起来比较慢,相对于SVM来说

SVM求的不是局部最优解,而是全局最优解

相对于使用哪种算法来说,我们更重要的是掌握更多的数据,如何调试算法(bias/variance),如何设计新的特征变量,这些都比是使用SVM还是logistic regression重要。

但是SVM是一种被广泛使用的算法,并且在某个范围内,它的效率非常高,是一种有效地学习复杂的非线性问题的学习算法。

logistic regression,神经网络,SVM这三个学习算法使得我们可以解决很多前沿的机器学习问题。

转载于:https://www.cnblogs.com/yan2015/p/5184027.html

SVM: 实际中使用SVM的一些问题相关推荐

  1. 支持向量机SVM模型中C和gamma参数分别是什么?对模型有什么影响?

    支持向量机SVM模型中C和gamma参数分别是什么?对模型有什么影响? SVM模型有两个非常重要的参数C与gamma. C的本质是正则化系数. C值是惩罚系数或者叫惩罚因子,表征的是模型对于误差的容忍 ...

  2. python向量机使用方法_Python中支持向量机SVM的使用方法详解

    除了在Matlab中使用PRTools工具箱中的svm算法,Python中一样可以使用支持向量机做分类.因为Python中的sklearn库也集成了SVM算法,本文的运行环境是Pycharm. 一.导 ...

  3. 6.支持向量机(SVM)、什么是SVM、支持向量机基本原理与思想、基本原理、课程中关于SVM介绍

    6.支持向量机(SVM) 6.1.什么是SVM 6.2.支持向量机基本原理与思想 6.2.1.支持向量机 6.2.2.基本原理 6.3.课程中关于SVM介绍 6.支持向量机(SVM) 6.1.什么是S ...

  4. python支持向量机回归_Python中支持向量机SVM的使用方法详解

    除了在Matlab中使用PRTools工具箱中的svm算法,Python中一样可以使用支持向量机做分类.因为Python中的sklearn库也集成了SVM算法,本文的运行环境是Pycharm. 一.导 ...

  5. svm分类器训练详细步骤_「五分钟机器学习」向量支持机SVM——学霸中的战斗机...

    大家好,我是爱讲故事的某某某. 欢迎来到今天的[五分钟机器学习]专栏内容 --<向量支持机SVM> 今天的内容将详细介绍SVM这个算法的训练过程以及他的主要优缺点,还没有看过的小伙伴欢迎去 ...

  6. Python机器学习:SVM004Scikit-learn中的SVM

    纵向值很大 数据尺度归一化 #SCikit-learn中的SVN import numpy as np import matplotlib.pyplot as plt from sklearn imp ...

  7. 1071svm函数 r语言,科学网—R中的svm - 吴锐的博文

    svm理解: LSSVM: 最小二乘支持向量机(Least squares support vector Maehine,LSSVM)是SVM的一种变体,把问题转化成对一个 线性方程求解,所需计算资源 ...

  8. python笔迹识别_python_基于Scikit learn库中KNN,SVM算法的笔迹识别

    之前我们用自己写KNN算法[网址]识别了MNIST手写识别数据 [数据下载地址] 这里介绍,如何运用Scikit learn库中的KNN,SVM算法进行笔迹识别. 数据说明: 数据共有785列,第一列 ...

  9. matlab qp函数,SVM工具箱中qp函数的问题

    哪位高手能帮我解决一下我的SVM工具箱中qp函数的问题. 我电脑新装了WIN7系统,64位,但工具箱用不了了,出现了以下情况:??? Undefined function or method 'qp' ...

最新文章

  1. Raspberry Pi 2 Model B Pi4J 示例
  2. android accessibility 模拟返回_Android无障碍宝典
  3. 约瑟夫(环)问题(Josephu)(单向环形链表)
  4. [html] 使用div+css进行布局有什么好处?
  5. runtime的意义
  6. 操作系统知识点大总结【管程与死锁】
  7. [USACO4.1]麦香牛块Beef McNuggets By cellur925
  8. mysql 修改字段注释_MySQL数据库+命令大全,人手一份的实操攻略来啦
  9. CAN与CAN FD通信之间存在的问题
  10. 试议软件开发与硬件开发的异同。
  11. 我是如何拿到蚂蚁金服实习 offer 的
  12. 电商产品知识思维导图
  13. jhu研究生录取 计算机,背景一般获约翰霍普金斯大学JHU信息安全硕士录取
  14. 电子元器件手册中assert和deassert的含义
  15. 《卓有成效的管理者》笔记,第一章 卓有成效是可以学会的
  16. xx-job任务管理平台
  17. openstack queens版本修改admin密码
  18. python常用小脚本总结
  19. 作为SAP顾问都应该知道的ABAP程序调试方法
  20. SpringBoot单元测试如何回滚测试数据

热门文章

  1. MYSQL专题-使用Binlog日志恢复MySQL数据
  2. python 登陆网站图片验证_登陆需要密码以及图片验证的网站 如知乎
  3. 进击的云原生,为开发者提供更多可能性
  4. Dubbo 3.0 前瞻之对接 Kubernetes 原生服务
  5. java sqlldr导入_使用SQL*LOADER将TXT或CSV数据导入ORACLE(转)
  6. 为什么python这么火_Python为什么这么火?你了解多少呢?
  7. html 5 gif手机版,动画GIF在HTML5画布
  8. 云起作者认证大神_最喜欢的言情小说大神,有你喜欢的吗
  9. batchparser 无法加载_batchparser.dll
  10. android 通知显示时间,android:在特定时间显示通知?