LSSVM matlab.docx
《LSSVM matlab.docx》由会员分享,可在线阅读,更多相关《LSSVM matlab.docx(31页珍藏版)》请在冰豆网上搜索。
LSSVMmatlab
最小二乘支持向量机
对于以前的版本1.5版的工具箱和更新现有的一些命令我们增加了新功能。
由于许多读者都是熟悉的版本1.5布局,我们试图尽可能少地改变它。
主要的区别加速了一些方法的实现。
Chapter/solver/function
What’snew
What’snew
2.LS-SVMLabtoolboxexamples
LS-SVM的路线图;增添更多的回归和分类的例子;界面更容易,多级分类;改变执行了健全ls-svm。
3.Matlabfunctions
回归或分类的可能性只使用一条命令即可,功能验证已经被删除,更快(强劲)训练和(强大)模型选择标准被提供给用户,以防万一,稳健回归不同的函数必须要和与迭代重加权LS–SVM一起使用。
4.LS-SVMsolver
所有CMEX和/或C文件已被删除。
求解线该性系统通过使用MATLAB命令“反斜杠”(\)
第一章引言
在解决非线性分类,函数估计和密度估计问题中,支持向量机是一个很强大的方法,支持向量机也致使了其核心的新动向,最新发展事基于一般学习方法的。
支持向量机应经被引入统计学习理论和结构风险最小化之中。
这些方法中,凸优化问题,解决了一个典型的二次规划问题。
LS-SVM是标准SVM的改进,这样就可以解决线性kkt系统的问题了。
最小二乘支持向量机与正规化网络和高斯过程密切相关,但更加重视和利用原始对偶的规范条款解释。
经典的模式识别算法的内核版本如判别分析的内核Fisher,以非监督学习、循环式网络扩展和控制之间的链接是可用的。
健全性、稀疏性、权重可以被应用到LS-SVM上,并具有三个层次的推理贝叶斯框架已经制定。
LS–SVM像原始对偶那样配方给予核PCA,核CCA和PLS。
对于非常大的规模问题和在线学习,一个固定大小的LS-SVM方法被提出,它基于Nystrom在原始空间中支持向量的积极选择和估计的近似值。
原始对偶申述的方法被开发为核心谱聚类,数据可视化,降维和生存分析。
目前LS-SVMlab工具箱用户指南包含了大量MATALAB中LS-SVM算法的实现,其中涉及分类,回归,时间序列预测和无监督学习。
所有的功能都已经用Matlab从R2008a,R2008b,R2009a测试,工具箱中参考命令都以打印字体书写。
LS–SVMlab主页:
http:
//www.esat.kuleuven.be/sista/lssvmlab/
第二章LS--SVMlab
该工具箱主要用于商业用Matlab软件包使用。
Matlab的工具箱已经在不同的计算机体系结构编译和测试,包括Linux和Windows。
大部分函数可以处理的数据集可高达20,000或更多点的数据。
LS-SVMlab对Matlab接口包括一个适合初学者的基本版本,以及一个多类编码技术和贝叶斯框架的更先进的版本。
未来版本将逐步加入新成果的和额外的功能。
大量功能受到最小二乘-支持向量机的限制(其中包括“最小二乘支持向量机在函数中”的扩展名),其余的都是一般使用。
大量的演示说明如何使用工具箱中的不同功能。
Matlab的函数接口以两种方式组织:
例如在网络实验室人们可以根据自己的选择将函数既可以按照功能性方式调用又可以按照面向对象的结构方式调用。
2.1分类和优化
调用函数:
trainlssvm,simlssvm,plotlssvm,prelssvm,postlssvm;
演示:
Subsectionsdemofun,democlass.
Matlab的工具箱是围绕一个快速LS-SVM的训练和模拟算法而建立的。
相应的函数调用可用于分类以及函数估计。
函数plotlssvm显示该模型在培训点区域模拟结果。
通过执行Matlab中灵活和简单代码(lssvmMATLAB.m)来求解线性系统,它基于Matlab矩阵分解(反斜杠命令\为准)。
对单个和多个输出回归和分类的函数都可以使用。
训练和模拟可以做到为每个输出分别通过传递不同的核函数,内核和/或作为列向量正规化参数。
执行工具箱中其他核函数也是简单的。
一个模型的性能依赖于输入数据和输出数据的缩放。
一个适当的算法检测,适当的重新调整重设比例,分类和二进制变量。
2.1.1分类扩展
调用函数:
codelssvm,code,deltablssvm,roc,latentlssvm
演示:
Subsection,democlass
大量附加功能的文件是可用于分类工作的。
对于模拟分类模型的潜变量是通过模拟得到的连续的结果,这个结果最终是离散的。
受试者工作特征曲线(ROC)可以用来衡量一个分类器的性能。
多类分类问题分解成多个二元分类任务。
几种编码方案可以用在了这一点:
最小输出,一比一,一对多和纠错编码方案。
可以用海明距离,损失函数距离和贝叶斯损解码来解码一个给定的结果。
一个偏差期限校正是可以做,然而对于小数据集是特别有趣的。
2.1.2调谐,稀疏,完整性
调用函数:
tunelssvm,crossvalidatelssvm,leaveoneoutlssvm,robustlssvm,sparselssvm;
演示:
Subsections,demofun,democlass,demomodel
估算训练模式的泛化性能的很多方法都包括在内。
对于分类,可以用错误分类率(misclass)来表述。
对重复培训和验证为基础的估计都是通过crossvalidatelssvm和leaveoneoutlssvm来实现的。
一个强大的crossvalidation(关于迭代重加权LS-SVM的)分数由rcrossvalidatelssvm函数被调用。
这些绩效措施,可用于确定调整参数(如正规化和内核参数的LS-SVM的(tunelssvm))。
减少一个LS-SVM的模型的复杂性可以通过反复修剪较重要支持值(sparselssvm).在数据中的异常值的情况下,支持数值的更正将改进模型(robustlssvm).
2.1.3贝叶斯框架
调用函数:
bay_lssvm,bay_optimize,bay_lssvmARD,bay_errorbar,bay_modoutClass,
kpca,eign
演示:
Subsections
计算模型的后验概率和不同层次的推理中超参数的函数是可以用的。
通过考虑模型和超参数的不确定性得到误差线。
进行分类,一类可以估算后概率(这也被称为主持输出)(bay_modoutClass)。
在贝叶斯框架中使用特征值分解核矩阵。
矩阵的大小会随着数据点的数量而增长。
因此,人们需要逼近技术处理大型数据集。
众所周知,主要特征值和相应的特征向量是相关的。
因此,,迭代逼近方法,如作为Nystrom方法包括在内,这也是高斯过程中经常使用。
输入选择可以通过自动关联的测定(bay_lssvmARD)。
对于一个落后的变量的选择,贝叶斯框架推断的第三个层次对这个问题来说最合适的运用。
2.2NARX模型及预测
调用函数:
predict,windowize;
演示:
Subsection
对非线性NARX时间序列应用系统可以扩散。
一个NARX模型能够建立基于非线性回归量,这是通过对过去数据的输出(或输入)的测量来估计下一次迭代输出的值。
使一个数据集通过窗口和NARX窗口转变为一个新的输入(过去测量的)和输出集(未来的输出),这两个窗口分别为时间序列事件和一般的外部输入NARX事件。
迭代预测(在递归方法中)下一个输出,该输出是基于先前的预测,及初始值都是由预测来工作。
2.3非监督学习
调用函数:
kpca,denoise_kpca,preimage_rbf;
演示:
Subsection
非监督学习可以基于主成分分析(kpca)所描述的内核进行工作,为此,一种对最小二乘支持向量机的原始双重的解释得到屈服,这也将进一步扩展到内核典型相关分析和内核偏最小二乘法。
2.4通过固定大小的最小二乘支持矢量机解决大型规模问题
调用函数:
demo_fixedsize,AFEm,kentropy;
演示:
Subsection,demo_fixedsize,demo_fixedclass
例如喜欢基于最小二乘支持向量机算法的典型内核通常具有记忆功能和算法复杂度为O(N2)的计算要求。
为绕过这个瓶颈,对大规模的工作方法提出了解决方案。
对于大型数据集,将有利于在原始权空间解决最小二乘问题,这是由于当时未知数向量大小是与特征向量大小是成比例的,而不是数据点的数量。
但是,该特征空间映射是由内核诱导的,而内核又需要获得非线性,因此,提出了一种固定大小的最小二乘支持向量机的方法。
首先,Nystr¨om方法能够用来估计特征空间的映射。
Nystr¨om近似值,内核主成分分析和密度估计之间的联系已被讨论。
在固定大小的最小二乘支持向量机中,聘请了明确的原始对偶LS-SVM的解释,将它们联系起来。
根据二次Renyi熵准则选择支持向量机。
最后一步,在原始空间中完成回归,原始空间为求解大规模非线性函数估计和分类问题提供了适当的方法。
而固定大小的最小二乘支持向量机的方法正适合处理非常大的数据集。
另一个选择子集的标准由[41]and[24]提出,并与之有很紧密的联系。
它衡量特征空间和由子集引起的空间逼近的质量(视为自动特征提取或AFEm)。
该子集被认为是从数据(子样本)提取的随机子样本。
第三章LS-SVMlab工具箱举例
3.1LS–SVM布局
在这节中,我们简单地概括一下如何获得的LS-SVM模型(用于分类和回归有效),见图3.1
1.面向功能或面向对象接口(initlssvm)之间进行选择,见图A.3.15
2.寻找合适的优化参数(tunelssvm搜索),见图A.3.35
3.训练原先确定优化参数的给定模型(trainlssvm),见图A.3.34
4a.例如模拟模型测试数据(simlssvm),见图A.3.32
4b.必要的时候将结果可视化(plotlssvm),见图A.3.24
3.
2分类
首先,对工具箱中进行任务分类的可能性说明。
3.2.1helloworld
一个简单的例子说明如何开始使用工具箱中的分类任务。
我们首先我们按照正确的格式构建一个简单的数据集示例。
数据表示为矩阵,每个矩阵包含一个数据点行:
>>X=2.*rand(100,2)-1;
>>Y=sign(sin(X(:
1))+X(:
2));
>>X
X=
0.9003-0.9695
-0.53770.4936
0.2137-0.1098
-0.02800.8636
0.7826-0.0680
0.5242-0.1627
........
-0.45560.7073
-0.60240.1871
>>Y
Y=
-1
-1
1
1
1
1
...
1
-1
为了建立一个LS-SVM模型(带有高斯RBF核)我们需要两个调整参数:
γ(GAM)的是正则参数,它取决与训练误差最小化和平滑程度之间的权衡程度。
通常情况下在高斯RBF核中,σ2(sig2)是平方带宽:
>>gam=10;
>>sig2=0.4;
>>type=’classification’;
>>[alpha,b]=trainlssvm({X,Y,type,gam,sig2,’RBF_kernel’});
参数和与LS-SVM相关的变量是通过为一个单元联系起来。
此单元允许LS-SVM的参数和相关参数的默认处理句法分类一致。
这个定义应该由整个统一使用该LS-SVM的模型使用。
相应的LS-SVMlab面向对象接口导致短函数调用(见demomodel)。
默认情况下,数据是由适用于原始数据预处理功能的函数prelssvm和对模型进行预测的函数postlssvm来处理的。
此选项在调用中可以进行显式切换:
>>[alpha,b]=trainlssvm({X,Y,type,gam,sig2,’RBF_kernel’,’original’});
orbeswitchedon(bydefault):
>>[alpha,b]=trainlssvm({X,Y,type,gam,sig2,’RBF_kernel’,’preprocess’});
一定要始终使用相同的选项在所有连续调用中。
为了评估这个模型中新的点,需要使用函数simlssvm。
>>Xt=2.*rand(10,2)-1;
>>Ytest=simlssvm({X,Y,type,gam,sig2,’RBF_kernel’},{alpha,b},Xt);
如果输入数据的维数是2,LS-SVM的结果就可以显示。
>>plotlssvm({X,Y,type,gam,sig2,’RBF_kernel’},{alpha,b});
所有的绘制是通过这个简单的命令。
它查找结果中显示的最佳方式(见图3.2)
3.2.2示例
著名的里普利数据集的问题包括两个类,在每个类中的数据是由两个混合正态分布生成的(见图3.3a)
首先,我们基于某数据集建立一个LS–SVM模型并确定合适的优化参数。
在这种情况下,调整参数,例如γ∈[10-3,105]和带宽σ2∈[0.01,3]平方内核。
>>%loaddataset...
>>type=’classification’;
>>L_fold=10;%L-foldcrossvalidation
>>[gam,sig2]=tunelssvm({X,Y,type,[],[],’RBF_kernel’},[1e-31e50.013],...
’crossvalidatelssvm’,{L_fold,’misclass’});
>>[alpha,b]=trainlssvm({X,Y,type,gam,sig2,’RBF_kernel’});
>>plotlssvm({X,Y,type,gam,sig2,’RBF_kernel’},{alpha,b});
默认情况下,为优化参数的最低和最高值都设置为γ∈[0.05,148]和带宽σ2∈[0.08,12]平方内核。
>>[gam,sig2]=tunelssvm({X,Y,type,[],[],’RBF_kernel’},[],...
’crossvalidatelssvm’,{L_fold,’misclass’});
受试者工作特征(ROC)曲线提供了有关的质量信息分类:
>>[alpha,b]=trainlssvm({X,Y,type,gam,sig2,’RBF_kernel’});
>>%latentvariablesareneededtomaketheROCcurve
>>Y_latent=latentlssvm({X,Y,type,gam,sig2,’RBF_kernel’},{alpha,b},X);
>>[area,se,thresholds,oneMinusSpec,Sens]=roc(Y_latent,Y);
>>[thresholdsoneMinusSpecSens]
ans=
-2.19151.00001.0000
-1.19150.99201.0000
-1.12680.98401.0000
-1.08230.97601.0000
.........
-0.26990.18400.9360
-0.25540.17600.9360
-0.22770.17600.9280
-0.18110.16800.9280
.........
1.118400.0080
1.122000
2.122000
相应的ROC曲线如图3.3b所示。
图3.3ROC曲线的里普利分类任务
(一)原LS-SVM的分类器
(二)接收器工作特性曲线
3.2.3使用面向对象的接口:
初始化最小二乘支持向量机(initlssvm)
另一种可能获得相同的结果是使用面向对象接口。
如下所示:
>>%loaddataset...
>>%gatewaytotheobjectorientedinterface
>>model=initlssvm(X,Y,type,[],[],’RBF_kernel’);
>>model=tunelssvm(model,[1e-31e50.013],’crossvalidatelssvm’,{L_fold,’misclass’});
>>model=trainlssvm(model);
>>plotlssvm(model);
>>%latentvariablesareneededtomaketheROCcurve
>>Y_latent=latentlssvm(model,X);
>>[area,se,thresholds,oneMinusSpec,Sens]=roc(Y_latent,Y);
3.2.4最小二乘支持向量机的分类:
只有一个命令行
用简单的方法获得一个最小二乘支持向量机模型如下(二进制分类问题和一对一多类编码)
>>%loaddataset...
>>type=’classification’;
>>Yp=lssvm(X,Y,type);
该最小二乘支持向量机命令通过十倍交叉验证(简称CV)或留出一个依赖于样本大小的交叉验证来自动调整参数。
此功能将自动的解决(如有可能)问题。
默认情况下,高斯RBF将会被采用。
更多信息,请参见图A.3.23。
3.2.5贝叶斯推理的分类
针对3.2.2节的结果,本节将做进一步的分析。
贝叶斯框架被用来调整优化参数,以获得适当的输出。
最优正规化参自由亚齐运动的参数和内核参数sig2可分别通过优化成本推理的第二层和第三层获得。
建议采用合适的初始值来初始化模型:
>>[gam,sig2]=bay_initlssvm({X,Y,type,gam,sig2,’RBF_kernel’});
Optimizationonthesecondlevelleadstoanoptimalregularizationparameter:
>>[model,gam_opt]=bay_optimize({X,Y,type,gam,sig2,’RBF_kernel’},2);
Optimizationonthethirdlevelleadstoanoptimalkernelparameter:
>>[cost_L3,sig2_opt]=bay_optimize({X,Y,type,gam_opt,sig2,’RBF_kernel’},3);
Theposteriorclassprobabiliesarefoundbyincorporatingtheuncertaintyofthemodelparameters:
>>gam=10;
>>sig2=1;
>>Ymodout=bay_modoutClass({X,Y,type,10,1,’RBF_kernel’},’figure’);
Onecanspecifyapriorclassprobabilityinthemoderatedoutputinordertocompensatefor
anunbalancednumberoftrainingdatapointsinthetwoclasses.Whenthetrainingsetcontains
+-
NpositiveinstancesandNnegativeones,themoderatedoutputiscalculatedas:
+
N
prior=
+-
N+N
>>Np=10;
>>Nn=50;
>>prior=Np/(Nn+Np);
>>Posterior_class_P=bay_modoutClass({X,Y,type,10,1,’RBF_kernel’},...
’figure’,prior);
TheresultsareshowninFigure3.4.
结果如图3.4所示
图3.4(a)展示的是基于里普利数据LS-SVM的分类器输出设置。
该颜色表示的概率属于某一个类。
(b)这个例子说明了一个不平衡的里普利数据子集主持输出。
人们可以弥补在主持输出数据计算不平衡。
需要注意到在用阳性标本的蓝区面积增加补偿而红色区相应缩小。
3.2.6多级编码
下面的示例将演示如何使用多级编码方案的问题。
编码和解码分别被视为一个单独的和独立的预处理和后处理步骤(图3.5(a)and3.5(b)).
一个名为demomulticlass的演示文件包含在工具箱中。
>>%loadmulticlassdata...
>>[Ycode,codebook,old_codebook]=code(Y,’code_MOC’);
>>
>>[alpha,b]=trainlssvm({X,Ycode,’classifier’,gam,sig2});
>>Yhc=simlssvm({X,Ycode,’classifier’,gam,sig2},{alpha,b},Xtest);
>>
>>Yhc=code(Yh,old_codebook,[],codebook,’codedist_hamming’);
在多类分类问题,它是最容易使用的面向对象接口集其中集成了LS–SVM训练和模拟调用的编码:
>>%loadmulticlassdata...
>>model=initlssvm(X,Y,’classifier’,[],[],’RBF_kernel’);
>>model=tunelssvm(model,[1e-31e50.0115],...
’leaveoneoutlssvm’,{’misclass’},’code_OneVsOne’);
>>model=trainlssvm(model);
>>plotlssvm(model);
该tunelssvm例行的最后一个参数可以设置:
•code_OneVsOne:
一对一编码
•code_MOC:
最小输出编码
•code_ECOC:
纠错输出码
•code_OneVsAll:
一对多编码
图3.5LS-SVM的多类的例子:
(a)一对一编码(b)纠错输出码(c)最小输出编码(d)一对多编码
3.3回归
3.3.1一个简单的例子
这是一个简单的演示,使用ls-SVMlab解决一个简单的回归任务。
以正确的格式构建数据集。
这些数据被表示为矩阵的每一行包含的一个数据点。
>>X=linspace(-1,1,50)’;
>>Y=(15*(X.^2-1).^2.*X.^4).*exp(-X)+normrnd(0,0.1,length(X),1);
>>X
X=
-1.0000
-0.9592
-0.9184
-0.8776