SVM中核函数种类与选择(转)

为何需要核函数:

http://www.blogjava.net/zhenandaci/archive/2009/03/06/258288.html

建议他的文章都仔细看一下

核函数的类型:

常用的四种核函数对应的公式如下:

先粘贴一下,以后有经验了再自己总结。

    • 如果如果特征数远远大于样本数的情况下,使用线性核就可以了.
    • 如果特征数和样本数都很大,例如文档分类,一般使用线性核, LIBLINEAR比LIBSVM速度要快很多.
    • 如果特征数远小于样本数,这种情况一般使用RBF.但是如果一定要用线性核,则选择LIBLINEAR较好,而且使用-s 2选项。

支持向量机是建立在统计学习理论基础之上的新一代机器学习算法,支持向量机的优势主要体现在解决线性不可分问题,它通过引入核函数,巧妙地解决了在高维空间中的内积运算,从而很好地解决了非线性分类问题。

构造出一个具有良好性能的SVM,核函数的选择是关键.核函数的选择包括两部分工作:一是核函数类型的选择,二是确定核函数类型后相关参数的选择.因此如何根据具体的数据选择恰当的核函数是SVM应用领域遇到的一个重大难题,也成为科研工作者所关注的焦点,即便如此,却依然没有得到具体的理论或方法来指导核函数的选取.

1、经常使用的核函数

核函数的定义并不困难,根据泛函的有关理论,只要一种函数K(xi,xj)满足Mercer条件,它就对应某一变换空间的内积.对于判断哪些函数是核函数到目前为止也取得了重要的突破,得到Mercer定理和以下常用的核函数类型:

(1)线性核函数

K(x,xi)=x⋅xi

(2)多项式核

K(x,xi)=((x⋅xi)+1)d

(3)径向基核(RBF)

K(x,xi)=exp(−∥x−xi∥2σ2)

Gauss径向基函数则是局部性强的核函数,其外推能力随着参数σ的增大而减弱。多项式形式的核函数具有良好的全局性质。局部性较差。

(4)傅里叶核

K(x,xi)=1−q22(1−2qcos(x−xi)+q2)

(5)样条核

K(x,xi)=B2n+1(x−xi)

(6)Sigmoid核函数

K(x,xi)=tanh(κ(x,xi)−δ)

采用Sigmoid函数作为核函数时,支持向量机实现的就是一种多层感知器神经网络,应用SVM方法,隐含层节点数目(它确定神经网络的结构)、隐含层节点对输入节点的权值都是在设计(训练)的过程中自动确定的。而且支持向量机的理论基础决定了它最终求得的是全局最优值而不是局部最小值,也保证了它对于未知样本的良好泛化能力而不会出现过学习现象。

2、核函数的选择

在选取核函数解决实际问题时,通常采用的方法有:一是利用专家的先验知识预先选定核函数;二是采用Cross-Validation方法,即在进行核函数选取时,分别试用不同的核函数,归纳误差最小的核函数就是最好的核函数.如针对傅立叶核、RBF核,结合信号处理问题中的函数回归问题,通过仿真实验,对比分析了在相同数据条件下,采用傅立叶核的SVM要比采用RBF核
的SVM误差小很多.三是采用由Smits等人提出的混合核函数方法,该方法较之前两者是目前选取核函数的主流方法,也是关于如何构造核函数的又一开创性的工作.将不同的核函数结合起来后会有更好的特性,这是混合核函数方法的基本思想.

对于核函数的理解,pluskid的博客写的相当不错啊,大家可以看看。

时间: 2024-10-10 22:25:29

SVM中核函数种类与选择(转)的相关文章

JavaScript function函数种类(转)

转自:http://www.cnblogs.com/polk6/p/3284839.html JavaScript function函数种类 本篇主要介绍普通函数.匿名函数.闭包函数 目录 1. 普通函数:介绍普通函数的特性:同名覆盖.arguments对象.默认返回值等. 2. 匿名函数:介绍匿名函数的特性:变量匿名函数.无名称匿名函数. 3. 闭包函数:介绍闭包函数的特性. 1. 普通函数 1.1 示例 1 2 3 function ShowName(name) {     alert(na

JavaScript function函数种类

