天天看点

SVM试验的一些困惑。

今天用在Matlab中做SVM分类试验,采用SVM通用工具箱,训练数据数据量为1250,使用的核函数为rbf。但训练速度非常慢,大概3个小时,并且训练得到的支持向量数等于样本数。SVM求解得到的是解析解,因此算法的训练过程应该很快。由于以前没有使用SVM进行过相关试验,因此对于训练慢的原因不是太清楚。

在网上查阅了相关资料,并且重新设计了一个试验,数据量为100,且线性可分.实验效果非常好,训练速度快,得到的支持向量机数业很少。试验程序如下:

N = 50;

n=2*N;

randn('state',6);

x1 = randn(2,N);

y1 = ones(1,N);

x2 = 5+randn(2,N);

y2 = -ones(1,N);

figure;

plot(x1(1,:),x1(2,:),'b+',x2(1,:),x2(2,:),'k.');

axis([-3 8 -3 8]);

title('C-SVC')

hold on;

X1 = [x1,x2]';

Y1 = [y1,y2]';

X=X1;

Y=Y1;

C=Inf;

ker='linear';

global p1 p2

p1=3;

p2=1;

[nsv alpha bias] =svc(X,Y,ker,C)

--------------------

因此,我分析之前训练速度慢的主要是采用的数据位非线性可分。不过这个理由好像不太通,因为SVM本身是可以处理非线性可分的问题的。到底是什么原因呢?......

继续阅读