【SVR預(yù)測】基于差分進(jìn)化改進(jìn)灰狼算法優(yōu)化SVR預(yù)測matlab源碼
?一、灰狼算法
1.1 背景介紹
灰狼優(yōu)化算法(Grey Wolf Optimizer,GWO)由澳大利亞格里菲斯大學(xué)學(xué)者 Mirjalili 等人于2014年提出來的一種群智能優(yōu)化算法。該算法受到了灰狼捕食獵物活動的啟發(fā)而開發(fā)的一種優(yōu)化搜索方法,它具有較強(qiáng)的收斂性能、參數(shù)少、易實(shí)現(xiàn)等特點(diǎn)。近年來受到了學(xué)者的廣泛關(guān)注,它己被成功地應(yīng)用到了車間調(diào)度、參數(shù)優(yōu)化、圖像分類等領(lǐng)域中。
1.2 算法原理
狼群中有α、β、γ三只狼做頭狼,其中α是狼王,β、γ分別排第二、第三,β、γ都要聽α的,γ要聽β的。這三匹狼指導(dǎo)者其他的狼尋找獵物。狼群尋找獵物的過程就是我們尋找最優(yōu)解的過程。
GWO具體優(yōu)化過程包含了社會等級分層、跟蹤、包圍和攻擊獵物和尋找獵物。
但其核心行為只有捕獵。
為了模擬灰狼的搜索行為,假設(shè)α、β、γ具有較強(qiáng)識別潛在獵物的能力,因此,在每次迭代過程中,保留當(dāng)前種群中最好的三只狼(α、β、γ),然后根據(jù)他們的位置信息來更新其他搜索代理的位置。

1.3 構(gòu)建算法數(shù)學(xué)模型
1)社會等級分層
GWO的優(yōu)化過程主要有每代種群中的最好三匹狼(具體構(gòu)建時表示為三個最好的解)來指導(dǎo)完成。
2)包圍獵物
灰狼捜索獵物時會逐漸地接近獵物并包圍它,該行為的數(shù)學(xué)模型如下:


3)狩獵行為的數(shù)學(xué)模型



4)攻擊獵物
5)尋找獵物
二、svr算法
SVR的背景
SVR做為SVM的分支從而被提出,一張圖介紹SVR與SVM的關(guān)系

這里兩虛線之間的幾何間隔r=d ∣ ∣ W ∣ ∣ \fracs0sssss00s{||W||}∣∣W∣∣d,這里的d就為兩虛線之間的函數(shù)間隔。
(一圖讀懂函數(shù)間隔與幾何間隔)

這里的r就是根據(jù)兩平行線之間的距離公式求解出來的

SVR的原理
SVR與一般線性回歸的區(qū)別
SVR 一般線性回歸 1.數(shù)據(jù)在間隔帶內(nèi)則不計(jì)算損失,當(dāng)且僅當(dāng)f(x)與y之間的差距的絕對值大于? \epsilon?才計(jì)算損失 1.只要f(x)與y不相等時,就計(jì)算損失 2.通過最大化間隔帶的寬度與最小化總損失來優(yōu)化模型 2.通過梯度下降之后求均值來優(yōu)化模型

原理:SVR在線性函數(shù)兩側(cè)制造了一個“間隔帶”,間距為? \epsilon?(也叫容忍偏差,是一個由人工設(shè)定的經(jīng)驗(yàn)值),對所有落入到間隔帶內(nèi)的樣本不計(jì)算損失,也就是只有支持向量才會對其函數(shù)模型產(chǎn)生影響,最后通過最小化總損失和最大化間隔來得出優(yōu)化后的模型。
注:這里介紹一下支持向量的含義:直觀解釋,支持向量就是對最終w,b的計(jì)算起到作用的樣本(a>0)
如下圖所示, "管道"內(nèi)樣本對應(yīng)a=0,為非支持向量;
位于“管壁”上的為邊界支持向量,0<a<? \epsilon?
位于"管道"之外的為非邊界支持向量,a>? \epsilon?(異常檢測時,常從非邊界支持向量中挑選異常點(diǎn))

SVR的數(shù)學(xué)模型
3.1線性硬間隔SVR


3.2線性軟間隔SVR
原因:在現(xiàn)實(shí)任務(wù)中,往往很難直接確定合適的?? \epsilon??,確保大部分?jǐn)?shù)據(jù)都能在間隔帶內(nèi),而SVR希望所有訓(xùn)練數(shù)據(jù)都在間隔帶內(nèi),所以加入松弛變量ξ \xiξ?,從而使函數(shù)的間隔要求變的放松,也就是允許一些樣本可以不在間隔帶內(nèi)。

引入松弛變量后,這個時候,所有的樣本數(shù)據(jù)都滿足條件:

這就是映入松弛變量后的限制條件,所以也叫-------軟間隔SVR
注:對于任意樣本xi,如果它在隔離帶里面或者邊緣上,ξ \xiξ?都為0;在隔離帶上方則為ξ > 0 , ξ ? = 0 \xi>0,\xi^*=0ξ>0,ξ?=0
在隔離帶下方則為ξ ? > 0 , ξ = 0 \xi^*>0,\xi=0ξ?>0,ξ=0


三、部分代碼
clear
clc
close all
load wndspd % 示例數(shù)據(jù)為風(fēng)速(時間序列)數(shù)據(jù),共144個樣本\
addpath('./libsvm-3.1/')
%% HGWO-SVR
% 訓(xùn)練/測試數(shù)據(jù)準(zhǔn)備(用前3天預(yù)測后一天),用前100天做訓(xùn)練數(shù)據(jù)
input_train(1,:)=wndspd(1:97);
input_train(2,:)=wndspd(2:98);
input_train(3,:)=wndspd(3:99);
output_train=[wndspd(4:100)]';
input_test(1,:)=wndspd(101:end-3);
input_test(2,:)=wndspd(102:end-2);
input_test(3,:)=wndspd(103:end-1);
output_test=(wndspd(104:end))';
para=[30,500,0.2,0.8,0.2];
[bestc,bestg,test_pre]=my_HGWO_SVR(para,input_train',output_train',input_test',output_test');
%% 預(yù)測結(jié)果圖
err_pre=output_test'-test_pre;
figure('Name','測試數(shù)據(jù)殘差圖')
set(gcf,'unit','centimeters','position',[0.5,5,30,5])
plot(err_pre,'*-');
figure('Name','原始-預(yù)測圖')
plot(test_pre,'*r-');hold on;plot(output_test,'bo-');
legend('預(yù)測','原始')
set(gcf,'unit','centimeters','position',[0.5,13,30,5])
toc
四、仿真結(jié)果


