RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1259105
Accepted
user51515151
user51515151
Asked:2022-03-22 14:43:33 +0000 UTC2022-03-22 14:43:33 +0000 UTC 2022-03-22 14:43:33 +0000 UTC

在 MATLAB 中使用神经网络进行滑动窗口时间序列预测

  • 772

任务
使用 MATLAB 系统中的神经网络使用滑动窗口方法预测时间序列。

给定
函数:cos(x - 0.5) * abs(x)
点数:n = 1000
向量X:linspace(0.001, 10, n)
向量Y:(cos(X - 0.5) .* abs(X) + rand(size(X)) * 0.2人性化)

还有一个解决问题的算法,我不太明白(但它是必需的):

  1. 构建训练样本。为此,基于时间序列,构建 5 个序列,延迟为 1 到 5。要构建延迟为 5 的序列,从 1 到 n-5 个样本元素,延迟为 4,从取 2 到 n-4 个样本元素,延迟 3,从 3 到 n-3 个 bin,延迟 2,取 4 到 n-2 个 bin,延迟 1,5 到 n-1垃圾箱被拿走。
    我认为:
x1=X(5:n-1); y1=Y(5:n-1);
x2=X(4:n-2); y2=Y(4:n-2);
x3=X(3:n-3); y3=Y(3:n-3);
x4=X(2:n-4); y4=Y(2:n-4);
x5=X(1:n-5); y5=Y(1:n-5);
  1. 建立一个测试样本。由于训练样本的长度比原始时间序列的长度少 5 个元素,因此要构建,从第 6 个元素到第 n 个元素。
    我认为:
ytest=Y(6:n);
  1. 时间序列分为两部分:用于网络训练和验证。数组的尺寸应该彼此相关,大约为 3:1。
    以下是问题:
    1)训练和测试样本是在前面创建的。两个步骤。分成两部分是什么意思?
    2)拆分成2部分是什么意思,再加上阵列之间的比例为3:1。
  2. 构建用于预测的前馈神经网络。层数为2。第一层的激活函数是双曲正切,第二层是线性的。取第一层的神经元数量足以进行满意的预测(10-100),第二层的神经元数量为1。MATLAB中
    这样的前馈神经网络可以预测时间序列吗?
  3. 对训练集进行网络训练,带上原始序列和预测序列的图,以及预测误差。
    这似乎可以理解。
нейронные-сети
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    user51515151
    2022-03-22T23:54:07Z2022-03-22T23:54:07Z

    看来我已经想出了一个解决方案。

    % Для MATLAB R2018b (9.5.0.944444) Pro
    % Программа, написанная с использованием функций Neural Network Toolbox
    clear all; close all; clc;
    % === Исходные данные ===
    % Число точек
    n = 100;
    % Число лагов (5 -- согласно задаче)
    b = 5;
    % Генерация вектора X
    X = linspace(0.001, 10, n);
    % Генерация вектора Y на основе вектора X
    Y = cos(X - 0.5) .* abs(X) + rand(size(X)) * 0.2; % "Шуманизация"
    % Обучающая выборка
    k = fix(n * 3 / 4);
    Xt = X(1, 1:k);
    Yt = Y(1, 1:k);
    % Проверочная выборка
    Xv = X(1, k+1:n);
    Yv = Y(1, k+1:n);
    vs = size(Xv, 2);
    % Глубина прогноза
    m = k - b;
    % Горизонт прогноза (по умолчанию 1)
    g = 1;
    % Минимальные и максимальные значения координат
    min_x = min(X);
    max_x = max(X);
    min_y = min(Y);
    max_y = max(Y);
    
    % === Прогнозирование временного ряда с помощью NNT ===
    % Построение обучающих "подвыборок"
    km = k - m;
    if (m <= g)
        error('Горизонт прогноза слишком большой.');
    elseif (g ~= 1 && isprime(km))
        error('Измените значение глубины прогноза (либо горизонта прогноза в 1).');
    elseif (mod(km, g) ~= 0)
        error('Горизонт прогноза указан неверно.\n(%d mod g) должно быть равно 0.', km);
    end
    q = fix(km / g + 1);
    Yq = zeros(m, q);
    for i=1:q
        Yq(:, i) = Yt(1, 1+g*(i-1):m+g*(i-1));
    end
    % Настройка минимальных и максимальных значений
    mmx = zeros(size(Yq, 1), 2);
    mmx(:, 1) = min_y - min_y;
    mmx(:, 2) = max_y + max_y;
    % Создание нейронной сети обратного распространения с прямой связью
    % 2 скрытых слоя
    % Передаточные функции: гиперболический тангенс и линейная функция
    net = newff(mmx, [100 1], {'tansig' 'purelin'});
    % Скорость обучения
    net.trainParam.lr = 0.01;
    % Максимальное число эпох
    net.trainParam.epochs = 10;
    % Цель (всегда не меньше 1e-3, чтобы не было переобучения)
    net.trainParam.goal = 1e-1;
    % Обучение сети
    fprintf('> Обучение сети началось\n');
    [net, TR, T, E] = train(net, Yq(:, 1:q-1), Yq(end, 2:q));
    train_mse = max(E);
    fprintf('> Обучение сети закончилось\n');
    % Моделирование работы сети
    fprintf('> Моделирование работы сети началось\n');
    Yp = Yq(:, q);
    Yr = zeros(1, vs);
    forecast_mse = 0;
    for i=1:vs
        Yr(1, i) = sim(net, Yp);
        Yp = vertcat(Yp(2:size(Yp, 1), 1), Yr(1, i));
        forecast_mse = max(forecast_mse, (Yr(1, i)-Yv(1, i)).^2);
    end
    fprintf('> Моделирование работы сети закончилось\n');
    % Построение графика
    plot(Xt, Yt, 'b*'); % Построение обучающей выборки
    hold on;
    plot(Xv, Yv, 'gs'); % Построение проверочной выборки
    plot(Xv, Yr, 'rx'); % Построение прогноза
    tx = (max_x - min_x) / 20; ty = (max_y - min_y) / 20;
    text(min_x + tx, min_y + ty, sprintf("Train MSE: %s", train_mse));
    text(min_x + tx, min_y + ty * 2, sprintf("Forecast MSE: %s", forecast_mse));
    xlim([min_x max_x]); % Установка границы по X
    ylim([min_y max_y]); % Установка границы по Y
    xlabel('X'); % Метка оси X
    ylabel('Y'); % Метка оси Y
    grid on; % Сетка
    
    • 0

相关问题

  • 错误反向传播算法——神经网络的输出出现错误

  • 我们需要现成的神经网络来识别图片或视频序列中的对象,以及它们的描述

  • 帮助改写tensorflow 2.0的代码;图像人工智能;Python

  • 使用卷积网络的特征图

  • 将绝对值转移到归一化值的范围内,反之亦然

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    表格填充不起作用

    • 2 个回答
  • Marko Smith

    提示 50/50,有两个,其中一个是正确的

    • 1 个回答
  • Marko Smith

    在 PyQt5 中停止进程

    • 1 个回答
  • Marko Smith

    我的脚本不工作

    • 1 个回答
  • Marko Smith

    在文本文件中写入和读取列表

    • 2 个回答
  • Marko Smith

    如何像屏幕截图中那样并排排列这些块?

    • 1 个回答
  • Marko Smith

    确定文本文件中每一行的字符数

    • 2 个回答
  • Marko Smith

    将接口对象传递给 JAVA 构造函数

    • 1 个回答
  • Marko Smith

    正确更新数据库中的数据

    • 1 个回答
  • Marko Smith

    Python解析不是css

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5