主要内容

动态系统的正则化辨识

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

什么是正则化

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

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

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

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

一个常见的特例是当$ \θ^ * = 0,R =我美元.这叫做岭回归在统计学中,例如,see 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]).顺序的选择偏差(大需要捕获缓慢衰减的脉冲响应没有太多的错误)和方差(大给出了许多参数来估计,这给了很大的方差)。

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

$ $ 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中。mat文件,如图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美元

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

结果估计对真实脉冲响应的误差范数为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],采用);[ytc,~,~,ytcsd] =脉冲(mrtc,t);

arxRegul使用fmincon从优化工具箱™中计算与正则化内核(此处为“TC”)相关的超参数。如果优化工具箱不可用,则使用简单的高斯-牛顿搜索方案代替;使用“高级”。的SearchMethod选项arxRegulOptions明确地选择搜索方法。估计的超参数然后用来推导的值R美元而且\λ美元

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

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

图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 (“振幅”)子情节(212)情节(t, yH)标题(' H(q)的脉冲响应'), ylabel (“振幅”)包含(的时间(秒)

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

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

负载regularizationExampleData.matm0simdataclf情节(m0simdata)

图8:用于估计的数据。

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

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

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

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

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

将这些技术应用于最大阶数据Maxo = 30显示CV选择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 = sest(m0simdata, 15,“t”1);Y3 =脉冲(m3, t);Y12 =脉冲(m12, t);Y15 =冲量(m15, t);plot(t,yG, t,y12, t,y15, t,y3)的时间(秒)), ylabel (“振幅”)、标题(的脉冲响应)传说(“真正的G (q)”...sprintf ('Oracle选择:%2.4g%%'100 * (1-goodnessOfFit (yG日元,“NRMSE”))),...sprintf ('CV选择:%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) xlabel(的时间(秒)), ylabel (“振幅”)、标题(的脉冲响应)传说(“真正的H (q)”...sprintf ('Oracle选择:%2.4g%%'100 * (1-goodnessOfFit (yH3,决断力,“NRMSE”))),...sprintf ('CV选择:%2.4g%%'100 * (1-goodnessOfFit (yH15,决断力,“NRMSE”))),...sprintf ('AIC选项:%2.4g%%'100 * (1-goodnessOfFit (yH3,决断力,“NRMSE”))))

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

我们看到有可能达到83%的适合度G(问)在状态空间模型中,顺序选择过程可能找不到最佳顺序。

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

apopt = 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],采用);NMR = noise2meas(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],采用),只显示出适合度的微小变化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。我们收取motorData400个数据点来自系统,有大量的噪声(标准差为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(t,motorData_NoiseFree.u)% input对于两个数据集是相同的ylabel (“输入”)包含(的时间(秒)

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

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

类型(“DCMotorODE”
函数[A,B,C,D] = DCMotorODE(G,Tau,Ts) % DCMotorODE ODE文件,表示通过增益G和时间常数Tau参数化%的直流电机动态。% % [A,B,C,D,K,X0] = DCMOTORODE(G,Tau,Ts)返回具有时间常数Tau和静态增益G的直流电机的状态空间矩阵%。采样%时间为Ts。% %如果输入参数Ts %为零,该文件返回连续时间表示。如果Ts>0,则返回离散时间表示。参见IDGREY, GREYEST。版权所有2013 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 = greyest(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.matnldataopt = 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,数字问题似乎出现了。然后我们可以应用少量的正则化来得到更好的条件矩阵:

λ = 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和线性/非线性灰盒模型。