今天用在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本身是可以處理非線性可分的問題的。到底是什麼原因呢?......