基于LSSVM的两种分类器的实现与比较

时间:2022-06-10 09:52:24

摘要:该文通过对支持向量机(SVM)分类器与最小支持向量机(LS-SVM)分类器的原理进行分析比较,得出最小二乘支持向量机,具有优良的推广能力,具有训练速度较快、结果较准等优点。分别通过使用LIBSVM与LSSVM工具对乳腺癌数据分析,实现两种工具的比较。

关键词:支持向量机;最小支持向量机;LIBSVM;LSSVM

中图分类号:TP311文献标识码:A文章编号:1009-3044(2011)29-7281-03

Implementation and Comparison of Two Classifiers Based on LS-SVM Algorithm

ZHOU Xia

(School of Computer Science, Yangjiang Vocational and Technical College, Yangjiang 529500, China)

Abstract: In this document, we compare the classification of Support Vector Machine(SVM) with the classification of Least Squares Support Vector Machines(LS-SVM), and have excellent ability, with training faster than SVM, use an example of using LIBSVM tools and LSSVM tools to classify an dataset of disease respectively to compare two tools.

Key words: SVM; LS-SVM; LIBSVM; LSSVM

支持向量机方法(SVM)是建立在统计学习理论的 VC 维理论和结构风险最小原理基础上的,根据有限的样本信息在模型的复杂性(即对特定训练样本的学习精度,Accuracy)和学习能力(即无错误地识别任意样本的能力)之间寻求最佳折衷,以期获得最好的推广能力(Generalizatin Ability)。

本文主要介绍基于LS-SVM的分类器原理,并借助LS-SVM和LIB-SVM工具来讲解分类器的实现方法。

1 分类器原理

1.1 基于Vapnik的支持向量机分类器原理

SVM是从线性可分情况下的最优分类面发展而来的,分类线方程为x・w+b0=0。

利用Lagrange优化方法可以把上述最优分类面问题转化为其对偶问题,即在约束条件:

(1a)

和 (1b)

下对αi求解下列函数的最大值:

(2)

寻优的问题,存在唯一解。容易证明,解中将只有一部分(通常是少部分)不为零,对应的样本就是支持向量。解上述问题后得到的最优分类函数是:

(3)

1.2 最小二乘支持向量机分类器LS-SVM

LS-SVM分类器是Suykens于1999年提出,它与Vapnik的支持向量机有些相似,但是它是通过线性系统来解决二次规化问题。

SVM在原空间(primal space)中求解如下优化问题:

(4)

及:

(5)

根据最优化性条件,对上式求偏导并令其为零。于是,基于LS-SVM分类器的函数为:

(6)

2 数据集描述

本文采用UC Irvine Machine Learning Repository网站提供的Breast Cancer Wisconsin (Original) Data Set,数据按时间顺序排列共有699个实例,有10个属性,2类,部分缺失值。以下是数据集的详细信息:

属性:1. Sample code number: id number

2. Clump Thickness: 1 - 10

3. Uniformity of Cell Size: 1 - 10

4. Uniformity of Cell Shape: 1 - 10

5. Marginal Adhesion: 1 - 10

6. Single Epithelial Cell Size: 1 - 10

7. Bare Nuclei: 1 - 10

8. Bland Chromatin: 1 - 10

9. Normal Nucleoli: 1 - 10

10. Mitoses: 1 - 10

类别:Class: (2 for benign, 4 for m alignant)

3 算法工具及自编程序说明

3.1 LIB SVM工具

LIB-SVM工具,他是由台湾大学林智仁教授编写,目前已被世界各地的网友编写为各种语言版本,本文采用Matlab版本进行再次开发。

1) 我们先对原始数据进行载入,使其变成可以Matlab处理的.mat格式数据。我们调用libsvmread指令:

[label_vector, instance_matrix] = libsvmread('breast-cancer.txt');

2) 在进行训练之前,我们先对工作空间进行清零操作同时也对代码的运行时间开始计时:

clc;clear;close all;format compact%初始化

tic;

3) 选择训练集和测试集:对于本实例,我们选用前面400个样本用来建模,后面283个样本作为测试集用来验证模型的准确性。

load breast-cancer.mat

train_data = instance_matrix(1:400,:);

train_label = label_vector(1:400,:);

test_data = instance_matrix(401:683,:);

test_label = label_vector(401:683,:);

4) 对数据进行归一化处理:我们调用libsvm的归一化函数:scaleForSVM,归一化完成之后train_scale和test_scale就是我们实际用来建模的训练集和用来验证准确性的测试集,他们的范围已经归一化到[-1,1]:

[train_scale,test_scale] = scaleForSVM(train_data,test_data,-1,1);

5) 参数寻优:我们先粗糙的选择一个大的范围,然后运行一下观察最佳的c与g,然后再逐步缩小范围,不断逼近最优的参数,下面代码因为已经反复寻优过,所以c与g的寻优范围和步长已经设的相当的小了。

[bestacc,bestc,bestg]SVMcgForClass = (train_label,train_scale,0,1,-3,-2,3,0.5,0.5,0.02)

6) 建模:选择训练集,最优的参数和核函数类型,我们就可以开始训练了,这里通过cmd来获取优化后最佳的参数c与g直接代入模式:

