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**