主要内容

使用回归集成预测块预测响应

这个例子展示了如何用最优的超参数训练集合模型,然后使用RegressionEnsemble预测用于Simulink®中的响应预测。该块接受一个观察结果(预测器数据),并使用训练过的回归集合模型返回该观察结果的预测响应。

具有最佳超参数的训练回归模型

加载carbig数据集,包含70年代和80年代早期生产的汽车的测量数据。

负载carbig
名称大小字节类属性加速度406x1 3248双气缸406x1 3248双位移406x1 3248双马力406x1 3248双MPG 406x1 3248双Mfg 406x13 10556 char型号406x36 29232 char Model_Year 406x1 3248双起源406x7 5684 char重量406x1 3248双cyl4 406x5 4060 char org 406x7 5684 char当406x5 4060 char

起源是一个类别变量。训练回归集成预测块的模型时,必须使用类预处理类别预测器dummyvar函数在模型中包含分类预测器。您不能使用“CategoricalPredictors”名称-值参数。创建虚拟变量起源

c_Origin =分类(cellstr(起源));d_Origin = dummyvar (c_Origin);

dummyvar的每个类别创建虚拟变量c_Origin.中类别的数量c_Origin和虚拟变量的个数d_Origin

独特的(cellstr(起源))
ans =7 x1细胞{“英格兰”}{“法国”}{“德国”}{“意大利”}{‘日本’}{“瑞典”}{'美国'}
大小(d_Origin)
ans =1×2406年7

dummyvar的每个类别创建虚拟变量起源

创建一个包含6个数字预测变量和7个虚拟变量的矩阵起源.另外,创建响应变量的向量。

X =(加速度、汽缸、排量、马力、Model_Year重量,d_Origin);Y = MPG;

X而且Y这些选项:

  • 指定“OptimizeHyperparameters”作为“汽车”用最优超参数训练集合。的“汽车”选项找到的最优值“方法”“NumLearningCycles”,“LearnRate”的(适用方法)fitrensemble而且“MinLeafSize”树的学习者。

  • 为了再现性,设置随机种子并使用“expected-improvement-plus”采集功能。另外,对于随机森林算法的再现性,请指定“复制”作为真正的树的学习者。

