zoukankan      html  css  js  c++  java
  • 【转载】Chaotic Time-Series Prediction

     原文地址:https://cn.mathworks.com/help/fuzzy/examples/chaotic-time-series-prediction.html?requestedDomain=www.mathworks.com 

    This example shows how to do chaotic time series prediction using ANFIS.

    Time Series Data

    The data is generated from the Mackey-Glass time-delay differential equation which is defined by

    dx(t)/dt = 0.2x(t-tau)/(1+x(t-tau)^10) - 0.1x(t)

    When x(0) = 1.2 and tau = 17, we have a non-periodic and non-convergent time series that is very sensitive to initial conditions. (We assume x(t) = 0 when t < 0.)

    load mgdata.dat
    a = mgdata;
    time = a(:, 1);
    x_t = a(:, 2);
    plot(time, x_t);
    xlabel('Time (sec)','fontsize',10); ylabel('x(t)','fontsize',10);
    title('Mackey-Glass Chaotic Time Series','fontsize',10);
    

    Preprocessing the Data

    Now we want to build an ANFIS that can predict x(t+6) from the past values of this time series, that is, x(t-18), x(t-12), x(t-6), and x(t). Therefore the training data format is

    [x(t-18), x(t-12), x(t-6), x(t); x(t+6]

    From t = 118 to 1117, we collect 1000 data pairs of the above format. The first 500 are used for training while the others are used for checking. The plot shows the segment of the time series where data pairs were extracted from. The first 100 data points are ignored to avoid the transient portion of the data.

    trn_data = zeros(500, 5);
    chk_data = zeros(500, 5);
    
    % prepare training data
    trn_data(:, 1) = x_t(101:600);
    trn_data(:, 2) = x_t(107:606);
    trn_data(:, 3) = x_t(113:612);
    trn_data(:, 4) = x_t(119:618);
    trn_data(:, 5) = x_t(125:624);
    
    % prepare checking data
    chk_data(:, 1) = x_t(601:1100);
    chk_data(:, 2) = x_t(607:1106);
    chk_data(:, 3) = x_t(613:1112);
    chk_data(:, 4) = x_t(619:1118);
    chk_data(:, 5) = x_t(625:1124);
    
    index = 119:1118; % ts starts with t = 0
    plot(time(index), x_t(index));
    xlabel('Time (sec)','fontsize',10); ylabel('x(t)','fontsize',10);
    title('Mackey-Glass Chaotic Time Series','fontsize',10);
    

    Building the ANFIS Model

    We use GENFIS1 to generate an initial FIS matrix from training data. The command is quite simple since default values for MF number (2) and MF type ('gbellmf') are used:

    fismat = genfis1(trn_data);
    
    % The initial MFs for training are shown in the plots.
    for input_index=1:4,
        subplot(2,2,input_index)
        [x,y]=plotmf(fismat,'input',input_index);
        plot(x,y)
        axis([-inf inf 0 1.2]);
        xlabel(['Input ' int2str(input_index)],'fontsize',10);
    end
    

    There are 2^4 = 16 rules in the generated FIS matrix and the number of fitting parameters is 108, including 24 nonlinear parameters and 80 linear parameters. This is a proper balance between number of fitting parameters and number of training data (500). The ANFIS command looks like this:

    [trn_fismat,trn_error] = anfis(trn_data, fismat,[],[],chk_data)

    To save time, we will load the training results directly.

    After ten epochs of training, the final MFs are shown in the plots. Note that these MFs after training do not change drastically. Obviously most of the fitting is done by the linear parameters while the nonlinear parameters are mostly for fine- tuning for further improvement.

    % load training results
    load mganfis
    
    % plot final MF's on x, y, z, u
    for input_index=1:4,
        subplot(2,2,input_index)
        [x,y]=plotmf(trn_fismat,'input',input_index);
        plot(x,y)
        axis([-inf inf 0 1.2]);
        xlabel(['Input ' int2str(input_index)],'fontsize',10);
    end
    

    Error Curves

    This plot displays error curves for both training and checking data. Note that the training error is higher than the checking error. This phenomenon is not uncommon in ANFIS learning or nonlinear regression in general; it could indicate that the training process is not close to finished yet.

    % error curves plot
    close all;
    epoch_n = 10;
    plot([trn_error chk_error]);
    hold on; plot([trn_error chk_error], 'o'); hold off;
    xlabel('Epochs','fontsize',10);
    ylabel('RMSE (Root Mean Squared Error)','fontsize',10);
    title('Error Curves','fontsize',10);
    

    Comparison

    This plot shows the original time series and the one predicted by ANFIS. The difference is so tiny that it is impossible to tell one from another by eye inspection. That is why you probably see only the ANFIS prediction curve. The prediction errors must be viewed on another scale.

    input = [trn_data(:, 1:4); chk_data(:, 1:4)];
    anfis_output = evalfis(input, trn_fismat);
    index = 125:1124;
    plot(time(index), [x_t(index) anfis_output]);
    xlabel('Time (sec)','fontsize',10);
    

    Prediction Errors of ANFIS

    Prediction error of ANFIS is shown here. Note that the scale is about a hundredth of the scale of the previous plot. Remember that we have only 10 epochs of training in this case; better performance is expected if we have extensive training.

    diff = x_t(index)-anfis_output;
    plot(time(index), diff);
    xlabel('Time (sec)','fontsize',10);
    title('ANFIS Prediction Errors','fontsize',10);
    

  • 相关阅读:
    第6章学习小结
    第5章学习小结
    python输入年月日,得出已经过了多少天?
    报错:"Windows安装程序无法将Windows配置为在此计算机的……""windows无法完成安装。若要在此计算机上安装windows,请……"解决方案
    Magic Book Pro 2019 Intel版 BIOS升级失败-重启后没有升级过程,解决方案
    为Linux rm删除命令添加一次提示,防误操作;提高安全性。
    UOS博客被攻击后——追根溯源-Wordpress-反弹shell-本地提权-Ubuntu
    Snort-IPS-入侵防御系统安装及部署小记
    Loading ips.rules: FATAL: ips.rules:3 undefined variable name: RULE_PATH. Fatal Error, Quitting..,Snort导入规则集后无法启动,官网教程Ubuntu安装Snort执行snort -c /usr/local/etc/snort/snort.lua出现问题
    [闲聊]Mac-QQ:“这很漂亮,不是吗?”
  • 原文地址:https://www.cnblogs.com/dyl-HelloWorld/p/6058009.html
Copyright © 2011-2022 走看看