SVM 调参策略

转自:SVM 调参策略:https://blog.csdn.net/u014484783/article/details/78220646

SVM 怎样能得到好的结果 
1. 对数据做归一化(simple scaling) 
2. 应用 RBF kernel 
3. 用cross-validation和grid-search 得到最优的c和g 
4. 用得到的最优c和g训练训练数据 
5. 测试

1 关于svm的C以及核函数参数设置

1.1 C的选择

C一般可以选择为:10^t , t=[- 4,4]就是0.0001 到10000。选择的越大,表示对错误例惩罚程度越大,可能会导致模型过拟合

1.2 常见核函数及其选择

0)线性核函数 
(无其他参数) 
1)多项式核函数 
(重点是阶数的选择,即d,一般选择1-11:1 3 5 7 9 11,也可以选择2,4,6…) 
2)RBF核函数 
径向基RBF内核,exp{-|xi-xj|^2/均方差},其中均方差反映了数据波动的大小。

gamma参数通常可选择下面几个数的倒数:0.1 0.2 0.4 0.6 0.8 1.6 3.2 6.4 12.8,默认的是类别数的倒数,即1/k,2分类的话就是0.5) 
3)sigmoid核函数 又叫做S形内核 
两个参数g以及r:g一般可选1 2 3 4,r选0.2 0.4 0.6 0.8 1 
4)自定义核函数

核函数的参数:

1)对于线性核函数,没有专门需要设置的参数 
2)对于多项式核函数,有三个参数。-d用来设置多项式核函数的最高此项次数,也就是公式中的d,默认值是3。-g用来设置核函数中的gamma参数设置,也就是公式中的第一个r(gamma),默认值是1/k(k是类别数)。-r用来设置核函数中的coef0,也就是公式中的第二个r,默认值是0。 
3)对于RBF核函数,有一个参数。-g用来设置核函数中的gamma参数设置,也就是公式中的第一个r(gamma),默认值是1/k(k是类别数)。 
4)对于sigmoid核函数,有两个参数。-g用来设置核函数中的gamma参数设置,也就是公式中的第一个r(gamma),默认值是1/k(k是类别数)。-r用来设置核函数中的coef0,也就是公式中的第二个r,默认值是0。

2 关于cost和gamma

SVM模型有两个非常重要的参数C与gamma。

  1. 其中 C是惩罚系数,即对误差的宽容度。c越高,说明越不能容忍出现误差,容易过拟合。C越小,容易欠拟合。C过大或过小,泛化能力变差

  2. gamma是选择RBF函数作为kernel后,该函数自带的一个参数。隐含地决定了数据映射到新的特征空间后的分布,gamma越大,支持向量越少,gamma值越小,支持向量越多。支持向量的个数影响训练与预测的速度

  3. Grid Search 
    使用grid Search虽然比较简单,而且看起来很naïve。但是他确实有两个优点: 
    可以得到全局最优 
    (C,gamma)相互独立,便于并行化进行
  4. # SVM Classifier using cross validation

  5. def svm_cross_validation(train_x, train_y):

  6. from sklearn.grid_search import GridSearchCV

  7. from sklearn.svm import SVC

  8. model = SVC(kernel='rbf', probability=True)

  9. param_grid = {'C': [1e-3, 1e-2, 1e-1, 1, 10, 100, 1000], 'gamma': [0.001, 0.0001]}

  10. grid_search = GridSearchCV(model, param_grid, n_jobs = 8, verbose=1)

  11. grid_search.fit(train_x, train_y)

  12. best_parameters = grid_search.best_estimator_.get_params()

  13. for para, val in list(best_parameters.items()):

  14. print(para, val)

  15. model = SVC(kernel='rbf', C=best_parameters['C'], gamma=best_parameters['gamma'], probability=True)

  16. model.fit(train_x, train_y)

  17. return model

SVM有如下主要几个特点:

(1)非线性映射是SVM方法的理论基础,SVM利用内积核函数代替向高维空间的非线性映射;

(2)对特征空间划分的最优超平面是SVM的目标,最大化分类边际的思想是SVM方法的核心;

(3)支持向量是SVM的训练结果,在SVM分类决策中起决定作用的是支持向量;

