基于径向基的神经网络时间序列模型 您所在的位置:网站首页 神经网络归一化和反归一化的区别 基于径向基的神经网络时间序列模型

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

2023-06-04 21:56| 来源: 网络整理| 查看: 265

文章目录

目录

文章目录

前言

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

二、使用步骤

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

2.数据分析

3.构造数据集

4.划分训练集和测试集

5.数据归一化

6.创建网络

7.仿真测试

8.数据反归一化

9.绘图

10.模型评估

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

总结

前言

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

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

基于径向基的神经网络(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中 很多文章只给测试集的预测效果,不给预测未来的数据,这篇文章也给出的未来的股票预测,不一定准确,因为股票价格受到很多因素的影响。仅作参考。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有