原文:JavaScript function函数种类 本篇主要介绍普通函数.匿名函数.闭包函数 1.普通函数介绍 1.1 示例 function ShowName(name) { alert(name); } 1.2 Js中同名函数的覆盖 在Js中函数是没有重载,定义相同函数名.不同参数签名的函数,后面的函数会覆盖前面的函数.调用时,只会调用后面的函数. var n1 = 1; function add(value1) { return n1 + 1; } alert(add(n1));//调用

考虑virtual函数以外的选择

在C++中,有四种选择可以替代virtual函数的功能: 1.non-virtual interface(NVI)手法,这是一种template method模式.它以public non-virtual成员函数包含较低访问性的virtual函数.对于子类而言,子类只需重定义私有的virtual函数即可. 2.将virtual函数替换为"函数指针成员变量",这是Strategy模式的一种表现形式.这种方案的优点在于,将类和行为分离(比如相同的类的不同对象可以具有不同的行为):缺点在于,

调用未绑定的父类方法和使用supper 函数 之间的选择.

class New_int(int): # 定义一个新的类 继承 int 类 def __add__(self,other): # 重写 + 运算符 # __add__ 就是 int 中 + 的行为 return int.__sub__(self,other) # 重写的 加法运算符 调用 int类 里面的 减法运算运算符 def __sub__(self,other): return int.__add__(self,other) # 上面的是一个小小的恶作剧 . 把加法和减法的名称进行了互换

SVM 参数选择

-g g :设置核函数中的g ,默认值为1/ k :其中-g选项中的k是指输入数据中的属性数. 惩罚因子 在式子1中 注意其中C的位置,也可以回想一下C所起的作用(表征你有多么重视离群点,C越大越重视,越不想丢掉它们).这个式子是以前做SVM的人写的,大家也就这么用,但没有任何规定说必须对所有的松弛变量都使用同一个惩罚因子,我们完全可以给每一个离群点都使用不同的C,这时就意味着你对每个样本的重视程度都不一样,有些样本丢了也就丢了,错了也就错了,这些就给一个比较小的C:而有些样本很重要,决不能分类

libSVM 参数选择

libSVM 参数选择 [预测标签,准确率,决策值]=svmpredict(测试标签,测试数据,训练的模型); 原文参考:http://blog.csdn.net/carson2005/article/details/6539192 关于SVM参数c&g选取的总结帖[matlab-libsvm]:http://www.ilovematlab.cn/thread-47819-1-1.html  原文见下方 需要提醒的是,libSVM支持多类分类问题,当有k个待分类问题时,libSVM构建k*(k-

第十三篇:成员函数与非成员函数的选择

前言 相信很多使用C++语言的人都有这么一种错误的观点 - 除了主函数,其他函数都应当声明为某个类的成员函数,以实现封装性. 这种观点错在哪里?我们又该如何在成员函数与非成员函数之间进行选择呢? 针对这个问题,本文将给出一种非常科学的解决方案. 问题分析 假定有一个网页浏览器类,其中有用来清除缓存,清除浏览记录,清除cookies的成员函数: 1 class WebBrowser 2 { 3 public: 4 // ...... 5 void clearCache(); // 清除缓存 6 v

成员函数与非成员函数的选择

前言 相信很多使用C++语言的人都有这么一种错误的观点 - 除了主函数,其他函数都应当声明为某个类的成员函数,以实现封装性. 这种观点错在哪里?我们又该如何在成员函数与非成员函数之间进行选择呢? 针对这个问题,本文将给出一种非常科学的解决方案. 问题分析 假定有一个网页浏览器类,其中有用来清除缓存,清除浏览记录,清除cookies的成员函数: 1 class WebBrowser 2 { 3 public: 4 // ...... 5 void clearCache(); // 清除缓存 6 v

Effective C++ 条款35 考虑virtual函数以外的其他选择

1. 在一个继承层次中,不同的类要实现同一接口的不同实现,最先想到的可能是虚函数,假设一个存在一个继承体系,这个集成体系中的每一层都需要一个名为fun函数,那么可能会像这样实现: clase Base{ public: ... virtual fun(int num){...} private: ... } class Derived:public Base{ public: ... virtual fun(int num){} private: ... } 但除了将fun设为虚函数,还有其他选