SVR支援向量回歸例子

2021-10-01 10:08:04 字數 2911 閱讀 7854

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 時,該誤差可忽略。反之,...