(4)SVM 是一种有坚实理论基础的新颖的小样本学习方法。 
它基本上不涉及概率测度及大数定律等,因此不同于现有的统计方法。 
从本质上看,它避开了从归纳到演绎的传统过程,实现了高效的从训练样本到预报样本的“转导推理”,大大简化了通常的分类和回归等问题;

(5)SVM 的最终决策函数只由少数的支持向量所确定,计算的复杂性取决于支持向量的数目,而不是样本空间的维数,这在某种意义上避免了“维数灾难”。

(6)少数支持向量决定了最终结果,这不但可以帮助我们抓住关键样本、“剔除”大量冗余样本,而且注定了该方法不但算法简单,而且具有较好的“鲁棒”性。 
这种“鲁棒”性主要体现在: 
①增、删非支持向量样本对模型没有影响; 
②支持向量样本集具有一定的鲁棒性; 
③有些成功的应用中,SVM 方法对核的选取不敏感

两个不足:

(1) SVM算法对大规模训练样本难以实施 
由于SVM是借助二次规划来求解支持向量,而求解二次规划将涉及m阶矩阵的计算(m为样本的个数),当m数目很大时该矩阵的存储和计算将耗费大量的机器内存和运算时间。针对以上问题的主要改进有 
J.Platt的SMO算法、 
T.Joachims的SVM、 
C.J.C.Burges等的PCGC、 
张学工的CSVM 
以及O.L.Mangasarian等的SOR算法

(2) 用SVM解决多分类问题存在困难 
经典的支持向量机算法只给出了二类分类的算法,而在数据挖掘的实际应用中,一般要解决多类的分类问题。可以通过多个二类支持向量机的组合来解决。主要有一对多组合模式、一对一组合模式和SVM决策树;再就是通过构造多个分类器的组合来解决。主要原理是克服SVM固有的缺点,结合其他算法的优势,解决多类问题的分类精度。如:与粗集理论结合,形成一种优势互补的多类问题的组合分类器.

-----------------------------------------------------------------------------------------------------------------------------------------------------

https://blog.csdn.net/yzf0011/article/details/71521001

http://discussions.youdaxue.com/t/svm-rbf-kernel/6088

在我们机器学习的过程中,很多同学包括我自己也疑惑过rbf kernel函数的实际作用是什么?不同的参数又有什么作用。

上周我参加了上海的夏令营,这里就是我们讨论的结果。

首先我们要知道Support Vector Machine到底是什么东西。看过课程视频的同学都是到,SVM旨在将一组不可线性分割的数据线性分割。怎么做到的呢?通过将低维度的数据投影到高维度来实现。

这里又涉及到两个关键词“线性分割”、“投影”。

线性可分割

线性分割就是一组数据可以被一条直线(高维度空间中是超平面)分为两半。

如上图所示,A是线性可分的,B不是。

那么在更高维度中,线性就是指的一个平面。在三维空间中是平面,在更高维度中就是超平面。

投影

投影(映射)就是一个函数。z = f(x, y) 就是把x,y投影到z。“投影”这个用词其实是一个几何空间的借喻。意思就是说,将(x,y)这个本来属于二维空间的点‘’投影‘’到第三维。如下:

(x1, y1) => (x1, y1, z1)
(x2, y2) => (x2, y2, z2)
(x3, y3) => (x3, y3, z3)
....
依次类推

内核函数 Kernel Function

内核函数就是投影所具体使用的函数。这里就用rbf来举例。rbf全称是Radial Based Function,基于半径的函数。

在解释 rbf 之前,先来看一个更简单地例子。

如上图所示,左边的圈圈和叉叉是不可线性分割的。但是我们可以看出,一个圆圈可以将它们分开。这个圆其实就代表不同的点到原点(0,0)的距离的分界线。距离更大的叉叉在圆外面,距离小的圈圈在圆里面。

那么什么函数才可以仅仅基于 x1 和 x2 就算出离原点的距离呢?答案是:

define 距离函数 f(x1, x2) 为: sqrt( x1^2 + x2 ^ 2 ) 。然后让 f(x1,x2) 投影到 x3

这里开不开根号其实无所谓,因为我们关心的不是绝对的距离,而是一个可以区分不同距离的尺度。

