基于径向基的神经网络时间序列模型-matlab


前言


提示:以下是本篇文章正文内容,下面案例可供参考

一、径向基的神经网络是什么?

基于径向基的神经网络(Radial Basis Function Neural Network,RBFNN)是一种经典的人工神经网络模型,它在模式识别、函数逼近和预测等领域具有广泛应用。RBFNN以其独特的结构和强大的学习能力而受到广泛关注。

RBFNN的核心思想是通过将输入数据映射到高维特征空间中,并在该空间中使用径向基函数来建模和拟合数据。这些径向基函数以输入与其心脏(或中心)之间的距离作为激活函数,表达了数据与特定中心之间的相关性。通过适当选择径向基函数的中心位置和宽度,RBFNN可以有效地逼近复杂的非线性关系。

RBFNN的学习过程包括两个主要阶段:中心选择和权重调整。中心选择阶段通过一定的方法从训练数据中选择一组合适的中心点,这些中心点代表了特征空间中的数据分布。权重调整阶段使用最小均方误差或最大似然估计等方法,通过调整径向基函数的权重,使得网络能够更好地逼近目标函数。

RBFNN具有多个优点。首先,它具有较好的泛化能力,可以处理高维数据和复杂的非线性关系。其次,RBFNN的训练过程相对简单且具有较快的收敛速度。此外,RBFNN还具备一定的容错性,对于输入数据中的噪声和异常值具有一定的鲁棒性。

总而言之,基于径向基的神经网络是一种强大的工具,可用于模式识别、函数逼近、时间序列预测等各种应用领域。其独特的结构和学习算法使得它成为处理复杂问题的有效方法,并在实际应用中取得了显著的成果。随着深度学习等技术的不断发展,RBFNN仍然具备着重要的研究和应用价值。

二、使用步骤

1.导入数据(时间序列只能是单列)

%%  导入数据(时间序列的单列数据)
result = xlsread("C:\Users\86182\Desktop\时间序列\银行.xlsx");
result =result(:,3)

2.数据分析

num_samples = length(result);  % 样本个数 
kim = 20;                      % 延时步长(kim个历史数据作为自变量)
zim =  1;                      % 跨zim个时间点进行预测

延时步长可调,检验预测未来数据的个数多少,这里填多少。

3.构造数据集

%%  构造数据集
for i = 1: num_samples - kim - zim + 1
    res(i, :) = [reshape(result(i: i + kim - 1), 1, kim), result(i + kim + zim - 1)];
end

[m,n]=size(res)

4.划分训练集和测试集

temp = 1: 1: m;
round(m*0.7)
P_train = res(temp(1:round(m*0.7)), 1:20)';
T_train = res(temp(1:round(m*0.7)), 21)';
M = size(P_train, 2);

P_test = res(temp(round(m*0.7)+1: end), 1:20)';
T_test = res(temp(round(m*0.7)+1: end), 21)';
N = size(P_test, 2);

5.数据归一化

[p_train, ps_input] = mapminmax(P_train, 0, 1);
p_test = mapminmax('apply', P_test, ps_input);

[t_train, ps_output] = mapminmax(T_train, 0, 1);
t_test = mapminmax('apply', T_test, ps_output);

6.创建网络

rbf_spread = 1000;                          % 径向基函数的扩展速度
net = newrbe(p_train, t_train,rbf_spread);

7.仿真测试

t_sim1 = sim(net, p_train);
t_sim2 = sim(net, p_test );

8.数据反归一化

T_sim1 = mapminmax('reverse', t_sim1, ps_output);
T_sim2 = mapminmax('reverse', t_sim2, ps_output);

9.绘图

%%  均方根误差
error1 = sqrt(sum((T_sim1 - T_train).^2) ./ M);
error2 = sqrt(sum((T_sim2 - T_test ).^2) ./ N);
%%  绘图
figure
plot(1: M, T_train, 'r-', 1: M, T_sim1, 'b-', 'LineWidth', 1)
legend('真实值', '预测值')
xlabel('预测样本')
ylabel('预测结果')
string = {'训练集预测结果对比'; ['RMSE=' num2str(error1)]};
title(string)
xlim([1, M])
grid

figure
plot(1: N, T_test, 'r-', 1: N, T_sim2, 'b-', 'LineWidth', 1)
legend('真实值', '预测值')
xlabel('预测样本')
ylabel('预测结果')
string = {'测试集预测结果对比'; ['RMSE=' num2str(error2)]};
title(string)
xlim([1, N])
grid

