主要内容

动态系统的正则辨识

这个例子展示了正则化识别线性和非线性模型的好处。

什么是正则化

当使用测量数据识别动态系统时,参数估计值确定为:

$$\hat{\theta} = arg \min_\theta V_N(\theta)$$

标准通常是预测误差的加权二次范数美元$ \ varepsilon (t) \θ).一个l2美元将正则化准则修改为:

$ $ \帽子\θ=θV_N arg \ min_ \ \θ)+ \λ(\θ,θ\ ^ *)^ TR(\θ,θ\ ^ *)$ $

一个常见的特殊情况是当$ \θ^ * = 0,R =我美元.这叫做岭回归在统计学中,例如,见the命令在统计和机器学习工具箱™。

考虑正则化的一个有用的方法是$ \θ^ * $表示关于未知参数向量的先验知识美元\λ* R $描述了对这一知识的信心。(较大的美元\λ* R $,置信度较高)。在贝叶斯环境中的正式解释是\θ美元有一个先验分布这是带均值的高斯分布$ \θ^ * $协方差矩阵美元\σ^ 2 / \λR ^ {1} $,在那里\σ^ 2美元是创新的方差。

因此,正则化的使用可以与系统的一些先验信息联系起来。这个可以很软,就像这个系统是稳定的。正则化变量\λ美元而且R美元可以被视为在偏差和方差之间找到最佳权衡的好模型复杂性的工具。正则化常数\λ美元而且R美元都是由选项表示的λ而且R分别在系统识别工具箱™。的选择$ \θ^ * $名义上的正则化的选择。

FIR建模中的偏差-方差权衡

考虑用FIR模型估计线性系统的脉冲响应的问题:

$ $ y (t) = \总和^ {nb} _ {k = 0} g (k) u (tk) $ $

这些由命令估计:M = arx(z,[0 nb 0]).顺序的选择偏差(大需要捕获缓慢衰减的脉冲响应而没有太多的误差)和方差(大给出了许多参数来估计,从而给出了较大的方差)。

让我们用一个模拟的例子来说明它。我们选择一个简单的二阶巴特沃斯滤波器作为系统:

$ $ G (z) = \压裂{0.02008 + 0.04017 z ^ 1 + 0.02008 z ^ 2} {1 - 1.561 z ^ 1 + 0.6414 z ^ 2} $ $

其脉冲响应如图1所示:

