我在Matlab中使用libSVM
來檢查SVM
迴歸對時間序列預測的效用。我用下面的代碼示例:使用LibSVM進行時間序列迴歸的滯後
t = -10:0.1:10;
x = 2*sin(10*t)+0.5*t.^2+4;
x = (x - min(x))/(max(x) - min(x));
x = x';
data = x(1:end-1);
dataLabels = x(2:end);
trainDataLength = round(length(data)*70/100);
TrainingSet = data(1:trainDataLength);
TrainingSetLabels = dataLabels(1:trainDataLength);
TestSet = data(trainDataLength+1:end);
TestSetLabels = dataLabels(trainDataLength+1:end);
options = ' -s 3 -t 2 -c 100 -p 0.001 -h 0';
model = svmtrain(TrainingSetLabels, TrainingSet, options);
[predicted_label, accuracy, decision_values] = svmpredict(TestSetLabels, TestSet, model);
figure(2);
plot(1:length(TestSetLabels), TestSetLabels, '-b');
hold on;
plot(1:length(TestSetLabels), predicted_label, '-r');
hold off;
和數字我得到的是:
從圖中可以看出,在預測值與實際值的滯後。我不知道這個延遲是否是因爲我的代碼中存在一些錯誤,代碼爲libSVM
,或者它是很自然的,我們不能期望預測時間序列的一步提前值。
不知道這將是有益的(是這樣的,一個老話題),但我碰到的在斯坦福一些人誰使用你的代碼爲出發點,以檢查滯後的問題,一個博客帖子來了。看看這裏:http://www.alivelearn.net/?p=1666 – eNc