㈠ SVM几种核函数的对比分析以及SVM算法的优缺点
SVM核函数的作用
SVM核函数是用来解决数据线性不可分而提出的,把数据从源空间映射到目标空间(线性可分空间)。
SVM中核函数的种类
1、线性核
优点:
方案首选,奥卡姆剃刀定律
简单,可以求解较快一个QP问题
可解释性强:可以轻易知道哪些feature是重要的
可解决非线性问题
可通过主观设置幂数来实现总结的预判
对于大数量级的幂数,不太适用
比较多的参数要选择
可以映射到无限维
决策边界更为多样
只有一个参数,相比多项式核容易选择
可解释性差(无限多维的转换,无法算w)
计算速度比较慢(解一个对偶问题)
容易过拟合(参数选不好时容易overfitting)
特征维数高选择线性核
样本数量可观、特征少选择高斯核(非线性核)
样本数量非常多选择线性核(避免造成庞大的计算量)
限制:只能解决线性可分问题
2、多项式核
基本原理:依靠升维使得原本线性不可分的数据线性可分;
升维的意义:使得原本线性不可分的数据线性可分;
优点:
缺点:
通常只用在已经大概知道一个比较小的幂数的情况
3、高斯核
优点:
缺点:
4、Sigmoid核
采用Sigmoid函数作为核函数时,支持向量机实现的就是一种多层感知器神经网络,应用SVM方法,隐含层节点数目(它确定神经网络的结构)、隐含层节点对输入节点的权值都是在设计(训练)的过程中自动确定的。而且支持向量机的理论基础决定了它最终求得的是全局最优值而不是局部最小值,也保证了它对于未知样本的良好泛化能力而不会出现过学习现象。
在实战中更多的是:
SVM的优缺点
1、SVM算法对大规模训练样本难以实施
SVM的空间消耗主要是存储训练样本和核矩阵,由于SVM是借助二次规划来求解支持向量,而求解二次规划将涉及m阶矩阵的计算(m为样本的个数),当m数目很大时该矩阵的存储和计算将耗费大量的机器内存和运算时间。针对以上问题的主要改进有有J.Platt的SMO算法、T.Joachims的SVM、C.J.C.Burges等的PCGC、张学工的CSVM以及O.L.Mangasarian等的SOR算法。如果数据量很大,SVM的训练时间就会比较长,如垃圾邮件的分类检测,没有使用SVM分类器,而是使用了简单的naive bayes分类器,或者是使用逻辑回归模型分类。
2、用SVM解决多分类问题存在困难
经典的支持向量机算法只给出了二类分类的算法,而在数据挖掘的实际应用中,一般要解决多类的分类问题。可以通过多个二类支持向量机的组合来解决。主要有一对多组合模式、一对一组合模式和SVM决策树;再就是通过构造多个分类器的组合来解决。主要原理是克服SVM固有的缺点,结合其他算法的优势,解决多类问题的分类精度。如:与粗集理论结合,形成一种优势互补的多类问题的组合分类器。
3、对缺失数据敏感,对参数和核函数的选择敏感
支持向量机性能的优劣主要取决于核函数的选取,所以对于一个实际问题而言,如何根据实际的数据模型选择合适的核函数从而构造SVM算法。目前比较成熟的核函数及其参数的选择都是人为的,根据经验来选取的,带有一定的随意性.在不同的问题领域,核函数应当具有不同的形式和参数,所以在选取时候应该将领域知识引入进来,但是目前还没有好的方法来解决核函数的选取问题。
㈡ svm 线性可分为什么还要核函数
只了解一些SVM中的核函数,欢迎交流SVM本身是线性分类器,使用了核函数后,相当于把原来的数据,映射到一个高维空间(在相对低维度的空间中难分类的样本,很可能在映射到高维空间后用线性分类器就可以分开)。而在SVM中使用核函数,我理解是替换了SVM中衡量内积的方式(x*z)为K(x,z),以此来达到映射的目的的。
㈢ SVM的类型和核函数选择
线性分类:线性可分性、损失函数(loss function)、经验风险(empirical risk)与结构风险(structural risk)。
核函数的选择要求满足Mercer定理(Mercer's theorem),即核函数在样本空间内的任意格拉姆矩阵(Gram matrix)为半正定矩阵(semi-positive definite)。
常用的核函数有:线性核函数,多项式核函数,径向基核函数,Sigmoid核函数和复合核函数,傅立叶级数核,B样条核函数和张量积核函数等。
(3)基于SVM的股票价格预测核函数扩展阅读
SVM被提出于1964年,在二十世纪90年代后得到快速发展并衍生出一系列改进和扩展算法,在人像识别、文本分类等模式识别(pattern recognition)问题中有得到应用。
核函数具有以下性质:
1、核函数的引入避免了“维数灾难”,大大减小了计算量。而输入空间的维数n对核函数矩阵无影响,因此,核函数方法可以有效处理高维输入。
2、无需知道非线性变换函数Φ的形式和参数。
3、核函数的形式和参数的变化会隐式地改变从输入空间到特征空间的映射,进而对特征空间的性质产生影响,最终改变各种核函数方法的性能。
4、核函数方法可以和不同的算法相结合,形成多种不同的基于核函数技术的方法,且这两部分的设计可以单独进行,并可以为不同的应用选择不同的核函数和算法。
㈣ SVM算法采用高斯核函数,核函数的参数对结果影响大吗
核函数一般是为了解决维度过高导致的计算能力不足的缺陷,实质就是特征向量内积的平方。
为什么会提出核函数:
一般我们在解决一般的分类或者回归问题的时候,给出的那个数据可能在低维空间并不线性可分,但是我们选用的模型却是在特征空间中构造超平面,从而进行分类,如果在低维空间中直接使用模型,很明显,效果必然会大打折扣。
但是!如果我们能够将低纬空间的特征向量映射到高维空间,那么这些映射后的特征线性可分的可能性更大【记住这里只能说是可能性更大,并不能保证映射过去一定线性可分】,由此我们可以构造映射函数,但问题随之而来了,维度扩大,那么随之而言的计算成本就增加了,模型效果好了,但是可用性降低,那也是不行的。
于是有人提出了核函数的概念,可以在低维空间进行高维度映射过后的计算,使得计算花销大为降低,由此,使得映射函数成为了可能。举个简单的例子吧,假设我们的原始样本特征维度为2,将其映射到三维空间,随便假设我们的映射函数为f(x1,x2)
=
(x1^2,
x2^2,
2*x1*x2),那么在三维空间中,样本线性可分更大,但是向量内积的计算开销从4提高到9【如果从10维映射到1000维,那么计算花销就提高了10000倍,而实际情况下,特征维度几万上百万十分常见】,再看对于样本n1=(a1,a2),n2=(b1,b2),映射到三维空间之后,两者的内积I1为:a1^2
*
b1^2
+
a2^2
*
b2^2
+
4
*
a1
*
a2
*
b1
*
b2,此时,又有,n1,n2在二维空间中的内积为:a1b1
+
a2b2,平方之后为I2:a1^2
*
b1^2
+
a2^2
*
b2^2
+
4
*
a1
*
a2
*
b1
*
b2,此时
I1
和
I2
是不是很相似,只要我们将f(x1,x2)调整为:
(x1^2,
x2^2,
根号(2*x1*x2)
)
,那么此时就有I1
=
I2,也就是说,映射到三维空间里的内积,可以通过二维空间的内积的平方进行计算!
个人博客:www.idiotaron.org
里有关于svm核函数的描述~
实际上核函数还是挺难找的,目前常用的有多项式核,高斯核,还有线性核。
希望能帮到你,也希望有更好的想法,在下面分享下哈。
㈤ 怎么利用svm对时间序列进行建模
SVM理论是在统计学习理论的基础上发展起来的,由于统计学习理论和SVM方法对有限样本情况下模式识别中的一些根本性的问题进行了系统的理论研究,很大程度上解决了以往的机器学习中模型的选择与过学习问题、非线性和维数灾难、局部极小点问题等。应用SVM进行回归预测的步骤具体如下:
1)实验规模的选取,决定训练集的数量、测试集的数量,以及两者的比例;2)预测参数的选取;3)对实验数据进行规范化处理;4)核函数的确定;5)核函数参数的确定。其中参数的选择对SVM的性能来说是十分重要的,对于本文的核函数使用RBF核函数,对于RBF核函数,SVM参数包括折衷参数C、核宽度C和不敏感参数E。目前SVM方法的参数、核函数的参数选择,在国际上都还没有形成统一的模式,也就是说最优SVM算法参数选择还只能是凭借经验、实验对比、大范围的搜寻和交叉检验等进行寻优。实际应用中经常为了方便,主观设定一个较小的正数作为E的取值,本文首先在C和C的一定范围内取多个值来训练,定下各个参数取值的大概范围,然后利用留一法来具体选定参数值
股价时间序列的SVM模型最高阶确定
股价数据是一个时间序列,从时间序列的特征分析得知,股价具有时滞、后效性,当天的股价不仅还与当天各种特征有关,还与前几天的股价及特征相关,所以有必要把前几天的股价和特征作为自变量来考虑。最高阶确定基本原理是从低阶开始对系统建模,然后逐步增加模型的阶数,并用F检验对这些模型进行判别来确定最高阶n,这样才能更客观反映股票价格的时滞特性。具体操作步骤如下:假定一多输入单输出回归模型有N个样本、一个因变量(股价)、m- 1个自变量(特征),由低阶到高阶递推地采用SVM模型去拟合系统(这儿的拓阶就是把昨天股价当做自变量,对特征同时拓阶),并依次对相邻两个SVM模型采用F检验的方法判断模型阶次增加是否合适[ 7]。对相邻两模型SVM ( n)和SVM ( n+ 1)而言,有统计量Fi为:Fi=QSVR (n)- QSVR( n+1)QSVR (n)1N - m n - (m -1)mi =1,2,,, n(1)它服从自由度分别为m和(N - m n - (m -1) )的F分布,其中QSVR (n)和QSVR( n+1)分别为SVR ( n)和QSVR( n+1)的剩余离差平方和,若Fi< F(?,m, N-m n- (m-1) ),则SVM (n )模型是合适的;反之,继续拓展阶数。
前向浮动特征筛选
经过上述模型最高阶数的确定后,虽然确定了阶数为n的SVM模型,即n个特征,但其中某些特征对模型的预测精度有不利影响,本文采用基于SVM和留一法的前向浮动特征特征筛选算法选择对提高预测精度有利影响的特征。令B= {xj: j=1,2,,, k}表示特征全集, Am表示由B中的m个特征组成的特征子集,评价函数MSE (Am)和MSE (Ai) i =1,2,,, m -1的值都已知。本文采用的前向浮动特征筛选算法如下[9]:1)设置m =0, A0为空集,利用前向特征筛选方法寻找两个特征组成特征子集Am(m =2);2)使用前向特征筛选方法从未选择的特征子集(B -Am)中选择特征xm +1,得到子集Am+1;3)如果迭代次数达到预设值则退出,否则执行4);4)选择特征子集Am+1中最不重要的特征。如果xm+1是最不重要的特征即对任意jXm +1, J (Am +1- xm+1)FJ(Am +1- xj)成立,那么令m = m +1,返回2) (由于xm+1是最不重要的特征,所以无需从Am中排除原有的特征);如果最不重要的特征是xr( r =1,2,,, m )且MSE (Am+1- xr) < MSE (Am)成立,排除xr,令A'm= Am+1- xr;如果m =2,设置Am= A'm,J (Am) = J (A'm), ,返回2),否则转向步骤5);5)在特征子集A'm中寻找最不重要的特征xs,如果MSE (A'm- xs)EM SE (Am-1),那么设置Am= A'm, MSE (Am)= MSE (A'm),返回2);如果M SE (A'm- xs) < M SE (Am -1),那么A'm从中排除xs,得到A'm-1= Am- xs,令m = m -1;如果m =2,设置Am= A'm, MSE (Am) = MSE (A'm)返回2),否则转向5)。最后选择的特征用于后续建模预测。
预测评价指标及参比模型
训练结果评估阶段是对训练得出的模型推广能力进行验证,所谓推广能力是指经训练后的模型对未在训练集中出现的样本做出正确反应的能力。为了评价本文模型的优劣,选择BPANN、多变量自回归时间序列模型( CAR)和没有进行拓阶和特征筛选的SVM作为参比模型。采用均方误差(mean squared error, MSE)和平均绝对误差百分率(mean ab-solute percentage error, MAPE)作为评价指标。MSE和MAP定义如下:M SE=E(yi- y^i)2n( 2)MAPE=E| yi- y^i| /yin( 3)其中yi为真值, y^i为预测值, n为预测样本数。如果得出M SE, MAPE结果较小,则说明该评估模型的推广能力强,或泛化能力强,否则就说明其推广能力较差
㈥ 如何使用libsvm进行回归预测
<1> 下载Libsvm、Python和Gnuplot。我用的版本分别是:Libsvm(2.8.1),Python(2.4),Gnuplot(3.7.3)。注意:Gnuplot一定要用3.7.3版,3.7.1版的有bug.
<2> 修改训练和测试数据的格式(可以自己用perl编个小程序):
目标值 第一维特征编号:第一维特征值 第二维特征编号:第二维特征值 ...
...
例如:
2.3 1:5.6 2:3.2
表示训练用的特征有两维,第一维是5.6,第二维是3.2,目标值是2.3
注意:训练和测试数据的格式必须相同,都如上所示。测试数据中的目标值是为了计算误差用
<3> 分别使用Libsvm中的Windows版本的工具svmscale.exe进行训练和测试数据的归一化,svmtrain.exe进行模型训练,svmpredict.exe进行预测
(1)svmscale.exe的用法:svmscale.exe feature.txt feature.scaled
默认的归一化范围是[-1,1],可以用参数-l和-u分别调整上界和下届,feature.txt是输入特征文件名
输出的归一化特征名为feature.scaled
(2)svmtrtrain.exe训练模型
我习惯写个批处理小程序,处理起来比较方便。例如svm_train.bat中训练语句为:
svmtrain.exe -s 3 -p 0.0001 -t 2 -g 32 -c 0.53125 -n 0.99 feature.scaled
训练得到的模型为feature.scaled.model
具 体的参数含义可以参考帮助文档。这里-s是选择SVM的类型。对于回归来说,只能选3或者4,3表示epsilon-support vector regression, 4表示nu-support vector regression。-t是选择核函数,通常选用RBF核函数,原因在“A Practical Guide support vector classification”中已经简单介绍过了。-p尽量选个比较小的数字。需要仔细调整的重要参数是-c和-g。除非用 gridregression.py来搜索最优参数,否则只能自己慢慢试了。
用gridregression.py搜索最优参数的方法如下:
python.exe gridregression.py -svmtrain H:/SVM/libsvm-2.81/windows/svmtrain.exe -gnuplot C:/gp373w32/pgnuplot.exe -log2c -10,10,1 -log2g -10,10,1 -log2p -10,10,1 -v 10 -s 3 -t 2 H:/SVM/libsvm-2.81/windows/feature.scaled > gridregression_feature.parameter
注意:-svmtrain是给出svmtrain.exe所在路径,一定要是完整的全路径
-gnuplot是给出pgnuplot.exe所在路径。这里要用pgnuplot.exe这种命令行形式的,不要用wgnupl32.exe,这个是图形界面的。
-log2c是给出参数c的范围和步长
-log2g是给出参数g的范围和步长
-log2p是给出参数p的范围和步长
上面三个参数可以用默认范围和步长
-s选择SVM类型,也是只能选3或者4
-t是选择核函数
-v 10 将训练数据分成10份做交叉验证。默认为5
最后给出归一化后训练数据的全路径
搜索最优参数的过程写入文件gridregression_feature.parameter(注意别少了这个>符号啊)
根据搜索到的最优参数修改feature.scaled.model中的参数
(3)用svmpredict.exe进行预测
svmpredict.exe feature_test.scaled feature.scaled.model feature_test.predicted
其中feature_test.scaled是归一化后的测试特征文件名,feature.scaled.model是训练好的模型,SVM预测的值在feature_test.predicted中。
㈦ 用libsvm做时间序列预测,为什么训练数据越少越准确
楼主的说法似乎不太对
首先,训练数据的主要区别是什么是测试数据:
如果我有一堆计时数据,首先随机分为两堆,一堆训练只用于看模型是好的,然后前者称为训练数据。下面是几个训练数据序列。(注意不要把训练数据的结果作为模型质量的度量,这是最基本的)。
最后,如果像预测股票价格一切都那样简单,那么就不需要这么多机器学习和金融专家才能进行高频交易。
㈧ 在svm算法中引入核函数,核函数是什么意思
实质上是一种映射函数,将低维空间非线性问题映射到高维空间编程线性问题进行处理。许多在低维空间难以处理的非线性分类问题,转换到高维空间和容易得到最优分类超平面,这是其最核心的思想。
㈨ 请教faruto老师关于libsvm工具箱预测时核函数的选择问题
cmd = ['-c ',num2str(bestc),' -g ',num2str(bestg),' -s 3 -p 0.02 -t 1 '];里的-t 1就是选择的多项式核函数。
-t 核函数类型:核函数设置类型(默认2)
0 -- 线性核函数: u'*v
1 -- 多项式核函数: (gamma*u'*v + coef0)^degree
2 -- RBF核函数: exp(-gamma*|u-v|^2)
3 -- sigmoid核函数: tanh(gamma*u'*v + coef0)
4 -- 预定义核函数(指定核矩阵)
㈩ SVM中的核函数与概率密度估计中的非参数估计里的核函数有什么内在联系
我觉得一样,都是对距离的度量。