那么对于SVM来说,我们的 f 就是内核函数。通过这个 f,我们就可以将左边的二维坐标系投影成右边的三维坐标系。然后很明显的,我们的数据变得线性可分割了(通过那个切面)。

Radial Based Function

现在我们再来看 rbf1

这是 rbf 的数学公式。当然,更一般性的写法是

公式的具体含义这里不作很数学的解释(比如说什么是 exponential function)

要注意的有3个方面。

  1. X 和 X’ 不是标量,是向量(别名:矢量)
  2. | X - X' | ^ 2 就是一个距离公式,X’ 是相对于 X 的另外一个点 (一个向量可以被当做一个点)
  3. gamma 是一个常数 (具体含义后面讲)

我们可以观察到,之前算到原点距离的 f 就是 这里的 rbf 的一种特殊情况。X’ 就是 (0,0)。而 rbf 中 X’ 是根据具体情况而定的。

我们可以再看到这个图

对于图 B 来说,用原点作为参考点肯定是不合适的。参考点应该是蓝色数据的中心点。然后 rbf 可以算出每个点到该中心的距离,从而将其投影到一个三维空间,让其变得可以线性分割。

rbf 投影后的结果大概就长这样(图片仅供参考)

gamma 参数什么意思
我们通过公式可知,gamma 是一个常量,而且是一个线性的因数。所以大家可以想象,gamma的作用,其实就是控制数据在向高维度投影后的缩放比例。如果 gamma 很大,那么上图的点就会离切面很远。如果 gamma 很小,上图的点就会离切面很近。

而这个缩放比例就会影响线性分割面的运算结果(不同的loss function对距离的惩罚度不一样)。这也是SVM对数据 Scaling 和 Normalization 是敏感的原因之一。因为最后都是算的一个 Linear Model

这就是为什么,有人说如果原始数据比较分散,gamma可以小一点。反之,如果原始数据很密集,gamma可以大一点。当然,这不是绝对的,所以我们才要做 GridSearch

通常我们会 0.01、0.1、1、10、100 ... 这样指数级地搜索一个比较好的 gamma

sklearn SVM 里的 C 是什么意思?
我都写了这么多,这就留给你当作业吧。多看 sklearn 文档3。记住,gamma 和 C 是好基友

你可以在评论里面写自己对 C 的理解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/458138.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

美好的⼀天 从ActionTab开始 美观、智能、⾼效的新标签⻚ iTab 新标签页iTab新标签页Atop100工具推荐

文章目录 ActionTabiTab 新标签页iTab新标签页,小组件,起始页,标签页,日历,股票,浏览器扩展 https://www.actiontab.cn/ ActionTab 收费???? iTab 新标签页iT…

机器学习中的算法(2)-支持向量机(SVM)基础

from:http://www.cnblogs.com/LeftNotEasy/archive/2011/05/18/2034566.html 版权声明: 本文由LeftNotEasy发布于http://leftnoteasy.cnblogs.com, 本文可以被全部的转载或者部分使用,但请注明出处,如果有问题,请联系wheeleastgm…

Kinect深度图与摄像头RGB的标定与配准(转载文章)

作者原文地址:http://blog.csdn.net/aichipmunk/article/details/9264703 自从有了Kinect,根据深度图提取前景就非常方便了。因此出现了很多虚拟现实、视频融合等应用。但是,Kinect自身的RGB摄像头分辨率有限,清晰度也不及一些专业…

台北到淡水版Firefox无法播放视频

台北到淡水版的Firefox所有的视频都无法播放,禁用了各种插件也还是没法播放,最后才确定是SWF的问题,大家有同样问题的,可以下载我的放到SWF文件夹下,目录结构如下图: ​Firefox的SWF下载地址1 ​Firefox的S…

最详细、最完整的相机标定讲解

相机标定详解 最近做项目要用到标定,因为是小白,很多东西都不懂,于是查了一堆的博客,但没有一个博客能让我完全能看明白整个过程,绝大多数都讲的不全面,因此自己总结了一篇博客,给自己理一下思…

卷积与反卷积动图

各种卷积与反卷积动态图 反卷积: 详细文字链接:https://www.zhihu.com/question/43609045/answer/132235276(该链接中并没有下面的动态图) Deconvolution大致可以分为以下几个方面:(1)unsupervised learning,其实就…

ASP.NET-权限管理五张表

