这个例子展示了如何训练一个具有最优超参数的集成模型,然后使用ClassificationEnsemble预测在Simulink®中用于标签预测的块。金宝app该块接受一个观测(预测数据),并使用训练的分类集成模型返回观测的预测类标签和类得分。
加载CreditRating_Historical
数据集。该数据集包含客户id及其财务比率、行业标签和信用评级。确定样本量。
台= readtable (“CreditRating_Historical.dat”);n =元素个数(台)
n = 31456
显示表的前三行。
头(资源描述,3)
ans =3×8表ID WC_TA RE_TA EBIT_TA MVE_BVTD S_TA行业评级 _____ _____ _____ _______ ________ _____ ________ ______ 62394 0.013 0.104 0.036 0.447 0.142 3{“BB”}48608 0.232 0.335 0.062 1.969 0.281 8 {A} 42444 0.311 0.367 0.074 1.935 0.366 1 {A}
资源描述。行业
是一个行业标签的分类变量。当您训练ClassificationEnsemble Predict块的模型时,您必须使用dummyvar
函数将分类预测器包含在模型中。你不能使用“CategoricalPredictors”
名称-值参数。创建虚拟变量资源描述。行业
.
d = dummyvar (tbl.Industry);
dummyvar
的每个类别创建虚拟变量资源描述。行业
.确定中类别的数量资源描述。行业
以及虚拟变量的数量d
.
独特的(tbl.Industry) '
ans =1×1212 3 4 5 6 7 8 9 10 11 12
尺寸(d)
ans =1×23932年12
为预测变量创建一个数值矩阵,为响应变量创建一个单元格数组。
x = [table2array(tbl(:,2:6))d];y = tbl.rating;
X
是一个数字矩阵,包含17个变量:5个财务比率和工业标签的12个虚拟变量。X
不使用资源描述。ID
因为这个变量对预测信用评级没有帮助。Y
是字符向量的单元格数组,其中包含相应的信用评级。
假设您按顺序接收了数据,并且已经有了前3000个观测值,但还没有收到最后932个。将数据划分为当前和未来的样本。
prsntX = X (1:3000:);prsntY = Y (1:3000);ftrX = X(3001年:,);ftrY = Y(3001:结束);
使用所有当前可用的数据训练集合prsntX
和prsntY
这些选项:
指定“OptimizeHyperparameters”
作为“汽车”
训练具有最优超参数的集合。的“汽车”
选项查找的最佳值“方法”
,“NumLearningCycles”
, 和“LearnRate”
(适用方法)fitcensemble
和“MinLeafSize”
树的学习者。
为了重现性,设置随机种子并使用'预期改善 - 加'
采集功能。此外,对于随机林算法的再现性,请指定“复制”
作为真的
树的学习者。
属性指定类的顺序'Classnames'
名称-值参数。来自的输出值分数ClassificationEnsemble Predict块的端口具有相同的顺序。
RNG('默认') t = templateTree(“复制”,真正的);ensMdl = fitcensemble (prsntX prsntY,...'Classnames',{“AAA”“AA”“一个”“BBB”“BB”“B”“CCC”},...“OptimizeHyperparameters”,“汽车”,“学习者”t...“HyperparameterOptimizationOptions”,...结构(“AcquisitionFunctionName”,'预期改善 - 加'))
|===================================================================================================================================| | Iter | Eval客观客观| | | BestSoFar | BestSoFar | |方法NumLearningC - | LearnRate | MinLeafSize | | |结果| | |运行时(观察)| (estim) | |永昌龙| | ||===================================================================================================================================| | 最好1 | | 0.51133 | 13.652 | 0.51133 | 0.51133 | AdaBoostM2 | 429 | 0.082478 | 871 | | 2 |最好| 0.26133 | 18.827 | 0.26133 | 0.27463 | AdaBoostM2 | 492 | 0.19957 | 4 | | 3 |接受| 0.85133 | 0.76925 | 0.26133| 0.28421 | RUSBoost | | 0.34528 | 1179 | | 4 |接受| 0.263 | 0.61254 | 0.26133 | 0.26124 | AdaBoostM2 | 13 | 0.27107 | 10 | | 5 |的| 0.26 | 0.9413 | 0.26 | 0.26003 | 10袋| | - | 1 | | 6 |接受| 0.28933 | 1.7101 | 0.26 | 0.2602 | 36袋| | | 101 | | 7最好| | 0.25667 | 1.3583 | 0.25667 | 0.25726 | AdaBoostM2 | 33 | 0.99501 | 11最好8 | | | | 0.244 | 28.725 | 0.244 | 0.24406 |袋| 460 | - | 7 | | | 9日接受| 0.246 | 4.19 | 0.244 | 0.24435 | 60袋| | - | 4 | | 10 |接受| 0.25533 | 1.3969 | 0.244 | 0.24437 | AdaBoostM2 33 | | 0.99516 | 1 | | | 11日接受| 0.25733 | 1.5294 | 0.244 | 0.2442 | 25袋| | - | 8 | | | 12日接受| 0.74267 | 16.444 | 0.244 | 0.24995 |包| 488 | - | 1494 | | | 13日接受| 0.28567 | 7.9382 | 0.244 | 0.24624 | RUSBoost | 158 | 0.0010063 | 1 | | | 14日接受| 0.257 | 23.416 | 0.244 | 0.24559 |袋| 491 | - | 31日| | 15 |接受| 0.28433 | 0.71501 | 0.244 | 0.24557 | RUSBoost | 12 | 0.48085 | 6 | | | 16日接受| 0.267 | 17.82 | 0.244 | 0.2456 | AdaBoostM2 | 484 | 0.0028818 | 43 | | 17| Accept | 0.24667 | 33.219 | 0.244 | 0.24601 | Bag | 488 | - | 3 | | 18 | Best | 0.244 | 34.953 | 0.244 | 0.2454 | Bag | 498 | - | 3 | | 19 | Accept | 0.24467 | 31.568 | 0.244 | 0.24489 | Bag | 473 | - | 3 | | 20 | Accept | 0.259 | 19.187 | 0.244 | 0.24488 | AdaBoostM2 | 497 | 0.67001 | 19 | |===================================================================================================================================| | Iter | Eval | Objective | Objective | BestSoFar | BestSoFar | Method | NumLearningC-| LearnRate | MinLeafSize | | | result | | runtime | (observed) | (estim.) | | ycles | | | |===================================================================================================================================| | 21 | Accept | 0.27733 | 19.735 | 0.244 | 0.24468 | RUSBoost | 386 | 0.91461 | 2 | | 22 | Accept | 0.245 | 32.172 | 0.244 | 0.2441 | Bag | 482 | - | 4 | | 23 | Accept | 0.244 | 33.117 | 0.244 | 0.24388 | Bag | 497 | - | 4 | | 24 | Accept | 0.245 | 34.32 | 0.244 | 0.24406 | Bag | 497 | - | 4 | | 25 | Best | 0.243 | 33.134 | 0.243 | 0.24394 | Bag | 499 | - | 5 | | 26 | Accept | 0.25733 | 0.55541 | 0.243 | 0.24371 | AdaBoostM2 | 12 | 0.87848 | 53 | | 27 | Accept | 0.263 | 0.52438 | 0.243 | 0.24371 | AdaBoostM2 | 11 | 0.6978 | 2 | | 28 | Accept | 0.24367 | 31.167 | 0.243 | 0.24344 | Bag | 484 | - | 5 | | 29 | Accept | 0.292 | 19.748 | 0.243 | 0.24342 | AdaBoostM2 | 497 | 0.0010201 | 1 | | 30 | Accept | 0.292 | 0.7854 | 0.243 | 0.24342 | RUSBoost | 13 | 0.0012334 | 3 |
__________________________________________________________ 优化完成。maxobjective达到30个。总函数计算:30总运行时间:488.5833秒总目标函数计算时间:464.2275最佳观测可行点:方法NumLearningCycles LearnRate MinLeafSize ______ _________________ _________ ___________ Bag 499 NaN 5观测目标函数值= 0.243估计目标函数值= 0.24342函数评估时间= 33.1343最佳估计可行点(根据模型):方法NumLearningCycles LearnRate MinLeafSize ______ _________________ _________ ___________ Bag 499 NaN 5估计目标函数值= 0.24342估计函数评估时间= 32.1002
ensmdl = classificationbaggedensemble racitchename:'y'pationoricalpricictors:[] classnames:{'aaa''''''bbb''bb'b'''ccc'} scoreTransform:'none'numobservations:3000 hyperameteroptimationresults:[1×1贝叶斯optimization] Numtromed:499方法:'Bag'Rearnernames:{'树'}制作的理由:'完成所要求的训练周期后通常终止。fitinfo:[] fitinfodescription:'无'fresample:1替换:1 meveryobsforlearner:[3000×499逻辑]属性,方法
fitcensemble
返回一个ClassificationBaggedEnsemble
对象,因为该函数找到随机森林算法('包'
)作为最优方法。
这个例子提供了Simulink模型金宝appslexCreditRatingClassificationEnsemblePredictExample.slx
,其中包括ClassificationEnsemble预测堵塞。您可以打开Simulink模型或如金宝app本节所述的新模型创建新模型。
打开Simulin金宝appk模型slexCreditRatingClassificationEnsemblePredictExample.slx
.
SimMdlName =“slexCreditRatingClassificationEnsemblePredictExample”;Open_System(SIMMDLNAME)
的PreLoadFcn
回调函数slexCreditRatingClassificationEnsemblePredictExample
包括加载样本数据、使用最优超参数训练模型以及为Simulink模型创建输入信号的代码。金宝app如果打开Simulink模型,软金宝app件就会运行代码PreLoadFcn
加载Simulink模型之前。金宝app要查看回调函数,请在设置上节建模选项卡上,单击模型设置并选择模型属性.然后,在回调选项卡中,选择PreLoadFcn
回调函数在模型回调窗格。
要创建新的Simulink模型,金宝app请打开空白模型模板,并添加ClassificationEnsemble Predict块。添加import和Outport块,并将它们连接到ClassificationEnsemble Predict块。
双击ClassificationEnsemble Predict块,打开块参数对话框。指定选择训练过的机器学习模型参数,ensMdl
,它是包含训练模型的工作空间变量的名称。单击刷新按钮。对话框显示用于训练模型的选项ensMdl
下训练有素的机器学习模型.选择添加预测类分数的输出端口复选框以添加第二个输出端口分数.
ClassificationEnsemble Predict块期望一个包含17个预测值的观测值。双击import块,并设置港维到17号信号的属性选项卡。
以Simulink模型的结构阵列的形式创建输入信号。金宝app结构阵列必须包含以下字段:
时间
-观测数据进入模型的时间点。在本例中,持续时间包括从0到931的整数。方位必须与预测器数据中的观测值相对应。在这种情况下,时间
必须是一个列向量。
信号
—描述输入数据并包含字段的1 × 1结构数组价值
和维
,在那里价值
是预测数据的矩阵,和维
是预测变量的数量。
为将来的示例创建一个适当的结构数组。
creditRatingInput。时间= (0:931)';creditRatingInput.signals(1)。值= ftrX;creditRatingInput.signals(1)。尺寸大小= (ftrX 2);
从工作区导入信号数据:
打开“配置参数”对话框。在建模选项卡上,单击模型设置.
在里面数据导入/导出窗格中,选择输入复选框,并输入creditRatingInput
在相邻的文本框中。
在里面求解器窗格中,在仿真时间,设置停止时间来creditRatingInput.time(结束)
.下求解器选择,设置类型来固定步
,并设置求解器来离散(没有连续的状态)
.
有关详细信息,请参见模拟负载信号数据(金宝app模型).
模拟模型。
sim(simmdlname);
当import块检测到一个观察结果时,它将该观察结果导向ClassificationEnsemble Predict块。你可以使用仿真数据检查(金宝app模型)查看Outport块的记录数据。