【SVM預(yù)測】灰狼算法優(yōu)化svm支持向量機預(yù)測matlab源碼
預(yù)測模型參數(shù)的選取對其泛化能力和預(yù)測準(zhǔn)確度,起著至關(guān)重要作用。基于徑向基核函數(shù)的最小二乘支持向量機參數(shù)主要涉及懲罰因子和核函數(shù)參數(shù),這兩個參數(shù)的選擇將直接影響最小二乘支持向量機的學(xué)習(xí)和泛化能力。為了提高最小二乘支持向量機的預(yù)測結(jié)果,文章用灰狼優(yōu)化算法對其參數(shù)尋優(yōu),建立軟件老化預(yù)測模型。通過實驗證明了該模型,對軟件老化的預(yù)測表現(xiàn)出很好的效果。
遺留在軟件中的缺陷會隨軟件系統(tǒng)長期持續(xù)運行造成計算機內(nèi)存泄漏、舍入誤差積累、文件鎖未釋放等現(xiàn)象發(fā)生,導(dǎo)致系統(tǒng)性能衰退甚至崩潰。這些軟件老化現(xiàn)象的發(fā)生不僅降低了系統(tǒng)可靠性,嚴(yán)重時還會危害人的生命財產(chǎn)安全。為了減輕軟件老化帶來的危害,對軟件老化趨勢進行預(yù)測,采取抗衰策略避免軟件老化現(xiàn)象的發(fā)生尤為重要[1]。
國內(nèi)外很多科研機構(gòu),如貝爾實驗室、IBM、南京大學(xué)、武漢大學(xué)[2]、西安交通大學(xué)[3]等,都對軟件老化展開了深入研究,并取得了一些成果。他們研究的主要方向是通過對軟件老化趨勢的預(yù)測,找到軟件抗衰策略最佳執(zhí)行時機。
本文以Tomcat服務(wù)器為研究對象,監(jiān)測Tomcat運行情況,收集系統(tǒng)性能參數(shù),建立基于灰狼優(yōu)化算法的最小二乘支持向量機軟件老化預(yù)測模型。預(yù)測軟件運行狀態(tài),確定軟件抗衰策略執(zhí)行時機。
1 最小二乘支持向量機
支持向量機(Support Vector Machine,SVM)是由Cortes和Vapnik[4]提出的。SVM以VC維理論和結(jié)構(gòu)風(fēng)險最小化原理為基礎(chǔ),可以很好地解決小樣本、非線性、高維數(shù)和局部極小值等問題。
當(dāng)訓(xùn)練樣本數(shù)目越多,SVM求解二次規(guī)劃問題越復(fù)雜,模型訓(xùn)練時間過長。Snykens等[5]提出最小二乘支持向量機(Least Squares Support Vector Machine,LSSVM),艮P在SVM的基礎(chǔ)上用等式約束條件代替不等式約束,將二次規(guī)劃問題轉(zhuǎn)化為線性方程組問題,很大程度上的避免了 SVM大量的復(fù)雜計算,降低了訓(xùn)練難度。近年來LSSVM廣泛應(yīng)用于回歸估計和非線性建模等領(lǐng)域,取得了良好的預(yù)測效果。
本文采用徑向基核函數(shù)作為LSSVM模型的核函數(shù)?;趶较蚧撕瘮?shù)的LSSVM算法參數(shù)主要涉及懲罰因子C和核函數(shù)參數(shù)〃,本文采用灰狼優(yōu)化算法對LSSVM的參數(shù)尋優(yōu)。
2 灰狼優(yōu)化算法
2014年,Mirjalili等[6]提出灰狼優(yōu)化(Grey WolfOptimizer,GWO)算法,GWO算法通過模擬自然界灰狼的等級制度和捕食策略,尋找最優(yōu)值。GWO算法以快速收斂性、調(diào)節(jié)參數(shù)少,在求解函數(shù)優(yōu)化問題中表現(xiàn)出更加優(yōu)越性而備受關(guān)注。該方法在全局搜索性、收斂性等方面優(yōu)于粒子群優(yōu)化算法、差分進化算法和引力搜索算法,并在特征子集選擇、表面波參數(shù)優(yōu)化等領(lǐng)域廣泛應(yīng)用。
2.1 灰狼優(yōu)化算法原理
灰狼個體間通過協(xié)同合作來實現(xiàn)種群的繁榮發(fā)展,尤其是在捕獵過程中灰狼群體有著嚴(yán)格的金字塔式社會等級制度。等級最高的狼為α,剩下的灰狼個體被依次被標(biāo)記為β,δ,ω,它們協(xié)同合作進行捕食。
在整個灰狼群體中,α狼扮演捕獵過程中領(lǐng)導(dǎo)者的角色,負責(zé)狩獵過程中的決策及管理整個狼群;β狼和δ狼是適應(yīng)度次佳的群體,它們協(xié)助α狼對整個狼群進行管理,在狩獵過程中擁有決策權(quán);剩余灰狼個體被定義為ω,協(xié)助α,β,δ對獵物進行攻擊。
2.2 灰狼優(yōu)化算法描述
GWO算法模仿狼群狩獵行為將整個狩獵的過程分為包圍、追捕、攻擊3個階段,捕獲獵物的過程就是尋找最優(yōu)解的過程。假設(shè)灰狼所處的解空間是V維,灰狼群體X由N個灰狼個體組成,即X=[Xi;X2,…,XN];對于灰狼個體Xi(1≤i≤N)來說,它在V維空間中的位置Xi=[Xi1;Xi2,…,XiV],該灰狼個體位置與獵物所處位置的距離由適應(yīng)度來衡量,距離越小適應(yīng)度越大。GWO算法尋優(yōu)過程如下。
2.2.1 包圍
首先對獵物進行包圍,在此過程中獵物與灰狼之間的距離用數(shù)學(xué)模型表示為:
其中:Xp(m)為第m次迭代后獵物位置,X(m)為灰狼位置,D為灰狼和獵物之間的距離,A和C分別是收斂因子和擺動因子,計算公式為:
2.2.2 追捕
GWO算法的尋優(yōu)過程是根據(jù)α,β和δ的位置,來定位獵物位置。ω狼在α,β,δ狼的引導(dǎo)下對獵物進行追捕,根據(jù)當(dāng)前最佳搜索單位的位置更新它們各自位置,并根據(jù)更新后α,β,δ位置重新確定獵物位置。狼群個體位置會隨獵物的逃跑而改變,此階段更新過程的數(shù)學(xué)描述為:
2.2.3 攻擊
狼群對獵物進行攻擊并捕獲獵物,得到最優(yōu)解。該過程通過式(2)中遞減實現(xiàn)。當(dāng)1≤∣A∣,表明狼群會更加接近獵物,這時狼群就會縮小搜索范圍進行局部搜索;當(dāng)1<∣A∣,狼群就會朝遠離獵物方向分散開,擴大搜索范圍進行全局搜索
?
?
tic % 計時 %% 清空環(huán)境導(dǎo)入數(shù)據(jù) clear clc close all format long load wndspd %% GWO-SVR input_train=[ ? ?560.318,1710.53; 562.267,1595.17; 564.511,1479.78; 566.909,1363.74; 569.256,1247.72; 571.847,1131.3; 574.528,1015.33; ? ?673.834,1827.52; 678.13,1597.84; 680.534,1482.11; 683.001,1366.24; 685.534,1250.1; 688.026,1133.91; 690.841,1017.81; ? ?789.313,1830.18; 791.618,1715.56; 796.509,1484.76; 799.097,1368.85; 801.674,1252.76; 804.215,1136.49; 806.928,1020.41; ? ?904.711,1832.73; 907.196,1718.05; 909.807,1603.01; 915.127,1371.43; 917.75,1255.36; 920.417,1139.16; 923.149,1023.09; ? ?1020.18,1835.16; 1022.94,1720.67; 1025.63,1605.48; 1028.4,1489.91; 1033.81,1258.06; 1036.42,1141.89; 1039.11,1025.92; ? ?1135.36,1837.45; 1138.33,1722.94; 1141.35,1607.96; 1144.25,1492.43; 1147.03,1376.63; 1152.23,1144.56; 1154.83,1028.73; ? ?1250.31,1839.19; 1253.44,1725.01; 1256.74,1610.12; 1259.78,1494.74; 1262.67,1379.1; 1265.43,1263.29; 1270.48,1031.58; ? ?1364.32,1840.51; 1367.94,1726.52; 1371.2,1611.99; 1374.43,1496.85; 1377.53,1381.5; 1380.4,1265.81; 1382.89,1150.18; ? ?1477.65,1841.49; 1481.34,1727.86; 1485.07,1613.64; 1488.44,1498.81; 1491.57,1383.71; 1494.47,1268.49; 1497.11,1153.04; ? ?1590.49,1842.51; 1594.53,1729.18; 1598.15,1615.15; 1601.61,1500.72; 1604.72,1385.93; 1607.78,1271.04; 1610.43,1155.93; ? ?1702.82,1843.56; 1706.88,1730.52; 1710.65,1616.79; 1714.29,1502.66; 1717.69,1388.22; 1720.81,1273.68; 1723.77,1158.8; ? ?]; input_test=[558.317,1825.04; 675.909,1712.89; 793.979,1600.35; 912.466,1487.32; ? ?1031.17,1374.03; 1149.79,1260.68; 1268.05,1147.33; 1385.36,1034.68;1499.33,1037.87;1613.11,1040.92;1726.27,1044.19;]; output_train=[ ? ?235,175; 235,190; 235,205; 235,220; 235,235; 235,250; 235,265; ? ?250,160; 250,190; 250,205; 250,220; 250,235; 250,250; 250,265; ? ?265,160; 265,175; 265,205; 265,220; 265,235; 265,250; 265,265; ? ?270,160; 270,175; 270,190; 270,220; 270,235; 270,250; 270,265; ? ?285,160; 285,175; 285,190; 285,205; 285,235; 285,250; 285,265; ? ?290,160; 290,175; 290,190; 290,205; 290,220; 290,250; 290,265; ? ?305,160; 305,175; 305,190; 305,205; 305,220; 305,235; 305,265; ? ?320,160; 320,175; 320,190; 320,205; 320,220; 320,235; 320,250; ? ?335,160; 335,175; 335,190; 335,205; 335,220; 335,235; 335,250; ? ?350,160; 350,175; 350,190; 350,205; 350,220; 350,235; 350,250; ? ?365,160; 365,175; 365,190; 365,205; 365,220; 365,235; 365,250; ? ? ?]; output_test=[235,160; 250,175; 265,190;270,205; 285,220; 290,235; 305,250; 320,265; 335,265; 350,265; 365,265;]; % 生成待回歸的數(shù)據(jù) x = [0.1,0.1;0.2,0.2;0.3,0.3;0.4,0.4;0.5,0.5;0.6,0.6;0.7,0.7;0.8,0.8;0.9,0.9;1,1]; y = [10,10;20,20;30,30;40,40;50,50;60,60;70,70;80,80;90,90;100,100]; X = input_train; Y = output_train; Xt = input_test; Yt = output_test; %% 利用灰狼算法選擇最佳的SVR參數(shù) SearchAgents_no=60; % 狼群數(shù)量 Max_iteration=500; % 最大迭代次數(shù) dim=2; % 此例需要優(yōu)化兩個參數(shù)c和g lb=[0.1,0.1]; % 參數(shù)取值下界 ub=[100,100]; % 參數(shù)取值上界 Alpha_pos=zeros(1,dim); % 初始化Alpha狼的位置 Alpha_score=inf; % 初始化Alpha狼的目標(biāo)函數(shù)值,change this to -inf for maximization problems Beta_pos=zeros(1,dim); % 初始化Beta狼的位置 Beta_score=inf; % 初始化Beta狼的目標(biāo)函數(shù)值,change this to -inf for maximization problems Delta_pos=zeros(1,dim); % 初始化Delta狼的位置 Delta_score=inf; % 初始化Delta狼的目標(biāo)函數(shù)值,change this to -inf for maximization problems Positions=initialization(SearchAgents_no,dim,ub,lb); Convergence_curve=zeros(1,Max_iteration); l=0; % 循環(huán)計數(shù)器 ? ? ? % %% SVM網(wǎng)絡(luò)回歸預(yù)測 % [output_test_pre,acc,~]=svmpredict(output_test',input_test',model_gwo_svr); % SVM模型預(yù)測及其精度 % test_pre=mapminmax('reverse',output_test_pre',rule2); % test_pre = test_pre'; % % gam = [bestc bestc]; % Regularization parameter % sig2 =[bestg bestg]; ? ? % model = initlssvm(X,Y,type,gam,sig2,kernel); ? ? ? ? ? ? ? ? % 模型初始化 % model = trainlssvm(model); ?% 訓(xùn)練 % Yp = simlssvm(model,Xt); ? ?% 回歸 plot(1:length(Yt),Yt,'r+:',1:length(Yp),Yp,'bo:') title('+為真實值,o為預(yù)測值') ? ? ? ? ? % err_pre=wndspd(104:end)-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(wndspd(104:end),'bo-'); % legend('預(yù)測','原始') % set(gcf,'unit','centimeters','position',[0.5,13,30,5]) % % result=[wndspd(104:end),test_pre] % % MAE=mymae(wndspd(104:end),test_pre) % MSE=mymse(wndspd(104:end),test_pre) % MAPE=mymape(wndspd(104:end),test_pre) %% 顯示程序運行時間 toc

擅長優(yōu)化求解、神經(jīng)網(wǎng)絡(luò)預(yù)測、信號處理、元胞自動機、圖像處理等多種領(lǐng)域的Matlab仿真,博主QQ1575304183