【SVM預測】基于SVM實現(xiàn)電力系統(tǒng)短期負荷預測含Matlab源碼

1 簡介

基于數(shù)據(jù)的機器學習就是由觀測樣本數(shù)據(jù)得出目前尚不能通過原理分析得到的規(guī)律,利用其對未來數(shù)據(jù)進行預測.神經(jīng)網(wǎng)絡(luò)以其優(yōu)越的函數(shù)逼近性能廣泛用于建立時間序列過去與未來數(shù)據(jù)之間某種確定的映射關(guān)系,實現(xiàn)預測.首先分析了以經(jīng)驗風險最小化為準則的神經(jīng)網(wǎng)絡(luò)的局限性,以及針對此提出的結(jié)構(gòu)風險最小化準則的優(yōu)點;其次引出支持向量機;最后利用支持向量機對用電數(shù)據(jù)做較準確的多步預測.

2 部分代碼

clc;

clear?

C = 30;

theta = 2;%C為最小二乘支持向量機的正則化參數(shù),theta為高斯徑向基的核函數(shù)參數(shù),兩個需要進行優(yōu)化選擇調(diào)試

NumOfPre = 1;%預測天數(shù),在此預測本季度最后七天

%以負荷的加權(quán)為參考1

al = 2;%溫度的加權(quán)

be = 1;%濕度的加權(quán)

th = 1;%星期的加權(quán)

Time = 48;

Data = xlsread('input.xls');%此為從excel表格讀數(shù)據(jù)的命令,表示將表格的數(shù)據(jù)讀到Data數(shù)組中,省略表格中的第一行第一列文字部分 可輸入你要預測的表格名稱

Data = Data(2:end,:);

[M,N] = size(Data);%計算讀入數(shù)據(jù)的行和列 M行N列

Data1 = Data;

for i = 1:2

? ? maxData = max(Data(:,i));

? ? minData = min(Data(:,i));

? ? Data1(:,i) = (Data(:,i) - minData)/(maxData-minData);%對溫度進行歸一化處理

end

for i = 4:N

? ? Data1(:,i) = log10(Data(:,i)) ;%對負荷進行對數(shù)處理 溫度和負荷的預處理 可采用不同的方法 可不必拘泥

end

Dim =? M - 2 - NumOfPre;%訓練樣本數(shù)%擁有完整特征描述的數(shù)據(jù)共有M-2組??!

Input = zeros(M,8,Time);%預先分配處理后的輸入向量空間%8是特征空間的維度!也是x的元素數(shù)??!

y = zeros(Dim,Time);

for i = 3:M?

? ? for j = 1:Time

? ? ? ? %%選取前一天溫度、同一時刻的負荷,前兩天的負荷,當天的溫度作為輸入特征

? ? ? ? x = [Data1(i-1,1:3), Data1(i-1,j+3), Data1(i-2,j+3),Data1(i,1:3)];%x就是每一個負荷對應的特征向量?。?!

? ? ? ? x(1)=al*x(1);

? ? ? ? x(6)=al*x(6);

? ? ? ? x(2)=be*x(2);

? ? ? ? x(7)=be*x(7);

? ? ? ? x(3)=th*x(3);

? ? ? ? x(8)=th*x(8);

? ? ? ? Input(i-2,:,j) = x;%Input(i,:,k)的含義為:第i天第j個時刻的負荷所對應的特征向量

? ? ? ? y(i-2,j) = Data1(i,j+3);

? ? end

end

Dist = zeros(Dim,Dim,Time);%預先分配距離空間

for i=1:Time

? ? for j=1:Dim

? ? ? ? for k=1:Dim

? ? ? ? ? ? Dist(j,k,i) = (Input(j,:,i) - Input(k,:,i))*(Input(j,:,i) - Input(k,:,i))';

? ? ? ? end

? ? end

end

%Dist(i,j,k)含義為:第i天第k個時刻的負荷與第j天同一時刻的負荷之間的特征距離

Dist1 = exp(-Dist/(2*theta));%RBF

K = zeros(1,Dim);

% Pre = zeros(M-2,Time);

for i=1:Time

? ? H = Dist1(:,:,i) + eye(Dim)/C;%最小二乘支持向量的H矩陣

? ? f = -y(1:Dim,i);?

? ? Aeq = ones(Dim,1)';

? ? beq = [0];

? ? option.MaxIter=1000;

? ? [a,fval]=quadprog(H,f,[],[],Aeq,beq);%,[],[],[],option);

? ? b = zeros(1,Dim);

? ? for j = 1:Dim

? ? ? ? b(1,j) = y(j,i) - a(j)/C - a'* Dist1(:,j,i);%求每個輸入特征對應的b

? ? end

? ? b = sum(b)/Dim;%求平均b,消除誤差


? ? for j = Dim + 1:M-2

? ? ? ? for k = 1:Dim

? ? ? ? ? ? K(1,k) = exp(-(Input(j,:,i) - Input(k,:,i))*(Input(j,:,i) - Input(k,:,i))'/(2*theta));%預測輸入特征與訓練特征的RBF距離

? ? ? ? end

? ? ? ? Pre(j-Dim,i) = sum(a'*K') + b;? %求解預測值? ?

? ? end

end

% Len = M? - (Dim + 3) + 1;%預測的天數(shù) 取本季度最后Len天

Len = NumOfPre;

Pre = 10.^Pre;

for i = 1:Len

? ? figure?

? ? plot(1:Time,Data(i+Dim+2,4:N),'r',1:Time,Pre(i,:),'k');%畫出每一天的預測值和真實值

? ? hold on

? ? scatter(1:Time,Data(i+Dim+2,4:N),'o')

? ? scatter(1:Time,Pre(i,:),'^')

? ?% axis([0 25 0 100])%坐標范圍

? ? hold off

end

Acu = (Pre - Data(Dim+3:M,4:N))./Data(Dim+3:M,4:N);%相對誤差

save Acu.mat Acu

s=0;

for i=1:Time

? ? s=abs(Acu(1,i))+s;

end

acu=s/Time;

save acu.mat acu;

Result=[C,theta,acu];

disp(Result);

3 仿真結(jié)果

4 參考文獻

[1]宋鵬, 黃同愿, and 劉渝橋. "基于SVM的共享單車需求預測." 重慶理工大學學報:自然科學 33.7(2019):8.

博主簡介:擅長智能優(yōu)化算法、神經(jīng)網(wǎng)絡(luò)預測、信號處理、元胞自動機、圖像處理、路徑規(guī)劃、無人機等多種領(lǐng)域的Matlab仿真,相關(guān)matlab代碼問題可私信交流。

部分理論引用網(wǎng)絡(luò)文獻,若有侵權(quán)聯(lián)系博主刪除。**完整代碼獲取關(guān)注微信公眾號天天matlab**

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容