基于机器学习的双罐系统辨识
本示例演示了如何对非线性双储罐系统的黑盒动态模型进行辨识。

对于该系统,输入 是指施加在水泵上的电压 [V],该电压会驱动水流流入上水箱。水从上水箱底部的孔中流过,填满下水箱。双罐系统的输出值 表示下罐的液位 [m]。
该示例使用了包含两个储罐系统 3000 个输入-输出采样值的测量数据,这些数据是在 0.2 秒的采样时间下生成的。加载数据集并创建一个 iddata 对象。
load twotankdata z1f = iddata(y,u,0.2,'Name','Two-tank system');
该数据集也在以下示例中使用。
Two Tank System: C MEX File Modeling of Time-Continuous SISO System - 非线性灰盒模型估计,其中假设存在描述该系统的物理方程
A Tutorial on Identification of Nonlinear ARX and Hammerstein-Wiener Models - 关于使用非线性 ARX 模型和哈默斯坦-维纳模型进行黑盒建模的入门示例。
本示例介绍如何利用非线性 ARX 模型结合回归树集成模型进行黑盒建模。因此,不假设读者已了解实际的物理定律。
回归树集成模型是一种非参数模型,其结构是由多棵回归树按权重组合而成的。每棵回归树都由决策节点和叶节点组成。决策节点代表待测试属性(特征)的某个值。叶节点代表与该决策相关的值 [1]。通过将数据集划分为越来越小的组件,递归地估计回归模型。通过组合多个回归树,可以提高回归树集成模型的预测性能。
预处理数据
在对模型进行估计之前,应先将数据划分为估计集和验证集,以此对数据进行预处理。然后,对数据进行滤波,以去除高频噪声。
将数据集分成两个大小相等的子集。您使用数据集 z1 对模型进行估计,并使用数据集 z2 对模型进行验证。
z1 = z1f(1:1500); z2 = z1f(1501:3000); plot(z1,z2) legend('Estimation','Validation');

从图中可以看出,输出数据中存在高频噪声。应用低通滤波器来消除这种噪声。
z1f = idfilt(z1,3,0.066902); z2f = idfilt(z2,3,0.066902);
通过从每个数据集的开头截去初始数据点,消除滤波器初始条件对数据的影响。
z1f = z1f(20:end); z2f = z2f(20:end);
绘制原始估计数据和相应的滤波数据。
plot(z1(20:end),z1f) legend('Estimation (unfiltered)','Estimation (filtered)', ... 'Location','best')

绘制原始验证数据及其对应的过滤后数据。
plot(z2(20:end),z2f) legend('Validation (unfiltered)','Validation (filtered)', ... 'Location','best')

模型估计与验证
使用默认设置创建一个决策树集成映射对象。您可以估计将此非线性作为输出函数的非线性 ARX 模型。使用此映射对象需要 Statistics and Machine Learning Toolbox™ 软件。
ens = idTreeEnsemble;
对同时包含输入和输出自变量的非线性 ARX 模型进行估计。
mdl1 = nlarx(z1f,[30 30 0],ens);
仅使用输入自变量对非线性 ARX 模型进行估计。
mdl2 = nlarx(z1f,[0 150 0],ens);
将估计模型的输出结果与实测估计数据进行比较。
compare(z1f,mdl1,mdl2)

将估计模型的输出结果与实测验证数据进行比较。
compare(z2f,mdl1,mdl2)
