方法/步骤
在电脑上打开Matlab软件,并将要进行预测的Excel中数据保存到Matlab工作路径下
新建一个脚本文件
请点击输入图片描述
在脚本文件中利用xlsread命令编写程序读入EXCel中数并咐据到工作区
请点击输入图片描述
在脚本文件中继续编写程序设定LSTM预测网络的训练数据,测试数据,并将数据进行标幺化处理
请点击输入图片描述
继续编写程序设置LSTM网络的层数、训练方法,学习速率等参数
请点击输入图片描述
接着利用trainNetwork函数编写程序对建立的网络进行训练
请点击输入图片描述
继续编写程序,利用 predictAndUpdateState函数对数据进行预测,并调用plot函数画出数据的实际值和预测值图像
请点击输入图片描述
最后点击上方的保存、接着点击“运行”
请点击输粗模入图片描述
待运行结束就可以在figure页面看到数据的预测值和实际值图像
请点击输入图片描述
请点击输入图片描述
总结:
1. 打开Matlab,将要处理的数据保存到工作路径下
2. 接着新建一个脚本文件
3. 在脚本文件中输入程序,读取数据、建立LSTM网络,并训练网络
4. 编写好程序以后点击“保存”,接着点击“运行”捷克语岩蔽缓在figure页面看导预测结果
matlab自带的有遗传算法工具箱,也就是两个函数,分别是x = ga(fitnessfcn,nvars,a,b,aeq,beq,lb,ub,nonlcon,options)
options = gaoptimset('param1'改携,value1,'param2',value2,...)在帮助文件(doc
ga/gaoptimset)里面自己好还看看它的用法就可以了,每一个参数蠢亩都有详细的说明,应该可以帮助到你核档伏。
%lms算法源程序clear all
close all
%channel system order
sysorder = 5
% Number of system points
N=2000
inp = randn(N,1)
n = randn(N,1)
[b,a] = butter(2,0.25)
Gz = tf(b,a,-1)
%This function is submitted to make inverse Z-transform (Matlab central file exchange)
%The first sysorder weight value
%h=ldiv(b,a,sysorder)'
% if you use ldiv this will give h :filter weights to be
h= [0.0976
0.2873
0.3360
0.2210
0.0964]
y = lsim(Gz,inp)
%add some noise
n = n * std(y)/(10*std(n))
d = y + n
totallength=size(d,1)
%Take 60 points for training
N=60
%begin of algorithm
w = zeros ( sysorder , 1 )
for n = sysorder : N
u = inp(n:-1:n-sysorder+1)
y(n)= w' * u
e(n) = d(n) - y(n)
% Start with big mu for speeding the convergence then slow down to reach the correct weights
if n <20
mu=0.32
else
mu=0.15
end
w = w + mu * u * e(n)
end
%check of results
for n = N+1 : totallength
u = inp(n:-1:n-sysorder+1)
y(n) = w' * u
e(n) = d(n) - y(n)
end
hold on
plot(d)
plot(y,'r')
title('System output')
xlabel('Samples')
ylabel('True and estimated output')
figure
semilogy((abs(e)))
title('Error curve')
xlabel('Samples')
ylabel('Error value')
figure
plot(h, 'k+')
hold on
plot(w, 'r*')
legend('Actual weights','Estimated weights')
title('Comparison of the actual weights and the estimated weights')
axis([0 6 0.05 0.35])
% RLS 算法
randn('seed', 0)
rand('seed', 0)
NoOfData = 8000 % Set no of data points used for training
Order = 32% Set the adaptive filter order
Lambda = 0.98% Set the forgetting factor
Delta = 0.001% R initialized to Delta*I
x = randn(NoOfData, 1) % Input assumed to be white
h = rand(Order, 1) % System picked randomly
d = filter(h, 1, x) % Generate output (desired signal)
% Initialize RLS
P = Delta * eye ( Order, Order )
w = zeros ( Order, 1 )
% RLS Adaptation
for n = Order : NoOfData
u = x(n:-1:n-Order+1)
pi_ = u' * P
k = Lambda + pi_ * u
K = pi_'/k
e(n) = d(n) - w' * u
w = w + K * e(n)
PPrime = K * pi_
P = ( P - PPrime ) / Lambda
w_err(n) = norm(h - w)
end
% Plot results
figure
plot(20*log10(abs(e)))
title('Learning Curve')
xlabel('Iteration Number')
ylabel('Output Estimation Error in dB')
figure
semilogy(w_err)
title('Weight Estimation Error')
xlabel('Iteration Number')
ylabel('Weight Error in dB')
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)