ASP.NET 权限管理五张表权限管理的表(5张表)每个表里面必有的一些信息序号名称 字段 类型 主键默认值是否为空备注1 用户ID ID INT 是 null 否用户ID2用户名称UserNamevarchar(100)否null否用户名称3用户密码UserPasswordvarchar(20)否null否用…

神经网络CNN解释

from:https://blog.csdn.net/ruiyiin/article/details/77113973 这篇文章原地址为An Intuitive Explanation of Convolutional Neural Networks,卷积神经网络的讲解非常通俗易懂。 什么是卷积神经网络?为什么它们很重要? 卷积神经…

pcl里面使用KdTree来搜索

from:https://blog.csdn.net/qq_25491201/article/details/51135054 下面这个教程我们将学会怎么用KdTree找一个特殊点附近的K个最近邻,然后我们也将复习怎么通过一个特殊的半径来找里面所有的近邻。 一个k-d树,或者k维的树是一个计算机科学里面的数据…

HI3559A和AI深度学习框架caffe

from:http://blog.sina.com.cn/s/blog_156e567660102ygdf.html 1、HI3559A支持深度学习框架caffe。其中的NNIE神经网络加速单元是主要的属性。 2、caffe是一种快速深度学习框架和TensorFlow一样是一组标准深度学习开源框架。 3、对应想尝试AI深度学习的朋友可以按照网上的流…

Google Protocol Buffer 的使用和原理

from: https://www.ibm.com/developerworks/cn/linux/l-cn-gpb/index.html 简介 什么是 Google Protocol Buffer? 假如您在网上搜索,应该会得到类似这样的文字介绍: Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言…

常用的几种卷积神经网络介绍

常用的几种卷积神经网络介绍 标签(空格分隔): 深度学习 这是一篇基础理论的博客,基本手法是抄、删、改、查,毕竟介绍这几个基础网络的博文也挺多的,就算是自己的一个笔记吧,以后忘了多看看。主…

深度学习案例

1. neural-style:利用卷积神经网络将一幅图像的内容与另一幅图像的风格相结合 https://github.com/jcjohnson/neural-style 2.Nerual Doodles:把 2 位的 Doodle 转成精良的艺术品 https://github.com/alexjc/neural-doodle 3. srez:通过深度…

深度学习图像标注工具汇总

对于监督学习算法而言,数据决定了任务的上限,而算法只是在不断逼近这个上限。世界上最遥远的距离就是我们用同一个模型,但是却有不同的任务。但是数据标注是个耗时耗力的工作,下面介绍几个图像标注工具: Labelme Labe…

UIBarbuttonItem

APPDelegate: - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds]; //创建主界面,导航栏的第一个页面 FirstViewContr…

深度残差网络ResNet解析

ResNet在2015年被提出,在ImageNet比赛classification任务上获得第一名,因为它“简单与实用”并存,之后很多方法都建立在ResNet50或者ResNet101的基础上完成的,检测,分割,识别等领域都纷纷使用ResNet&#x…

基于深度学习的目标检测技术演进:R-CNN、Fast R-CNN、Faster R-CNN

object detection我的理解,就是在给定的图片中精确找到物体所在位置,并标注出物体的类别。object detection要解决的问题就是物体在哪里,是什么这整个流程的问题。然而,这个问题可不是那么容易解决的,物体的尺寸变化范…

CNN的发展历史(LeNet,Alexnet,VGGNet,GoogleNet,ReSNet)

欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld。 关于卷积神经网络CNN,网络和文献中有非常多的资料,我在工作/研究中也用了好一段时间各种常见的model了,就想着简单整理一下,以备查阅之需…

如何在VMWare的Ubuntu虚拟机中设置共享文件夹

亲测有效:Ubuntu18.04 LTS、虚拟机VMware Workstation 14 Pro 14.1.3 build-9474260、Window7 自己的第一篇博文,由于时(shuǐ)间(png)原(yǒu)因(xin)&…

容器+AOP实现动态部署(四)

上篇咱们介绍了容器和AOP的结合,结合后怎样将对象增强服务并没有过多的说明,这里将详细说明怎样将对象 进行增强 ,达到一个一对多和多对多的增强方式 先从简单的方式说起 /** *JDK代理类,实现动态调用对象方法 */ public class JD…