新浪博客

[转载]【转】SVM与LSSVM的区别(附LSSVM代码)

2014-04-15 19:30阅读:

SVM标准算法在应用中存在着超平面参数选择,以及QP问题求解中矩阵规模受训练样本数目的影响很大,导致求解规模过大的问题。
Suykens等人提出的最小二乘支持向量机(Least Squares Support Vector Machines,LS-SVM)从机器学习损失函数着手,在其优化问题的目标函数中使用二范数,并利用等式约束条件代替SVM标准算法中的不等式约束条件,使得LS-SVM方法的优化问题的求解变为通过Kuhn-Tucker条件得到的一组线性方程组的求解。
SVM与LS-SVM的比较
(1)优化问题的构造
从前述对SVM与LS-SVM方法在样本分类与回归估计的分析中可以看出,两种方法的优化问题的构造上,目标函数分别采用了误差因子的一次项与二次项,同时约束条件分别采用了不等式约束与等式约束形式。这两方面的差别也导致了两种方法在求解过程中的差异。
(2)优化问题的求解
SVM求解QP问题中,变量维数等于训练样本的个数,从而使其中矩阵元素的个数是训练样本个数的平方。当数据规模达到一定程度时,SVM算法的求解规模就会使一些传统办法难以适应。针对SVM的求解困难的问题,也产生了一些相应的解决办法,如选块算法和SMO算法等。这些算法在一定程度上简化了SVM优化问题的求解,促进了SVM的应用发展。而LS-SVM方法通过求解线性方程组实现最终的决策函数,在一定程度上降低了求解难度,提高了求解速度,使之更能适合于求解大规模问题,更能适应于一般的实际应用。虽然并不一定能获得全局最优解,但是
仍可以获得较高精度的识别率。
(3)解的稀疏性
SVM标准算法中,需要求解复杂的QP问题,可以获得理论上的全局最优解,并且,大部分的Lagrange乘子均为零,使得最终的决策函数只依赖于少部分样本数据,即支持向量。使SVM方法中解显示出稀疏性的特点。在LS-SVM方法中,由于其优化问题的目标函数使用了误差平方项以及等式约束条件,将SVM的QP问题转化为一组线性方程组求解,使得Lagrange乘子与误差项成比例关系,直接的后果就使得最终决策函数与所有样本都相关,也就失去了SVM方法中解的稀疏性的特点。但是LS-SVM方法通过对最
终求解得到的Lagrange乘子进行排序,并使用“修剪”算法,仍然可以在一定程度上实现解的稀疏性的

LS-SVM回归测试程序代码模板
%清空变量空间
clc;clear;close all
format compact

%程序代码计时开始
tic;

%数据导入
indata=load('C:Documents and SettingsAdministrator桌面训练数据powerdata.txt');
trainset=indata(1:100,1:55);
trainset_label=indata(1:100,56);
testset=indata(101:230,1:55);
testset_label=indata(101:230,56);

%样本集各维度可视化
featuredisplay(trainset,trainset_label,testset,testset_label,1);
% %%
% %原始数据可视化
% figure;
% boxplot(testset_label,'orientation','horizontal','labels','testset_label','colors','bgry');
% grid on;
% title('Visualization for original data');



%数据预处理
%归一化处理
[trainset,testset,ps] = scaleForLSSVM(trainset,testset,-1,9);
[trainset_label,testset_label,label_ps] = scaleForLSSVM(trainset_label,testset_label,200,300);
% %%
% %归一化后可视化
% figure;
% boxplot(testset_label,'orientation','horizontal');
% grid on;
% title('Visualization for scale data');

%样本集各维度可视化
featuredisplay(trainset,trainset_label,testset,testset_label,1);



%降维处理
% %1.pca处理
% [trainset,testset] = pcaForLSSVM(trainset,testset);
% %2.ica处理
% [trainset,testset] = fasticaForLSSVM(trainset,testset);
% %3.dct处理
% [trainset,testset] = DCTforSVM(trainset,testset);

%LS-SVM模型参数初始化
type = 'f';
kernel='RBF_kernel';
preprocess='original';
igam =0.1;
isig2 =0.1;
%交叉验证优化参数
[gam,sig2,cost] = tunelssvm({trainset,trainset_label,type,igam,isig2,kernel,preprocess},[0.1 0.1;100 100],'gridsearch',{},'crossvalidate')
%进行模型训练
model = initlssvm(trainset,trainset_label,type,gam,sig2,kernel);
model = trainlssvm(model);
%回归预测
predictlabel = simlssvm(model,testset);
%数据反归一化
testset_label=mapminmax('reverse',testset_label,label_ps);
predictlabel=mapminmax('reverse',predictlabel,label_ps);

gam =
30.0138
sig2 =
314.1541
cost =
6.4485
-.



%回归参数指标、结果可视化
[MSE,RMSE,SCC,SSE]=regressmeasures(predictlabel,testset_label,sig2,gam);

Mean squared error=118.263(regression)
Sqrt mean squared error=10.8749(regression)
Squared correlation coefficient=0.748742(regression)
Sum squared error=13986(regression)








%程序运行计时结束
toc;

Elapsed time is 3.519900 seconds.

我的更多文章

下载客户端阅读体验更佳

APP专享