10.模型评估

% R2
R1 = 1 - norm(T_train - T_sim1)^2 / norm(T_train - mean(T_train))^2;
R2 = 1 - norm(T_test -  T_sim2)^2 / norm(T_test -  mean(T_test ))^2;


disp(['训练集数据的R1为:', num2str(R1)])
disp(['测试集数据的R2为:', num2str(R2)])

%  MAE
mae1 = sum(abs(T_sim1 - T_train)) ./ M ;
mae2 = sum(abs(T_sim2 -  T_test)) ./ N ;

disp(['训练集数据的MAE为:', num2str(mae1)])
disp(['测试集数据的MAE为:', num2str(mae2)])

%  MBE
mbe1 = sum(T_sim1 - T_train) ./ M ;
mbe2 = sum(T_sim2 -  T_test) ./ N ;

disp(['训练集数据的MBE为:', num2str(mbe1)])
disp(['测试集数据的MBE为:', num2str(mbe2)])


mse1 = sqrt(sum((T_sim1 - T_train).^2)) ./ M;
mse2 = sqrt(sum((T_sim2 - T_test).^2)) ./ N;
disp(['训练集数据的MSE1为:', num2str(mse1)])
disp(['测试集数据的MSE2为:', num2str(mse2)])

rmse1 = sqrt(mean((T_sim1 - T_train).^2));
rmse2 = sqrt(mean((T_sim2 - T_test).^2));
disp(['训练集数据的RMSE1为:', num2str(rmse1)])
disp(['测试集数据的RMSE2为:', num2str(rmse2)])

11.预测未来20天的股票价格

%%  
save net.mat net
save ps_input.mat ps_input
save ps_output.mat ps_output


%%

%%  读取保存文件
load net.mat
load ps_input.mat
load ps_output.mat

%%  读取待预测数据
c=result(end-kim+1:end)'
d=zeros(20,1)'
f=[c d]
f(1)
for  i=1:20
kes = f(i:19+i)
%0.51059 0.02007 4 2
%%  数据转置
kes = kes';

%%  数据归一化
n_test = mapminmax('apply', kes, ps_input);

%%  仿真测试
t_sim3 = sim(net, n_test);

%%  数据反归一化
T_sim3 = mapminmax('reverse', t_sim3, ps_output)
f(i+20)=T_sim3
end

[n1,m1]=size(T_test)
figure
hold on
plot(T_test , 'b-')
plot(m1+1:m1+21,f(20:21+19), 'r-')
legend('真实值','预测值')
xlabel('预测样本')
ylabel('预测结果')
hold off

总结

  可见基于径向基的神经网络的对股票的预测还是挺准的,CSDN中 很多文章只给测试集的预测效果,不给预测未来的数据,这篇文章也给出的未来的股票预测,不一定准确,因为股票价格受到很多因素的影响。仅作参考。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于径向神经网络(Radial Basis Function Neural Network, RBFNN)的时间序列预测是一种常见的预测方法,下面将介绍基本原理和步骤。 1. 数据准备:将时间序列数据进行预处理,包括去除趋势、平稳化、归一化等操作,以提高预测的准确性。 2. 特征提取:根据具体需求,提取适当的特征用于预测。常见的特征包括时间延迟、滞后项、移动平均值等。 3. 网络结构设计: - 输入层:根据选择的特征,设计相应数量的输入节点。 - 隐含层:使用径向基函数(如高斯函数)作为激活函数,设计适当数量的隐含层节点。 - 输出层:设计一个输出节点或多个输出节点,用于预测目标变量。 4. 网络训练: - 初始化权重和偏置:随机初始化网络的权重和偏置。 - 前向传播:将输入数据通过隐含层传递到输出层,得到预测结果。 - 反向传播:计算预测结果与实际值之间的误差,并通过反向传播算法调整权重和偏置。 - 重复迭代:重复进行前向传播和反向传播,直到达到停止条件(如达到最大迭代次数或误差小于阈值)。 5. 预测结果: - 使用训练好的RBFNN进行时间序列预测,将输入数据通过前向传播得到预测结果。 - 根据需要,可以对预测结果进行后处理,如逆归一化、反平稳化等操作。 需要注意的是,RBFNN的性能和预测准确性与网络结构的设计、特征的选择和数据的准备密切相关。在实际应用中,还需要进行交叉验证、参数调优等操作,以确保获得最佳的预测结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值