首页 > 技术文章 > libsvm之核函数

cheneyboon 2020-02-04 16:53 原文

核函数参数详解

  https://blog.csdn.net/MrFortitude/article/details/59558037

什么是核函数?

  在用svm处理问题时,如果函数线性不可分,希望通过将输入空间内线性不可分数据映射到一个高维的特征空间内使数据在特征空间内使线性可分的,这个映射记住φ(x)

  之后优化问题中內积φi * φj

  这个內积的计算量和维度是成正相关,难度较大,所以引入了核函数

  核函数就是一个映射,实际工作中我们要找到一个最优的核函数对数据进行准确划分

线性核函数

  线性核函数是我工作中经常使用的一项,我一般使用如下代码进行划分

svm-train.exe -s 0 -t 0 -c 2 svm_scale.txt svm_scale.model

   -s:选择svm的类型,工作只用到了c-SVC,其他以后在研究

  -t:核函数的类型选择

       -c:损失函数的选择,一般默认为1

  一般来讲,损失函数过大会造成过拟合:当你为100时基本不会有错误

   过小会造成欠拟合:当你为2时,会出现很多错误

多项核函数

  因为今后的工作需要用到其他的核函数,所以这里是我通过上网查的资料然后我自认为的核函数的使用方法,这里我列举的都是比较通用的核函数

  网上实在没有对这个参数的实际讲解,全是专有名词,看来只能以后慢慢试验找最优参数了

RBF核函数

  又称高斯核函数,这里高斯核函数只有一个-g的参数,这里-g就代表了模型复杂度,gamma越大,高斯分布越窄。gamma越小,高斯分布越宽,gamma相当于调整模型的复杂度,gamma值越小模型复杂度越低,gamma值越高,模型复杂度越大

  通常而言,RBF核是合理的首选,这个核函数将样本非线性地映射到一个更高维的空间,与线性核不同,它能够处理分类和标注和属行的非线性关系,并且,线性核是RBF的一个特例(Keerthi and Lin 2003)。因此,使用一个惩罚因子C的线性核与某些从参数(C,γ)的RBF核具有相同的性能,同时SIgmoid核的表现很像一定参数的RBF核(Lin and Link 2003)

  第二个原因,超参数(hyperparameter)的数量会影响到模型选择的复杂度(因为参数只能靠试验啊!)。多项式核比RBF核有更多的超参数。

  最后RBF核有更少的数值复杂度(numerica difficulties).一个关键点0<Kij<=1对比多项式核,后者关键值需要infinity(rxiTxj+r>1)或者zero(rxiTxj+r<1),这是高阶运算,此外,我们必须指出sigmoid核在某些参数下不是合法的(例如,两个向量的內积)、(Vapnik 1995)

  当然,也存在一些情形RBF核是不适用的,特别的,很可能适用线性核,因为RBF核可以得到与线性核相近的效果(按照理论,RBF核可以模拟线性核),可能好于线性核,也可能差于,但是不应该相差太多,很多问题比如维度非常大高,或者样本海量的情况下,大家更倾向于线性核,因为效果相当,但是在速度和模型大小方面,线性核有更好的表现

    我选取了网上几张图片供大家参考

  这里是原数据分布

 

   当gamma = 1时

  当gamma = 100时

  当gamma = 10时

借鉴

https://blog.csdn.net/QQ1449301756/article/details/53544348

https://blog.csdn.net/promisejia/article/details/81391019

 

  

推荐阅读