rng (“默认”t = templateTree(“复制”,真正的);ensMdl = fitrensemble (X, Y,“学习者”t...“OptimizeHyperparameters”“汽车”...“HyperparameterOptimizationOptions”...结构(“AcquisitionFunctionName”“expected-improvement-plus”))
|===================================================================================================================================| | Iter | Eval |目的:| |目的BestSoFar | BestSoFar | |方法NumLearningC - | LearnRate | MinLeafSize | | | |结果日志(1 +损失)运行时| |(观察)| (estim) | |永昌龙  | | | |===================================================================================================================================| | 最好1 | | 2.7403 | 6.6397 | 2.7403 | 2.7403 |袋| 184 | - | 69 | | 2 |接受| 4.1317 | 0.42931 | 2.7403 | 2.8143 | 10袋| | | 176 | | 3 |的| 2.1687 | 7.2686 | 2.1687 | 2.1689 | 118 | |包- | 2 | | 4 | Accept | 2.2747 | 1.076 | 2.1687 | 2.1688 | LSBoost | 24 | 0.37779 | 7 | | 5 | Best | 2.1421 | 2.2623 | 2.1421 | 2.1422 | Bag | 75 | - | 1 | | 6 | Best | 2.1365 | 12.587 | 2.1365 | 2.1365 | Bag | 500 | - | 1 | | 7 | Accept | 2.4302 | 0.89336 | 2.1365 | 2.1365 | LSBoost | 37 | 0.94779 | 71 | | 8 | Accept | 2.1813 | 14.048 | 2.1365 | 2.1365 | LSBoost | 497 | 0.023582 | 1 | | 9 | Accept | 6.1992 | 2.209 | 2.1365 | 2.1363 | LSBoost | 91 | 0.0012439 | 1 | | 10 | Accept | 2.2119 | 11.851 | 2.1365 | 2.1363 | LSBoost | 497 | 0.087441 | 11 | | 11 | Accept | 4.7782 | 0.51249 | 2.1365 | 2.1366 | LSBoost | 15 | 0.055744 | 1 | | 12 | Accept | 2.3093 | 11.565 | 2.1365 | 2.1366 | LSBoost | 493 | 0.39665 | 1 | | 13 | Accept | 4.1304 | 4.6263 | 2.1365 | 2.1366 | LSBoost | 198 | 0.33031 | 201 | | 14 | Accept | 2.595 | 0.42385 | 2.1365 | 2.1367 | LSBoost | 16 | 0.99848 | 1 | | 15 | Accept | 2.6643 | 0.67125 | 2.1365 | 2.1363 | LSBoost | 25 | 0.97637 | 5 | | 16 | Accept | 2.2388 | 0.74516 | 2.1365 | 2.1363 | LSBoost | 11 | 0.42205 | 1 | | 17 | Accept | 4.1304 | 1.0551 | 2.1365 | 2.1789 | LSBoost | 19 | 0.79808 | 202 | | 18 | Accept | 2.347 | 1.6365 | 2.1365 | 2.1394 | LSBoost | 70 | 0.44243 | 1 | | 19 | Accept | 2.3032 | 9.0146 | 2.1365 | 2.136 | Bag | 498 | - | 15 | | 20 | Accept | 2.2289 | 8.5972 | 2.1365 | 2.136 | LSBoost | 404 | 0.1006 | 41 | |===================================================================================================================================| | Iter | Eval | Objective: | Objective | BestSoFar | BestSoFar | Method | NumLearningC-| LearnRate | MinLeafSize | | | result | log(1+loss) | runtime | (observed) | (estim.) | | ycles | | | |===================================================================================================================================| | 21 | Accept | 4.1723 | 0.68972 | 2.1365 | 2.1369 | LSBoost | 12 | 0.09538 | 1 | | 22 | Accept | 2.1635 | 9.4423 | 2.1365 | 2.1361 | LSBoost | 360 | 0.014398 | 1 | | 23 | Accept | 2.1604 | 8.0259 | 2.1365 | 2.1369 | LSBoost | 313 | 0.018437 | 1 | | 24 | Accept | 2.2712 | 0.53077 | 2.1365 | 2.1369 | LSBoost | 19 | 0.16242 | 13 | | 25 | Accept | 2.5452 | 0.46213 | 2.1365 | 2.1369 | LSBoost | 15 | 0.9873 | 26 | | 26 | Accept | 2.1717 | 10.083 | 2.1365 | 2.1361 | LSBoost | 429 | 0.018333 | 4 | | 27 | Accept | 6.0793 | 0.41685 | 2.1365 | 2.1366 | LSBoost | 11 | 0.015762 | 12 | | 28 | Accept | 2.567 | 8.5201 | 2.1365 | 2.1366 | LSBoost | 387 | 0.99805 | 20 | | 29 | Accept | 2.2095 | 3.1102 | 2.1365 | 2.1366 | LSBoost | 143 | 0.20337 | 10 | | 30 | Accept | 2.2024 | 10.091 | 2.1365 | 2.1366 | LSBoost | 496 | 0.03898 | 34 |

图中包含一个axes对象。标题为Min objective vs. Number of function求值的axis对象包含两个类型为line的对象。这些对象表示最小观测目标,估计最小目标。

__________________________________________________________ 优化完成。最大目标:达到30。总功能评估:30总运行时间:170.1747秒总目标功能评估时间:149.4822最佳观测可行点:Method NumLearningCycles LearnRate MinLeafSize ______ _________________ _________ ___________ Bag 500 NaN 1观测目标函数值= 2.1365估计目标函数值= 2.1366函数评估时间= 12.5866最佳估计可行点(根据模型):方法NumLearningCycles LearnRate MinLeafSize ______ _________________ _________ ___________ Bag 500 NaN 1估计的目标函数值= 2.1366估计的函数评估时间= 10.795
ensMdl = RegressionBaggedEnsemble ResponseName: 'Y' CategoricalPredictors: [] ResponseTransform: 'none' NumObservations: 398 HyperparameterOptimizationResults: [1x1 BayesianOptimization] numtraining: 500 Method: 'Bag' LearnerNames: {'Tree'} ReasonForTermination: '完成所要求的训练周期数后正常终止。'FitInfo: [] FitInfoDescription: 'None' Regularization: [] FResample: 1 Replace: 1 UseObsForLearner: [398x500 logical] Properties, Methods

fitrensemble返回一个RegressionBaggedEnsemble对象,因为函数查找随机森林算法(“包”)作为最佳方法。

创建模型模型

本示例提供了Simulink模型slexCarDataRegressionEnsemblePredictExample.slx,其中包括RegressionEnsemble预测块。您可以打开Simulink模型或创建一个新的模型,如本节所述。

打开Simulink模型slexCarDataRegressionEnsemblePredictExample.slx

SimMdlName =“slexCarDataRegressionEnsemblePredictExample”;open_system (SimMdlName)

slexCarDataRegressionEnsemblePredictExampleAfterOpenSystem.png

PreLoadFcn回调函数的slexCarDataRegressionEnsemblePredictExample包括加载样本数据、使用最优超参数训练模型以及为Simulink模型创建输入信号的代码。如果您打开Simulink模型,那么软件将在其中运行代码PreLoadFcn在加载Simulink模型之前。查看回调函数设置上节建模选项卡上,单击模型设置并选择模型属性.然后,在回调选项卡中,选择PreLoadFcn的回调函数模型的回调窗格。

要创建一个新的Simulink模型,请打开空白模型模板并添加RegressionEnsemble Predict块。添加import和Outport块,并将它们连接到RegressionEnsemble Predict块。

双击RegressionEnsemble Predict块以打开块参数对话框。指定选择训练过的机器学习模型参数,ensMdl,它是包含训练过的模型的工作空间变量的名称。单击刷新按钮。对话框显示用于训练模型的选项ensMdl训练过的机器学习模型

RegressionEnsemblePredictExample_BlockDialog.png

RegressionEnsemble Predict块期望一个包含13个预测值的观测值。双击import块,并设置港维到13信号的属性选项卡。

为Simulink模型创建一个结构数组形式的输入信号。结构数组必须包含以下字段:

  • 时间-观察结果进入模型的时间点。方向必须与预测数据中的观测值相对应。在这个例子中,时间必须是列向量。

  • 信号-一个描述输入数据并包含字段的1乘1结构数组而且,在那里是预测数据的矩阵,和是预测变量的数量。

对象创建适当的结构数组slexCarDataRegressionEnsemblePredictExample模型的carsmall数据集。当你转换起源carsmall分类数据类型数组c_Origin_small,使用类别(c_Origin)c_Origin而且c_Origin_small以相同的顺序排列相同数量的类别。

负载carsmallc_Origin_small =分类(cellstr(起源),类别(c_Origin));d_Origin_small = dummyvar (c_Origin_small);testX =(加速度、汽缸、排量、马力、Model_Year重量,d_Origin_small);testX = rmmissing (testX);carsmallInput。时间= (0:size(testX,1)-1)'; carsmallInput.signals(1).values = testX; carsmallInput.signals(1).dimensions = size(testX,2);

从工作区导入信号数据:

  • 打开“配置参数”对话框。在建模选项卡上,单击模型设置

  • 数据导入/导出窗格中,选择输入复选框并输入carsmallInput在相邻的文本框中。

  • 解算器窗格中,在仿真时间,设置停止时间carsmallInput.time(结束).下解算器的选择,设置类型固定步,并设置解算器离散(无连续状态)

有关更多细节,请参见模拟负载信号数据(模型)

模拟模型。

sim (SimMdlName);

当import块检测到一个观察值时,它将该观察值导向RegressionTree Predict块。您可以使用仿真数据检查(模型),查看Outport块的日志数据。

另请参阅

相关的话题

Baidu
map