cmd = ['-c ',num2str(bestc),' -g ',num2str(bestg),'-t 0'];

model = svmtrain(train_label,train_scale,cmd);

7) 预测:用建好的model对测试集进行测试,以验证模式的准确性与泛化能力

[pre,acc] = svmpredict(test_label,test_scale,model);

i = (bestacc*400 + acc(1)*283)/683;

j = bestacc*4 + acc(1)*2.83;

fprintf('total accuracy = %4.4f%%(%d/683)£¨classification£°\n',i,j);

toc

模型的泛化能力究竟怎么样,这还要通过对283个样本的测试才能做出判断,下面是测试后的结果:

bestacc = 96.5000

bestc = 1.4142

bestg = 0.1768

Accuracy = 98.9399% (280/283) (classification)

total accuracy = 97.5110%(666/683) (classification)

Elapsed time is 0.389061 seconds.

结果相当振奋人心,在c等于1.4142和g等于0.1768的情况下,对测试集的预测中准确率达到了98.9399%,283个样本分类正确了280个,对于整个数据集,准确率为97.5110%(666/683)。整个建模,寻友和测试过程只花费了0.5s左右,这说明了模型的学习能力和训练代价都是可喜的,当然这和样本规模的偏小也有一定的联系,通过反复的训练,每次结果得到的c,g与acc都比较一致,准确率也很稳定,这说明模式的比较稳定,参数寻优的效果比较好。

3.2 LS-SVM工具

由于LS-SVM工具中没有专门的归一化工具,因此我们使用Matlab自带的归一化函数。

归一化后数据就开始建模,我们选用RBF核函数,用交叉验证来寻找最优的参数gam和sig2:%建模。LS-SVM没有计算准确率的函数,在这里我们自己编写一个简单的计算准确率的函数,代码如下:

%计算准确率

pred = simlssvm({Xtrain,Ytrain,type,gam,sig2,'RBF_kernel'},{alpha,b},Xtest);

pred1 = simlssvm({Xtrain,Ytrain,type,gam,sig2,'RBF_kernel'},{alpha,b},Xtrain);

count = 0;

count1= 0;

for i=1:283;

if(pred(i)==Ytest(i)),

count = count + 1;

End end

acc = count/2.83;

for i=1:400;

if(pred1(i)==Ytrain(i)),

count1 = count1 + 1;

Endend

count2 = count + count1;

acc1 = count2/6.83;

fprintf('test_accuracy = %4.4f%%(%d/283)£¨classification£°\n',acc,count);

fprintf('total_accuracy=%4.4f%%(%d/683)£¨classification£°\n',acc1,count2);

t2=clock;

fprintf('Elapsed = %5.4f%seconds£¨classification£°',etime(t2,t1));

最终的输出结果如下:

dF=0.0025063, dX=1.1206, X=2.21863.8768 ,F(X)=0.032451;

Obtained hyper-parameters: [gamma sig2]: 9.1941548.2697

-..test_accuracy = 98.9399%(280/283) (classification)

total_accuracy = 97.6574%(667/683) (classification)

Elapsed = 157.9220>>

从以上结果可以看出来,LS-SVM工具在使用交叉验证进行参数寻优时花费了大量的时间,整个代码从开始执行到运行结果花费了158秒,比起LIB-SVM的0.3s相差太大,而预测准确率和LIB-SVM一样为98.9399%,283个样本预测对了280个,不过整体测试准确的样本数(667)还是比LIBSVM工具(666)多出了一个。另外在实际运行中还注意到每次得到的准确率都不相同,这暴露的模型的不稳定型,每次寻到的最优参数和时间都不是完全相同,再次由于LS-SVM的plotsvm的函数对于维数大于2或是大于二类的分类问题无法成图,造成了无法可视化的遗憾。

4 结论

论文通过对支持向量机和最小二乘支持向量机进行比较,并在LIB-SVM、LS-SVM实验环境下分别相同的数据集进行实验,得出以下几个结论:

1) 支持向量机作为模式识别的新工具,有其它分类器无法比拟的优越性;最小二乘支持向量机能够实现二值分类器和分值分类器。

2) 最小二乘支持向量机(Least Square Support Vector Machines,简记LS-SVM)可用于解决分类和回归问题,它避免了求解二次规划,并具有优良的推广能力。

3) 与LS-SVM相比,LIB-SVM工具训练速度较快、分类准确率较高,能克服LS-SVM训练时间较长等问题,正开始成为主流工具。

参考文献:

[1] Vapnik V N.The nature of statistical learning theory[M].New York:Springer Verlag,1995.

[2] Chapelle O.Choosing multiple parameters for support vector machines[J].Machine Learning,2002,46:131-159.

[3] 王勇,杨辉华,王行愚,等.基于最小二乘支持向量机的Linux主机入侵检测系统[J].计算机工程,2005(2).

[4] 张苏豫,邹奉元,丁笑君,等.基于SVM 的青年女子体型分类研究[J].浙江理工大学学报,2008(1).

[5] 张学工.关于统计学习理论与支持向量机[J].自动化学报,2000,26(5):32-42.

上一篇:任务驱动法在高职计算机教学中的运用 下一篇:项目化教学在中职VB程序设计课程中的探索和实...