trueSys = idtf([0.02008 0.04017 0.02008],[1 -1.561 0.6414],1);[y0,t] =冲量(trueSys);情节(t, y0)包含(的时间(秒)), ylabel (“振幅”)、标题(的脉冲响应

图1:真脉冲响应。

脉冲响应在小于50个采样后衰减为零。让我们从系统产生的数据来估计它。我们以低通滤波白噪声作为输入来模拟系统,并在输出中加入一个方差为0.0025的小白噪声输出扰动。采集样本1000个。该数据保存在regularizationExampleData中。如图2所示。

负载regularizationExampleData.mateData情节(eData)

图2:用于估计的数据。

确定一个好的值我们基本上必须尝试一些值,并通过一些验证程序来评估哪个是最好的。这可以通过几种方式来实现,但由于我们知道这种情况下的真实系统,我们可以通过尝试所有模型来确定理论上最好的可能值nb = 1,…,50然后找出哪一个最符合真正的脉冲响应。这样的测试说明了这一点Nb = 13给出脉冲响应的最佳误差范数(mse = 0.2522)。这个估计的脉冲响应与真实的脉冲响应一起显示在图3中。

Nb = 13;m13 = arx(eData,[0 nb 0]);
[y13,~,~,y13sd] =脉冲(m13,t);情节(t, y0, t, y13)包含(的时间(秒)), ylabel (“振幅”)、标题(的脉冲响应)传说(“真正的系统”13阶FIR模型

图3:真正的脉冲响应和阶数估计值Nb = 13

尽管有1000个数据点具有非常好的信噪比,但估计并不令人印象深刻。响应的不确定性也相当大,响应的1个标准差值表明。原因是低通输入激励差。

y13情节(t, y0, t, t, y13 + y13sd,“:”t y13-y13sd“:”)包含(的时间(秒)), ylabel (“振幅”)、标题(的脉冲响应)传说(“真正的系统”13阶FIR模型“界限”

图4:估计响应,置信范围对应于1 s.d。

因此,让我们尝试通过岭回归对50阶FIR模型达到一个良好的偏方差权衡。使用arxOptions配置正则化常数。对于这个练习,我们应用一个简单的惩罚$ | | \θ| | ^ 2美元

opt = arxOptions;aopt. regulalizing . lambda = 1;m50r = arx(eData, [0 50 0], apopt);

得到的估计值对真实脉冲响应的误差范数为0.1171,如图5所示,并附有置信界限。

[y50r,~,~,y50rsd] =脉冲(m50r,t);y50r情节(t, y0, t, t, y50r + y50rsd,“:”t y50r-y50rsd“:”)包含(的时间(秒)), ylabel (“振幅”)、标题(的脉冲响应)传说(“真正的系统”“50次正则化估计”

图5:真脉冲响应和脊正则化阶估计Nb = 50

显然,即使是这种简单的正则化选择,也比选择没有正则化的最佳FIR顺序提供了更好的偏差-方差权衡。

FIR模型正则化常数的自动确定

我们可以做得更好。通过使用真正的脉冲响应衰减为零和平滑的见解,我们可以定制的选择美元$ R, \λ对数据。这是由arxRegul函数。

[L,R] = arxRegul(eData,[0 50 0],arxRegulOptions(“RegularizationKernel”“TC”));aopt. regulalizing . lambda = L;aopt. regulalizing .R = R;mrtc = arx(eData, [0 50 0], apopt);[ytc,~,~,ytcsd] =脉冲(mrtc,t);

arxRegul使用fmincon从优化工具箱™中计算与正则化内核(这里是“TC”)相关的超参数。如果没有“优化工具箱”,则使用简单的Gauss-Newton搜索方案;使用“高级”。的选项arxRegulOptions显式地选择搜索方法。估计的超参数然后用于导出的值R美元而且\λ美元

的估计值R美元而且\λ美元导致误差范数为0.0461,响应如图6所示。也实现了这种调优的正则化冲动命令。如图所示,与非正则估计相比,对脉冲响应以及方差的拟合大大降低。价格是响应估计中的一个偏差,对于本例来说似乎不重要。

情节(t, y0, t, ytc, t, ytc + ytcsd,“:”t ytc-ytcsd“:”)包含(的时间(秒)), ylabel (“振幅”)、标题(的脉冲响应)传说(“真正的系统”50阶调优正则化估计

图6:真正的脉冲响应和调优的正则化阶估计Nb = 50

使用正则化arx模型估计状态空间模型

考虑一个系统m0,是一个带彩色测量噪声的30阶线性系统:

$$y(t) = G(q)u(t) + H(q)e(t)$$

在哪里G(问)输入到输出的传递函数和H(问)是扰动传递函数。该系统存储在regularizationExampleData中。Mat数据文件。的脉冲响应G(问)而且H(问)如图7所示。

负载regularizationExampleData.matm0m0H = noise2meas(m0);%为模型提取的噪声分量[yG,t] =脉冲(m0);yH =冲量(m0H,t);clf subplot(211) plot(t, yG) title(G(q)的脉冲响应), ylabel (“振幅”) subplot(212) subplot(212) plot(t, yH)H(q)的脉冲响应), ylabel (“振幅”)包含(的时间(秒)

图7:的脉冲响应G(问)(上)和H(问)(底部)。

我们通过模拟收集了210个数据点m0用白噪声输入u方差为1,噪声水平e方差为0.1。该数据保存在regularizationExampleData中。垫,并绘制在下面。

负载regularizationExampleData.matm0simdataclf情节(m0simdata)

图8:用于估计的数据。

的脉冲响应m0从这些数据中,我们可以自然地采用创新形式的状态空间模型(或等效的ARMAX模型),并使用冲动像以前一样命令。为了计算状态空间模型,我们可以使用如下语法:

Mk = sest(m0simdata, k,“t”1);

关键是要确定好顺序k.有两种常用的方法:

  • 交叉验证CV:估计K = 1,…,maxo使用前半部分的数据Ze = m0simdata(1:50 0)然后评估与后半部分数据的拟合Zv = m0simdata(151:end)使用比较命令:[~,fitk] = compare(zv, mk, compareOptions('InitialCondition', 'z')).确定顺序k这样能最大限度地贴合。然后使用整个数据记录重新估计模型。

  • 使用赤池标准AIC:估计订单的模型K = 1,…,maxo使用整个数据集,然后选择最小化的模型aic(可)

将这些技术应用于具有最大次序的数据Maxo = 30表明简历选择了K = 15和AIC的选择K = 3

“Oracle”测试:除了CV和AIC测试,还可以检查顺序k的真脉冲响应之间的拟合G(问)(或H(问)),使估计模型最大化。这当然需要对真实系统的了解m0这是不切实际的。但是,如果我们对我们的例子进行比较m0是已知的,我们找到了吗K = 12给出估计模型的脉冲响应与的脉冲响应的最佳拟合m0(= | G (q) |)。类似地,我们发现K = 3给出了估计模型的噪声分量的脉冲响应与模型的噪声分量的脉冲响应的最佳拟合m0(= | H (q) |)。Oracle测试设置了一个参考点,用于比较使用各种顺序和正则化参数生成的模型的质量。

让我们比较不同顺序选择条件下计算的脉冲响应:

M3 = ssest(m0simdata, 3,“t”1);M12 = ssest(m0simdata, 12,“t”1);M15 = ssest(m0simdata, 15,“t”1);Y3 =冲量(m3, t);Y12 =冲量(m12, t);Y15 =冲量(m15, t);plot(t,yG, t,y12, t,y15, t,y3) xlabel(的时间(秒)), ylabel (“振幅”)、标题(的脉冲响应)传说(“真正的G (q)”...sprintf ('Oracle选项:%2.4g%%'100 * (1-goodnessOfFit (yG日元,“NRMSE”))),...sprintf ('简历选择:%2.4g%%'100 * (1-goodnessOfFit (y15、yG、“NRMSE”))),...sprintf ('AIC选项:%2.4g%%'100 * (1-goodnessOfFit (y3、yG、“NRMSE”))))

图9:的真脉冲响应G(问)与各阶估计模型进行比较。

yH3 =脉冲(noise2meas(m3), t);yH15 =脉冲(noise2meas(m15), t);plot(t,yH, t,yH3, t,yH15, t,yH3)的时间(秒)), ylabel (“振幅”)、标题(的脉冲响应)传说(“真正的H (q)”...sprintf ('Oracle选项:%2.4g%%'100 * (1-goodnessOfFit (yH3,决断力,“NRMSE”))),...sprintf ('简历选择:%2.4g%%'100 * (1-goodnessOfFit (yH15,决断力,“NRMSE”))),...sprintf ('AIC选项:%2.4g%%'100 * (1-goodnessOfFit (yH3,决断力,“NRMSE”))))

图10:的真脉冲响应H(问)比较了各阶估计噪声模型。

我们看到,对于的匹配度可以达到83%G(问)但是顺序选择过程可能无法找到最佳的顺序。

然后我们转向正则化可以得到什么。我们通过以下方法估计一个相当高阶的正则化arx模型:

opt = arxOptions;[Lambda, R] = arxRegul(m0simdata, [5 60 0], arxRegulOptions(“RegularizationKernel”“TC”));aopt. regulalizing .R = R;aopt. regulalizing .Lambda = Lambda;Mr = arx(m0simdata, [5 60 0], apopt);核磁共振=噪声2meas(mr);Ymr =冲量(mr, t);yHmr =脉冲(nmr, t);流(ARX模型的拟合优度为:%2.4g%%\n'100 * (1-goodnessOfFit (ymr、yG、“NRMSE”)))流(ARX模型噪声分量的拟合优度为:%2.4g%%\n'100 * (1-goodnessOfFit (yHmr,决断力,“NRMSE”)))
ARX模型拟合优度为:83.12% ARX模型噪声成分拟合优度为:78.71%

事实证明,这个正则化的ARX模型与真实情况吻合G(问)这比甲骨文的选择还要好。适合H(问)大于80%,这也优于Oracle选择的最佳噪声模型的顺序。可以这样说先生是一个高阶(60个状态)模型,将其与低阶状态空间模型进行比较是不公平的。但是这个高阶模型可以简化为,比如说,7阶balred命令(需要控制系统工具箱™):

Mred7 = balred(idss(mr),7);Nmred7 = noise2meas(mred7);Y7mr =冲量(mred7, t);y7Hmr =脉冲(nmred7, t);

图11和12显示了正则化和降序正则化模型与Oracle选择的状态空间顺序的比较党卫军没有任何准确性的损失。

plot(t,yG, t,y12, t,ymr, t,y7mr) xlabel(的时间(秒)), ylabel (“振幅”)、标题(的脉冲响应)传说(“真正的G (q)”...sprintf ('Oracle选项:%2.4g%%'100 * (1-goodnessOfFit (yG日元,“NRMSE”))),...sprintf ('高阶正则化:%2.4g%%'100 * (1-goodnessOfFit (ymr、yG、“NRMSE”))),...sprintf ('减少订单:%2.4g%%'100 * (1-goodnessOfFit (y7mr、yG、“NRMSE”))))

图11:正则化模型与Oracle选择的比较G(问)

plot(t,yH, t,yH3, t,yHmr, t,y7Hmr) xlabel(的时间(秒)), ylabel (“振幅”)、标题(的脉冲响应)传说(“真正的H (q)”...sprintf ('Oracle选项:%2.4g%%'100 * (1-goodnessOfFit (yH3,决断力,“NRMSE”))),...sprintf ('高阶正则化:%2.4g%%'100 * (1-goodnessOfFit (yHmr,决断力,“NRMSE”))),...sprintf ('减少订单:%2.4g%%'100 * (1-goodnessOfFit (y7Hmr,决断力,“NRMSE”))))

图12:正则化模型与Oracle选择的比较H(问)

一个自然的问题是,ARX模型中顺序的选择是否像状态空间模型中的顺序一样敏感党卫军.简单的测试,例如:Arx (z,[10 50 0], apopt)的拟合只显示出微小的变化G(问)

用正则化约简技术估计状态空间模型

上述估计高阶ARX模型的步骤,然后转换到状态空间,并简化到所需的顺序,可以使用ssregest命令。ssregest大大简化了这一过程,同时也促进了其他有用的选项,如搜索最优顺序和精细调整模型结构的馈电和延迟值的规范。这里我们简单地重新估计了类似于mred7使用ssregest

opt = ssregestOptions(“ARXOrder”,[5 60 0]);Mred7_direct = ssregest(m0simdata, 7,“引线”, true, opt);比较(m0simdata, mred7, mred7_direct)

图13:比较状态空间模型对估计数据的响应。

H = impulseplot(mred7, mred7_direct, 40);showConfidence (h, 1)% 1 s.d。“零间隔”持有s = stem(t,yG,“r”);s.DisplayName =“真正的G (q)”;传奇(“显示”

图14:状态空间模型的脉冲响应比较。

在图14中,仅显示了模型的置信界mred7_direct因为它不是为模型计算的mred7.您可以使用translatecov为任意变换生成置信边界的命令balred)所识别的模型。还要注意ssregest命令不要求您提供“ARXOrder”选项值。当没有显式设置值时,它根据数据长度自动进行选择。

灰盒模型中的基本偏差-方差权衡

这里讨论的灰盒估计是先验信息与观测数据中的信息相遇的典型情况。在这些信息源之间获得良好的平衡是很好的,而正则化是实现这一点的主要工具。

考虑一个直流电动机(见例如:iddemo7)具有静态增益G角速度和时间常数\τ美元

$$G(s) = \frac{G}{s(1+s\tau)}$$

在状态空间形式中,我们有:

$$ \dot{x_1} = x_2 $$

$$ \dot{x_2} = -1/\tau \cdot x_2 $$

$$ y = x + e $$

在哪里$x = [x_1;x_2)美元状态向量是由角度组成的吗x_1美元还有速度x_2美元.根据输出方程,我们观察噪声中的两种状态。

根据先前的知识和经验,我们认为G美元大约是4\τ美元大约是1。我们收集motorData来自系统的400个数据点,有大量的噪声(标准差为e每个分量都是50。我们还保存了同一模型的无噪声仿真数据,以便进行比较。数据如图15所示。

负载regularizationExampleData.matmotorDatamotorData_NoiseFreet = motorData.SamplingInstants;subplot(311) plot(t,[motorData_NoiseFree.y(:,1),motorData.y(:,1)]) ylabel(“输出1”) subplot(312) plot(t,[motorData_NoiseFree.y(:,2),motorData.y(:,2)]) ylabel(“输出2”) subplot(313) plot(t,motorData_NoiseFree.u)%输入对于两个数据集是相同的ylabel (“输入”)包含(的时间(秒)

图15:将用于灰盒估计的噪声数据叠加在用于资格评定的无噪声模拟数据上。从上到下依次为:角度、角速度、输入电压。

本模拟中的真实参数值为G= 2.2和\τ美元= 0.8。为了估计模型,我们创建了一个idgrey模型文件DCMotorODE.m

类型(“DCMotorODE”
function [A,B,C,D] = DCMotorODE(G,Tau,Ts) % DCMotorODE ODE文件,表示由增益G和时间常数Tau参数化%的直流电机动态。% % [A,B,C,D,K,X0] = DCMOTORODE(G,Tau,Ts)返回具有时间常数Tau和静态增益G的dc电机的状态空间矩阵%。采样%时间为Ts。% %如果输入参数Ts %为零,该文件返回连续时间表示。如果Ts>0,则返回离散时间表示。参见IDGREY, GREYEST。版权所有The MathWorks, Inc.A = [0 1;0 -1/Tau];B = [0;G /τ];C =眼睛(2);D = [0;0]; if Ts>0 % Sample the model with sample time Ts s = expm([[A B]*Ts; zeros(1,3)]); A = s(1:2,1:2); B = s(1:2,3); end

一个idgrey对象被创建为:

mi = idgrey(@DCMotorODE,{‘G’4;“τ”1},“cd”{}, 0);

其中我们插入了猜测的参数值作为初始值。将该模型调整到观测数据中的信息感动的命令:

m =灰色(motorData, mi)
m =连续时间线性灰箱模型定义为@DCMotorODE功能:dx / dt = x (t) + B u e (t) + K (t) y (t) = C x (t) + D u (t) + e (t) = (x1, x2) x1 0 1 x2 0 -1.741 B = u1 x1 0 x2 3.721 C y2 = (x1, x2)日元1 0 0 1 D = u1 y1 y2 0 K = y₁y2 x1 0 0 x2 0 0模型参数:G = 2.138τ= 0.5745参数化:颂歌功能:@DCMotorODE(用参数表示连续和离散方程)干扰组件:没有一个初始状态:“汽车”的免费系数:2参数及其不确定性使用“getpvec”、“getcov”。状态:在时域数据“motorData”上使用GREYEST进行估计。拟合估计数据:[29.46;4.167]% FPE: 6.074e+06, MSE: 4908

该模型有参数\τ美元= 0.57和G= 2.14并重新生成数据,如图16所示。

copt = compareOptions(“InitialCondition”“z”);[ymi, fiti] = compare(motorData, mi, copt);[ym, fit] = compare(motorData, m, copt);t = motorData.SamplingInstants;次要情节(211)情节(t) [motorData.y (: 1), ymi.y (: 1), ym.y(: 1)])轴ylabel (“输出1”)({传奇测量输出的...sprintf (初始:% % % 2.4克的, fiti (1)),...sprintf (“估计:% % % 2.4克”符合(1))},...“位置”“BestOutside”)次要情节(212)情节(t) [motorData.y (:, 2), ymi.y (:, 2), ym.y (:, 2)]) ylabel (“输出2”)轴传奇({测量输出的...sprintf (初始:% % % 2.4克的fiti (2)),...sprintf (“估计:% % % 2.4克”fit (2))},...“位置”“BestOutside”

图16:初始模型和估计模型的测量输出和模型输出。

在这种模拟情况下,我们还可以访问无噪声数据(motorData_NoiseFree),并在图17中描述与无噪声数据的拟合。

[ymi, fiti] = compare(motorData_NoiseFree, mi, copt);[ym, fit] = compare(motorData_NoiseFree, m, copt);次要情节(211)情节(t) [motorData_NoiseFree.y (: 1), ymi.y (: 1), ym.y(: 1)])轴ylabel (“输出1”)({传奇“无噪声的输出”...sprintf (初始:% % % 2.4克的, fiti (1)),...sprintf (“估计:% % % 2.4克”符合(1))},...“位置”“BestOutside”)次要情节(212)情节(t) [motorData_NoiseFree.y (:, 2), ymi.y (:, 2), ym.y (:, 2)]) ylabel (“输出2”)轴传奇({“无噪声的输出”...sprintf (初始:% % % 2.4克的fiti (2)),...sprintf (“估计:% % % 2.4克”fit (2))},...“位置”“BestOutside”

图17:初始模型和估计模型的无噪声输出和模型输出。

我们可以查看参数估计,并看到噪声数据本身给出的估计与我们先前的物理信息不太一致。为了将数据信息与先验信息合并,我们使用正则化:

opt = greyestOptions;opt. regulalizing . lambda = 100;opt. regulalizing . r = [1, 1000];第二个参数比第一个参数更广为人知opt.Regularization.Nominal =“模型”;mr = greyest(motorData, mi, opt)
=先生连续时间线性灰箱模型定义为@DCMotorODE功能:dx / dt = x (t) + B u e (t) + K (t) y (t) = C x (t) + D u (t) + e (t) = (x1, x2) x1 0 1 x2 0 -1.119 B = u1 x1 0 x2 2.447 C y2 = (x1, x2)日元1 0 0 1 D = u1 y1 y2 0 K = y₁y2 x1 0 0 x2 0 0模型参数:G = 2.187τ= 0.8938参数化:颂歌功能:@DCMotorODE(用参数表示连续和离散方程)干扰组件:没有一个初始状态:“汽车”的免费系数:2参数及其不确定性使用“getpvec”、“getcov”。状态:在时域数据“motorData”上使用GREYEST进行估计。拟合估计数据:[29.34;3.848]% FPE: 6.135e+06, MSE: 4933

我们在这里告诉估计过程,我们对初始参数值有一定的信心,并且更相信我们的猜测\τ美元比我们猜测的要多G.得到的正则化估计先生将这些信息与测量数据中的信息一起考虑。他们在。的帮助下一起称重λ而且R.图18显示了生成的模型如何重现输出。显然,正则化模型比初始模型(参数被“吸引”)和非正则化模型都做得更好。

[ymr, fitr] = compare(motorData_NoiseFree, mr, copt);次要情节(211)情节(t) [motorData_NoiseFree.y (: 1), ymi.y (: 1), ym.y (: 1), ymr.y(: 1)])轴ylabel (“输出1”)({传奇“无噪声的输出”...sprintf (初始:% % % 2.4克的, fiti (1)),...sprintf (“估计:% % % 2.4克”符合(1)),...sprintf (“正规化:% % % 2.4克”,实地了解(1))},...“位置”“BestOutside”)次要情节(212)情节(t) [motorData_NoiseFree.y (:, 2), ymi.y (:, 2), ym.y (:, 2), ymr.y (:, 2)]) ylabel (“输出2”)轴传奇({“无噪声的输出”...sprintf (初始:% % % 2.4克的fiti (2)),...sprintf (“估计:% % % 2.4克”, (2)),...sprintf (“正规化:% % % 2.4克”fitr (2))},...“位置”“BestOutside”

图18:初始、估计和正则化模型的无噪声测量输出和模型输出。

与非正则化估计相比,正则化估计也减少了参数方差。的博德图上的更严格的置信限表明了这一点先生与…相比

clf showConfidence (bodeplot (m,先生,logspace (,100 1.4)), 3)% 3 s.d.区域传奇(“显示”

图19:波德图而且先生有置信边界

这说明了合并先验信息和测量信息是如何工作的。在实践中,我们需要一个过程来调优的大小λ到现有的信息源。常用的一种方法是使用交叉验证.那就是:

  • 将数据分成两部分——估计数据和验证数据

  • 的各种值的估计数据计算正则化模型λ

  • 评估这些模型重现验证数据的效果:将模型提供的NRMSE拟合值制成表格比较命令或goodnessOfFit命令。

  • 选这个λ这给了模型与验证数据的最佳拟合。

使用正则化来鲁棒大型非线性模型

正则化的另一个用途是在数值上稳定大型(通常是非线性)模型的估计。我们已经给出了数据记录nldata它具有非线性动力学。我们尝试神经网络特性的非线性arx模型,越来越多的单元:

负载regularizationExampleData.matnldata选择nlarxOptions(“SearchMethod”“lm”);m10 = nlarx(nldata, [1 2 1], idSigmoidNetwork(10), opt);m20 = nlarx(nldata, [1 2 1], idSigmoidNetwork(20), opt);m30 = nlarx(nldata, [1 2 1], idSigmoidNetwork(30), opt);
比较(nldata, m10, m20)%比较m10、m20的反应与测量反应

图20:模型比较图m10而且m20

流(参数个数(m10, m20, m30): %s\n'...Mat2str ([nparams(m10),nparams(m20),nparams(m30)]))比较(nldata, m30, m10, m20)比较所有三个模型轴([1 800 -57 45])
参数个数(m10, m20, m30): [54 104 154]

图21:模型比较图m10m20而且m30

前两个模型显示出良好且不断改善的拟合。但是当估计154个参数时m30,似乎出现了数值问题。然后我们可以应用少量的正则化来得到更好的条件矩阵:

opt. regulalizing . lambda = 1e-8;m30r = nlarx(nldata, [1 2 1], idSigmoidNetwork(30), opt);比较(nldata, m30r, m10, m20)

图22:模型比较图m10m20正则化模型m30r

有30个神经元的模型对估计数据的拟合有显著提高。如前所述,系统地搜索λ要使用的值将需要交叉验证测试。

结论

我们讨论了正则化对FIR模型、线性灰盒模型和非线性ARX模型估计的好处。正则化对所识别模型的质量有重要的影响,提供正则化常数λ而且R都是适当的选择。对于ARX模型,这可以很容易地使用arxRegul函数。这些自动选择也会输入专用的状态空间估计算法ssregest

对于其他类型的估计,必须依赖基于交叉验证的搜索来确定λ.对于结构化模型,例如灰盒模型,R可用于表示可靠性的参数的相应初始值。然后,使用名义上的正则化选项,您可以将参数值的先验知识与数据中的信息合并。

正则化选项可用于所有线性和非线性模型,包括传递函数和过程模型,状态空间和多项式模型,非线性ARX, Hammerstein-Wiener和线性/非线性灰盒模型。