svr軟體包的安裝:
%使用svr模型,得到輸入向量x(x包含3個變數x1,x2,x3)到輸出向量y(y只包含乙個變數)之間的對映關係,也就是計算y=f(x1,x2,x3)函式的f
%x1,x2,x3時簡單的加法運算 y=x1+x2+x3
%訓練個數 訓練需要的時間(秒) 誤差 相關係數
%100 0.0028 9.3469 0.7711
%500 0.05 7.38 0.8
%1000 0.17 4.5889 0.8618
%10000 4.1250 0.006051 0.9997
%20000 8.98 9.98041e-05 0.9999
%50000 33.24 9.97801e-05 0.9999
%60000
%平方後相加運算 y=x1的平方+x2的平方+x3的平方
%訓練個數 訓練需要的時間(秒) 誤差 相關係數
%100 0.002 3212 0.72033
%500 0.04 2516 0.5748
%1000 0.16 2885 0.62
%10000 12.8 1150 0.7964
%20000 41 376 0.9199
%50000 159 4.90 0.998527
%60000 503 0.92 0.999717
%結論:隨著訓練svr模型時使用的資料量變大,訓練的效果越好。通過誤差變小,相關係數變大來體現。
%%clean work
close all;%關閉所有figure視窗
clear;%清空變數
clc;%清空命令
format compact;%空格緊湊
%生成對模型進行訓練的資料
%這個模型為y=f(x1,x2,x3),表示此模型有3個輸入變數x1,x2,x3,輸出變數有1個,y。
%x1 = (0:0.001:10)』; x2 = (20:0.001:30)』; x3 = (50:0.001:60)』;
x1=randi(10,10000,1); x2=randi(10,10000,1); x3=randi(10,10000,1); %使用1到10之間的隨機數進行訓練
y = x1.^2 + x2.^2 +x3.^2;
%y = x1 + x2 +x3;
%建立回歸模型,也就是對模型進行訓練
%x是該模型的輸入向量,x中每行有3個資料,分別是x1,x2,x3,y的每個向量有1個資料
x(:,1)=x1;x(:,2)=x2;x(:,3)=x3;
fprintf(『start svr train,please waiting …』);
tic;%記錄svr模型訓練的時間
model = libsvmtrain(y,x,』-s 3 -t 2 -c 2.2 -g 2.8 -p 0.01』);
toc%利用建立的模型看其在訓練集上的回歸效果,也就是使用已經訓練後的svr模型,輸入訓練時使用的輸入資料,**輸出結果
%下面libsvmpredict函式的第乙個引數無所謂,但是具有和輸出變數一樣的列數和行數
%如果設定為訓練模型時使用過的輸出變數,那麼在**時,
%會計算**的輸出結果值和原始的輸出結果值之間的誤差mse和相關係數prob
[py,mse,prob] = libsvmpredict(y,x,model,』-b 0』);
%簡單的加法運算
%訓練個數 訓練需要的時間(秒) 誤差 相關係數
%100 0.0028 9.3469 0.7711
%500 0.05 7.38 0.8
%1000 0.17 4.5889 0.8618
%10000 4.1250 0.006051 0.9997
%20000 8.98 9.98041e-05 0.9999
%50000 33.24 9.97801e-05 0.9999
%60000
%平方後相加運算
%訓練個數 訓練需要的時間(秒) 誤差
%100 0.002 3212 0.72033
%500 0.04 2516 0.5748
%1000 0.16 2885 0.62
%10000 12.8 1150 0.7964
%20000 41 376 0.9199
%50000 159 4.90 0.998527
%60000 503 0.92 0.999717
%結論:隨著訓練svr模型時使用的資料量變大,訓練的效果越好。通過誤差變小,相關係數變大來體現。
figure;%建立乙個視窗
plot(y,『o』);%原始資料以o這種形式標記
hold on;%保持當前影象不重新整理
plot(py,『r*』);%回歸資料以紅色的*標記
legend(『原始資料:訓練svr模型時,使用的輸出變數』,『回歸資料:使用訓練好的svr模型,對訓練時使用的輸入變數進行**』);%設定圖例線條
grid on;%畫圖的時候新增網格線
%進行**
testx1 = [8.5;3.6;1.5];testx2 = [2.1;2.6;5.8];testx3 = [3.2;5.5;7.8];
display(『真實資料』);%控制台輸出
testy = testx1.^2 + testx2.^2 + testx3.^2
%testy = testx1 + testx2 + testx3
%下面libsvmpredict函式的第乙個引數和第二個引數設定為相同,
%就是收入給已經訓練好的模型的輸入引數
testx(:,1)=testx1;testx(:,2)=testx2;testx(:,3)=testx3;
[ptesty,tmse,prob2] = libsvmpredict(testy,testx,model,』-b 0』);
display(『**資料』);
ptesty
支援向量機(SVM) 支援向量回歸(SVR)
1 支援向量機 svm 是一種比較好的實現了結構風險最小化思想的方法。它的機器學習策略是結構風險最小化原則 為了最小化期望風險,應同時最小化經驗風險和置信範圍 支援向量機方法的基本思想 1 它是專門針對有限樣本情況的學習機器,實現的是結構風險最小化 在對給定的資料逼近的精度與逼近函式的複雜性之間尋求...
支援向量回歸
支援向量回歸和傳統的回歸模型的區別 就拿最簡單的線性回歸來講,通過模型輸出的f x 與真實輸出的y值之間的差別來計算損失。而svr假設模型輸出f x 與真實的y值之間可以容忍有eps大小的偏差,也就意味只要樣本的 值落在f x 兩側在y軸方向上絕對值只差小於eps的間隔帶上就是 正確的。我們去用乙個...
回歸 支援向量機回歸 SVR
支援向量機回歸 svr 是支援向量機在回歸問題上的應用模型。支援向量機回歸模型基於不同的損失函式產生了很多變種。本文僅介紹基於 epsilon 不敏感損失函式的svr模型。找到乙個分離超平面 超曲面 使得期望風險最小。epsilon 損失函式,就是當誤差小於 epsilon 時,該誤差可忽略。反之,...