
MATLAB环境下基于Takagi-Sugeno-Kang模糊神经网络的Hopkins-SIR数据集时间序
列预测方法
最近在折腾时间序列预测的时候,发现TSK模糊神经网络这个组合拳挺有意思的。就拿伊朗的新冠
死亡数据(hopkinsirandeath.txt)当例子,咱们一起看看怎么用MATLAB玩转这个预测模型。
先看数据长啥样。把三个数据集都加载进来转置一下,方便后续处理:
```matlab
dat = load('hopkinsirandeath.txt')';
dat1 = load('hopkinsiranconfirmed.txt')';
dat2 = load('hopkinsiranrecovered.txt')';
```
这里转置操作主要是为了适配后续神经网络输入需要的维度格式。实际用的时候建议先做个归一
化,毕竟不同指标的数值量级可能差得离谱。
接下来是核心的TSK模型搭建。MATLAB自带的Fuzzy Logic工具箱里有现成的工具,咱们用genfis生
成初始模糊推理系统:
```matlab
numMFs = 3; % 隶属函数个数
inputDelay = 1:2; % 输入延迟
tskOpt = genfisOptions('SubtractiveClustering');
initialFIS = genfis(dat(:,1:end-1), dat(:,2:end), tskOpt);
```
这段代码有几个需要注意的点:inputDelay设定了用前两个时间步的数据预测下一步,相当于构建
了一个动态系统。genfisOptions这里用了减法聚类来自动确定规则数,比手动指定规则更智能些。
训练环节用的是经典的ANFIS算法:
```matlab
epochs = 50;
trnOpt = anfisOptions('InitialFIS', initialFIS, 'EpochNumber', epochs);
trnFIS = anfis(dat(:,1:end-1), dat(:,2:end), trnOpt);
```
训练过程中可以实时观察误差下降曲线。如果发现误差没明显下降,可能需要调整隶属函数类型或
者增加训练轮次。这里有个小技巧:把训练过程包装在try-catch块里,防止程序崩掉。