主要内容

训练广义可加回归模型

该实例说明了如何用最优参数训练广义可加性模型(GAM),以及如何评估训练模型的预测性能。该示例首先为单变量GAM(线性项的参数)找到最优参数值,然后为双变量GAM(交互项的参数)找到值。此外,该示例还解释了如何通过检查术语对特定预测的局部影响和计算预测对预测器的部分依赖来解释训练模型。

加载示例数据

加载示例数据集NYCHousing2015

负载NYCHousing2015

该数据集包括10个变量,包含了2015年纽约市房产销售的信息。本例使用这些变量来分析销售价格(SALEPRICE).

预处理数据集。假设一个SALEPRICE少于或等于1000美元表示所有权转让而没有现金对价。移除有这个的样本SALEPRICE.此外,删除由isoutlier函数。然后,把datetime阵列(SALEDATE)到月份数字,并移动响应变量(SALEPRICE)到最后一栏。改变零LANDSQUAREFEETGROSSSQUAREFEET,YEARBUILT年代。

idx1 = NYCHousing2015。SALEPRICE < = 1000;idx2 = isoutlier (NYCHousing2015.SALEPRICE);NYCHousing2015 (idx1 | idx2:) = [];NYCHousing2015。SALEDATE= month(NYCHousing2015.SALEDATE); NYCHousing2015 = movevars(NYCHousing2015,“SALEPRICE”“后”“SALEDATE”);NYCHousing2015.LANDSQUAREFEET (NYCHousing2015。LANDSQUAREFEET == 0) = NaN;NYCHousing2015.GROSSSQUAREFEET (NYCHousing2015。GROSSSQUAREFEET == 0) = NaN;NYCHousing2015.YEARBUILT (NYCHousing2015。YEARBUILT == 0) = NaN;

显示表的前三行。

头(NYCHousing2015, 3)
ans =表3×10区附近BUILDINGCLASSCATEGORY RESIDENTIALUNITS COMMERCIALUNITS LANDSQUAREFEET GROSSSQUAREFEET YEARBUILT SALEDATE SALEPRICE  _______ ____________ ____________________________ ________________ _______________ ______________ _______________ _________ ________ _________ 2{‘BATHGATE}{01一个家庭住宅的}1 0 1103 1290 1910 2 3 e + 05年2{'BATHGATE'} {'01 ONE FAMILY DWELLINGS'} 1 1 2500 2452 1910 7 4e+05 2 {'BATHGATE'} {'01 ONE FAMILY DWELLINGS'} 1 2 1911 4080 1931 1 5.1e+05

随机抽取1000个样本datasample函数,将观测值划分为训练集和测试集cvpartition函数。指定10%的抵抗样品用于测试。

rng (“默认”%的再现性NumSamples = 1 e3;NYCHousing2015 = datasample (NYCHousing2015 NumSamples,“替换”、假);简历= cvpartition(大小(NYCHousing2015, 1),“坚持”, 0.10);

提取训练和测试指标,并为训练和测试数据集创建表。

tbl_training = NYCHousing2015(培训(cv):);tbl_test = NYCHousing2015(测试(cv):);

寻找单变量GAM的最优参数

的方法优化单变量GAM关于交叉验证的参数bayesopt函数。

准备optimizableVariable对象的名称-值参数的单变量GAM:MaxNumSplitsPerPredictorNumTreesPerPredictor,InitialLearnRateForPredictors

maxNumSplitsPerPredictor = optimizableVariable (“maxNumSplitsPerPredictor”(1, 10),“类型”“整数”);numTreesPerPredictor = optimizableVariable (“numTreesPerPredictor”[1500],“类型”“整数”);initialLearnRateForPredictors = optimizableVariable (“initialLearnRateForPredictors”(1 e - 3, 1),“类型”“真实”的);

创建一个接受输入的目标函数z = [maxNumSplitsPerPredictor numTreesPerPredictor initialLearnRateForPredictors]并返回在参数处的交叉验证损失值z

minfun1 = @ (z) kfoldLoss (fitrgam (tbl_training,“SALEPRICE”...“CrossVal”“上”...“InitialLearnRateForPredictors”z.initialLearnRateForPredictors,...“MaxNumSplitsPerPredictor”z.maxNumSplitsPerPredictor,...“NumTreesPerPredictor”z.numTreesPerPredictor));

如果您指定交叉验证选项“CrossVal”,“上”,那么fitrgam函数返回一个经过交叉验证的模型对象RegressionPartitionedGAM.的kfoldLoss函数返回由交叉验证模型得到的回归损失(均方误差)。因此,函数句柄minfun1计算中参数的交叉验证损失z

搜索最佳参数使用bayesopt.为了再现性,选择“expected-improvement-plus”采集功能。默认的获取函数取决于运行时,因此可以给出不同的结果。

其中回答= bayesopt (minfun1,...[initialLearnRateForPredictors, maxNumSplitsPerPredictor numTreesPerPredictor),...“IsObjectiveDeterministic”,真的,...“AcquisitionFunctionName”“expected-improvement-plus”);
|====================================================================================================================| | Iter | Eval客观客观| | | BestSoFar | BestSoFar | initialLearn - | maxNumSplits - | numTreesPerP——| | |结果| | |运行时(观察)| (estim) | RateForPredi | PerPredictor | redictor ||====================================================================================================================| | 最好1 | | 8.4558 e + 10 | 1.5106 | 8.4558 e + e + 10 | 0.36695 | 8.4558 | 2 | 30 | | 2 |接受e + 10 | 12.01 | 8.6891 | 8.4558 e + 10 e + 10 | 0.008213 | 8.4558 | 5 | 271 | | 3 |接受e + 10 | 1.9121 | 9.6521 | 8.4558 e + 10 + 10 | | 8.4558 e0.22984 | 9 | 37 | | 4 |接受e + 11 | 14.388 | 1.3402 | 8.4558 e + 10 e + 10 | 0.99932 | 8.4558 | 3 | 344 | | 5 |接受e + 10 | 13.595 | 8.7852 | 8.4558 e + 10 e + 10 | 0.16575 | 8.4558 | 1 | 456 | | 6 |接受e + 10 | 11.002 | 9.3041 | 8.4558 e + 10 e + 10 | 0.49477 | 8.4558 | 1 | 360 | | 7 |接受e + 11 | 7.7647 | 1.0558 | 8.4558 e + 10 e + 10 | 0.24562 | 8.4558 | 4 | 175 ||8 | Accept | 8.8841e+10 | 1.5763 | 8.4558e+10 | 8.4558e+10 | 0.39298 | 2 | 41 | | 9 | Accept | 9.9227e+10 | 14.377 | 8.4558e+10 | 8.4558e+10 | 0.091879 | 3 | 358 | | 10 | Accept | 9.8611e+10 | 0.14914 | 8.4558e+10 | 8.4558e+10 | 0.22487 | 2 | 2 | | 11 | Accept | 1.2998e+11 | 23.962 | 8.4558e+10 | 8.4558e+10 | 0.25341 | 5 | 500 | | 12 | Accept | 8.8968e+10 | 5.0028 | 8.4558e+10 | 8.4558e+10 | 0.33109 | 1 | 175 | | 13 | Accept | 1.2018e+11 | 1.8004 | 8.4558e+10 | 8.4558e+10 | 0.0030413 | 6 | 40 | | 14 | Accept | 8.7503e+10 | 0.79283 | 8.4558e+10 | 8.4558e+10 | 0.33877 | 1 | 25 | | 15 | Accept | 9.3798e+10 | 2.9578 | 8.4558e+10 | 8.4558e+10 | 0.32926 | 2 | 80 | | 16 | Accept | 9.5165e+10 | 8.0635 | 8.4558e+10 | 8.4558e+10 | 0.33878 | 1 | 282 | | 17 | Best | 8.3549e+10 | 0.24446 | 8.3549e+10 | 8.3549e+10 | 0.3552 | 2 | 5 | | 18 | Best | 8.3104e+10 | 1.4534 | 8.3104e+10 | 8.3104e+10 | 0.2526 | 1 | 49 | | 19 | Accept | 8.6938e+10 | 3.3234 | 8.3104e+10 | 8.3104e+10 | 0.18293 | 1 | 110 | | 20 | Accept | 8.7531e+10 | 2.8096 | 8.3104e+10 | 8.3104e+10 | 0.2781 | 1 | 93 | |====================================================================================================================| | Iter | Eval | Objective | Objective | BestSoFar | BestSoFar | initialLearn-| maxNumSplits-| numTreesPerP-| | | result | | runtime | (observed) | (estim.) | RateForPredi | PerPredictor | redictor | |====================================================================================================================| | 21 | Accept | 9.1613e+10 | 13.347 | 8.3104e+10 | 8.3104e+10 | 0.31722 | 1 | 464 | | 22 | Accept | 8.678e+10 | 10.358 | 8.3104e+10 | 8.3104e+10 | 0.11269 | 1 | 358 | | 23 | Accept | 8.3614e+10 | 0.47001 | 8.3104e+10 | 8.3104e+10 | 0.22278 | 1 | 14 | | 24 | Accept | 1.3203e+11 | 1.069 | 8.3104e+10 | 8.3104e+10 | 0.0021552 | 5 | 23 | | 25 | Accept | 8.66e+10 | 7.233 | 8.3104e+10 | 8.3104e+10 | 0.11469 | 1 | 236 | | 26 | Accept | 8.4535e+10 | 8.7657 | 8.3104e+10 | 8.3104e+10 | 0.0090628 | 1 | 292 | | 27 | Accept | 1.0315e+11 | 12.297 | 8.3104e+10 | 8.3104e+10 | 0.0014094 | 1 | 413 | | 28 | Accept | 9.6736e+10 | 5.8323 | 8.3104e+10 | 8.3104e+10 | 0.0040429 | 1 | 202 | | 29 | Accept | 8.3651e+10 | 8.4999 | 8.3104e+10 | 8.3104e+10 | 0.09375 | 1 | 295 | | 30 | Accept | 8.7977e+10 | 13.521 | 8.3104e+10 | 8.3104e+10 | 0.016448 | 6 | 292 |

__________________________________________________________ 优化完成。maxobjective达到30个。总函数计算:30总运行时间:245.1541秒总目标函数计算时间:210.0881最佳观测可行点:initialLearnRateForPredictors maxNumSplitsPerPredictor numTreesPerPredictor  _____________________________ ________________________ ____________________ 0.2526 1 49观察目标函数值= 83103839919.908估计目标函数值= 83103840296.3186最好时间评估函数= 1.4534(据估计可行点模型):initialLearnRateForPredictors maxNumSplitsPerPredictor numTreesPerPredictor _____________________________ ________________________ ____________________ 0.2526 1 49估计的目标函数值= 83103840296.3186估计的函数计算时间= 1.803

获得最佳点其中回答

zbest1 = bestPoint(其中回答)
zbest1 =1×3表initialLearnRateForPredictors maxNumSplitsPerPredictor numTreesPerPredictor  _____________________________ ________________________ ____________________ 0.2526 - 1 49

用最优参数训练单变量GAM

训练一个优化的GAM使用zbest1值。

Mdl1 = fitrgam (tbl_training,“SALEPRICE”...“InitialLearnRateForPredictors”zbest1.initialLearnRateForPredictors,...“MaxNumSplitsPerPredictor”zbest1.maxNumSplitsPerPredictor,...“NumTreesPerPredictor”zbest1.numTreesPerPredictor)
Mdl1 = RegressionGAM PredictorNames: {'BOROUGH' 'NEIGHBORHOOD' 'BUILDINGCLASSCATEGORY' 'RESIDENTIALUNITS' 'COMMERCIALUNITS' 'LANDSQUAREFEET' 'GROSSSQUAREFEET' 'YEARBUILT' 'SALEDATE'} ResponseName: 'SALEPRICE' CategoricalPredictors: [2 3] ResponseTransform: 'none' Intercept: 4.9806e+05 numobations: 900属性,方法

Mdl1是一个RegressionGAM模型对象。模型显示显示了模型属性的部分列表。要查看属性的完整列表,请双击变量名Mdl1在工作区中。打开变量编辑器Mdl1.或者,您可以使用点符号在命令窗口中显示属性。例如,显示ReasonForTermination财产。

Mdl1。ReasonForTermination
ans =结构体字段:PredictorTrees:“在训练所需数量的树后终止。”InteractionTrees:“

PredictorTrees属性值的字段表示Mdl1包括指定数目的树。NumTreesPerPredictorfitrgam指定每个预测器的最大树数,函数可以在训练所需的树数之前停止。你可以使用ReasonForTermination属性确定训练的模型是否包含指定数量的树。

如果您指定包含交互项,以便fitrgam为他们训练树木。的InteractionTrees字段包含一个非空值。

寻找二元GAM的最优参数

使用的方法找到二元GAM的相互作用项的参数bayesopt函数。

准备optimizableVariable对于交互术语的名称-值参数:InitialLearnRateForInteractionsMaxNumSplitsPerInteractionNumTreesPerInteraction,InitialLearnRateForInteractions

initialLearnRateForInteractions = optimizableVariable (“initialLearnRateForInteractions”(1 e - 3, 1),“类型”“真实”的);maxNumSplitsPerInteraction = optimizableVariable (“maxNumSplitsPerInteraction”(1, 10),“类型”“整数”);numTreesPerInteraction = optimizableVariable (“numTreesPerInteraction”[1500],“类型”“整数”);numInteractions = optimizableVariable (“numInteractions”(1、28),“类型”“整数”);

为优化创建一个目标函数。使用中的最优参数值zbest1从而使软件在此基础上找到交互项的最优参数值zbest1值。

minfun2 = @ (z) kfoldLoss (fitrgam (tbl_training,“SALEPRICE”...“CrossVal”“上”...“InitialLearnRateForPredictors”zbest1.initialLearnRateForPredictors,...“MaxNumSplitsPerPredictor”zbest1.maxNumSplitsPerPredictor,...“NumTreesPerPredictor”zbest1.numTreesPerPredictor,...“InitialLearnRateForInteractions”z.initialLearnRateForInteractions,...“MaxNumSplitsPerInteraction”z.maxNumSplitsPerInteraction,...“NumTreesPerInteraction”z.numTreesPerInteraction,...“互动”z.numInteractions));

搜索最佳参数使用bayesopt.优化过程训练多个模型,如果模型不包含交互项,则显示警告消息。在调用之前禁用所有警告bayesopt并在运行后恢复警告状态bayesopt.您可以保持警告状态不变,以查看警告信息。

orig_state =警告(“查询”);警告(“关闭”) results2 = bayesopt(minfun2,...[initialLearnRateForInteractions, maxNumSplitsPerInteraction numTreesPerInteraction, numInteractions],...“IsObjectiveDeterministic”,真的,...“AcquisitionFunctionName”“expected-improvement-plus”);
|===================================================================================================================================| | Iter | Eval客观客观| | | BestSoFar | BestSoFar | initialLearn - | maxNumSplits - | numTreesPerI - | numInteracti——| | |结果| | |运行时(观察)| (estim) | RateForInter | PerInteracti | nteraction |国家统计局  | |===================================================================================================================================| | 最好1 | | 8.4721 e + 10 | 1.6996 | 8.4721 e + e + 10 | 0.41774 | 8.4721 | 1 | 346 | 28 | | 2 |接受e + 10 | 8.3313 | 9.1765 | 8.4721 e + 10 e + 10 | 0.9565 | 8.4721 | 3 | 231 | 14 | | 3 |接受e + 10 | 2.8341 | 9.2116 |8.4721 e + 10 e + 10 | 0.33578 | 8.4721 | 9 45 | | 5 | | 4 |接受e + 11 | 76.237 | 1.784 | 8.4721 e + 10 e + 10 | 0.91186 | 8.4721 | | 479 | | 27日| 5 |接受e + 10 | 1.8275 | 8.4906 | 8.4721 e + 10 e + 10 | 0.296 | 8.4721 | 4 | 1 | 27日| | 6 |的| 8.4172 e + 10 | 1.73 | 8.4172 e + e + 10 | 0.68133 | 8.4172 | 1 | 86 | 1 | | 7最好| | 8.234 e + 10 + 10 | | 1.7164 | 8.234 e8.234 e + 10 | 0.13943 | 1 | 228 | 26 | | 8 | | 8.3488接受e + 10 | 1.6382 | 8.234 e + e + 10 | 0.46764 | 8.234 | 1 | 1 | 5 | | | 9日接受e + 10 | 1.5655 | 8.7977 | 8.234 e + 10 e + 10 | 0.8385 | 8.234 | | 1 | 5 | | | | 8.4431接受e + 10 | 1.5744 | 8.234 e + 10 e + 10 | 0.95535 | 8.234 | 1 | 261 | 4 | | | 11日接受e + 10 | 1.7478 | 8.5784 | 8.234 e + 10 + 10 | | 8.234 e0.023058 | 7 | 1 | 14 | | 12 | Accept | 8.6068e+10 | 1.7304 | 8.234e+10 | 8.234e+10 | 0.77118 | 1 | 5 | 28 | | 13 | Accept | 8.7004e+10 | 1.5903 | 8.234e+10 | 8.234e+10 | 0.016991 | 1 | 263 | 2 | | 14 | Accept | 8.3325e+10 | 1.5895 | 8.234e+10 | 8.234e+10 | 0.9468 | 4 | 7 | 1 | | 15 | Accept | 8.4097e+10 | 1.6357 | 8.234e+10 | 8.234e+10 | 0.97988 | 1 | 250 | 28 | | 16 | Accept | 8.3106e+10 | 1.6081 | 8.234e+10 | 8.234e+10 | 0.024052 | 1 | 121 | 28 | | 17 | Accept | 8.469e+10 | 1.6235 | 8.234e+10 | 8.234e+10 | 0.047902 | 3 | 3 | 12 | | 18 | Best | 8.1641e+10 | 1.5833 | 8.1641e+10 | 8.1641e+10 | 0.99848 | 6 | 1 | 3 | | 19 | Accept | 8.5957e+10 | 1.6305 | 8.1641e+10 | 8.1641e+10 | 0.99826 | 6 | 1 | 13 | | 20 | Accept | 8.2486e+10 | 1.6515 | 8.1641e+10 | 8.1641e+10 | 0.36059 | 7 | 2 | 1 | |===================================================================================================================================| | Iter | Eval | Objective | Objective | BestSoFar | BestSoFar | initialLearn-| maxNumSplits-| numTreesPerI-| numInteracti-| | | result | | runtime | (observed) | (estim.) | RateForInter | PerInteracti | nteraction | ons | |===================================================================================================================================| | 21 | Accept | 8.6534e+10 | 1.647 | 8.1641e+10 | 8.1641e+10 | 0.0089186 | 1 | 192 | 18 | | 22 | Accept | 8.5425e+10 | 1.5316 | 8.1641e+10 | 8.1641e+10 | 0.99842 | 1 | 497 | 1 | | 23 | Accept | 8.515e+10 | 1.5728 | 8.1641e+10 | 8.1641e+10 | 0.99934 | 1 | 3 | 2 | | 24 | Accept | 8.593e+10 | 1.6086 | 8.1641e+10 | 8.1641e+10 | 0.0099052 | 1 | 2 | 28 | | 25 | Accept | 8.7394e+10 | 1.577 | 8.1641e+10 | 8.1641e+10 | 0.96502 | 7 | 5 | 2 | | 26 | Accept | 8.618e+10 | 1.5714 | 8.1641e+10 | 8.1641e+10 | 0.097871 | 5 | 3 | 1 | | 27 | Accept | 8.5704e+10 | 1.665 | 8.1641e+10 | 8.1641e+10 | 0.056356 | 10 | 6 | 3 | | 28 | Accept | 9.5451e+10 | 2.8821 | 8.1641e+10 | 8.1641e+10 | 0.91844 | 3 | 12 | 28 | | 29 | Accept | 8.4013e+10 | 1.5633 | 8.1641e+10 | 8.1641e+10 | 0.68016 | 6 | 1 | 1 | | 30 | Accept | 8.3928e+10 | 1.7715 | 8.1641e+10 | 8.1641e+10 | 0.07259 | 5 | 5 | 14 |

__________________________________________________________ 优化完成。maxobjective达到30个。总函数计算:30总运行时间:155.1459秒总目标函数计算时间:132.9347最佳观测可行点:initialLearnRateForInteractions maxNumSplitsPerInteraction numTreesPerInteraction numInteractions  _______________________________ __________________________ ______________________ _______________ 0.99848 6 1 3观察目标函数值= 81640836929.8637估计目标函数值= 81640841484.6238时间评估函数= 1.5833Best estimated feasible point (according to models): initialLearnRateForInteractions maxNumSplitsPerInteraction numTreesPerInteraction numInteractions _______________________________ __________________________ ______________________ _______________ 0.99848 6 1 3 Estimated objective function value = 81640841484.6238 Estimated function evaluation time = 1.5784
警告(orig_state)

获得最佳点results2

zbest2 = bestPoint (results2)
zbest2 =1×4表initialLearnRateForInteractions maxNumSplitsPerInteraction numTreesPerInteraction numInteractions  _______________________________ __________________________ ______________________ _______________ 0.99848 6 1 3

用最优参数训练二元GAM

训练一个优化的GAM使用zbest1zbest2值。

Mdl = fitrgam (tbl_training,“SALEPRICE”...“InitialLearnRateForPredictors”zbest1.initialLearnRateForPredictors,...“MaxNumSplitsPerPredictor”zbest1.maxNumSplitsPerPredictor,...“NumTreesPerPredictor”zbest1.numTreesPerPredictor,...“InitialLearnRateForInteractions”zbest2.initialLearnRateForInteractions,...“MaxNumSplitsPerInteraction”zbest2.maxNumSplitsPerInteraction,...“NumTreesPerInteraction”zbest2.numTreesPerInteraction,...“互动”zbest2.numInteractions)
Mdl = RegressionGAM PredictorNames: {'BOROUGH' 'NEIGHBORHOOD' 'BUILDINGCLASSCATEGORY' 'RESIDENTIALUNITS' 'COMMERCIALUNITS' 'LANDSQUAREFEET' 'GROSSSQUAREFEET' 'YEARBUILT' 'SALEDATE'} ResponseName: 'SALEPRICE' CategoricalPredictors: [2 3] ResponseTransform: 'none' Intercept: 4.9741e+05 Interactions: [3×2 double] numobservation:900属性、方法

或者,您可以通过使用addInteractions函数。

Mdl2 = addInteractions (Mdl1 zbest2.numInteractions,...“InitialLearnRateForInteractions”zbest2.initialLearnRateForInteractions,...“MaxNumSplitsPerInteraction”zbest2.maxNumSplitsPerInteraction,...“NumTreesPerInteraction”, zbest2.numTreesPerInteraction);

第二个输入参数指定交互项的最大数量,并且NumTreesPerInteractionName-value参数指定每个交互项的最大树数。的addInteractions函数可以包含更少的交互项,并在训练所需数量的树之前停止。你可以使用的相互作用ReasonForTermination属性来检查训练模型中交互项的实际数量和树的数量。

中显示交互项Mdl

Mdl。的相互作用
ans =3×23 6 4 6 6 8

每一行的的相互作用表示一个交互项,并包含该交互项的预测变量的列索引。你可以使用的相互作用属性检查模型中的交互项及其顺序fitrgam将它们添加到模型中。

中显示交互项Mdl使用预测器名称。

Mdl.PredictorNames (Mdl.Interactions)
ans =3×2细胞{' building class '} {' landsquarefeet '} {' residentialunits '} {' landsquarefeet '} {' landsquarefeet '} ' yearbuilt '}

显示终止的原因,以确定模型是否包含每个线性项和每个交互项的指定数量的树。

Mdl。ReasonForTermination
ans =结构体字段:PredictorTrees:“在训练所需数量的树后终止。”InteractionTrees:“在训练所需数量的树后终止。”

评估新观测的预测性能

使用测试样本评估训练模型的性能tbl_test对象函数预测损失.您可以使用具有这些功能的完整或紧凑模型。

  • 预测——预测反应

  • 损失-计算回归损失(默认均方误差)

如果你想评估训练数据集的性能,使用重替换对象函数:resubPredictresubLoss.要使用这些函数,必须使用包含训练数据的完整模型。

创建一个紧凑的模型,以减少训练模型的大小。

CMdl =紧凑(Mdl);谁(“Mdl”“CMdl”
Name Size Bytes Class Attributes CMdl 1x1 370211 classreg.learning.regr.CompactRegressionGAM Mdl 1x1 528102 RegressionGAM

预测响应和计算测试数据集的均方误差tbl_test

yFit =预测(CMdl tbl_test);L =损失(CMdl tbl_test)
L = 1.2855 e + 11

找出在训练模型中不包含交互项的预测反应和错误。

yFit_nointeraction =预测(CMdl tbl_test,“IncludeInteractions”、假);L_nointeractions =损失(CMdl tbl_test,“IncludeInteractions”假)
L_nointeractions = 1.3031 e + 11

当同时包含线性和交互项时,模型对测试数据集的误差较小。

比较包含线性交互项和只包含线性项的结果。创建一个包含观察到的响应和预测响应的表。显示表的前8行。

表(tbl_test t =。SALEPRICE,yFit,yFit_nointeraction,...“VariableNames”, {的观测值“预测响应”“没有互动的预测反应”});头(t)
ans =8×3表观测值预测响应预测响应没有交互  ______________ __________________ _______________________________________ 3.6 e + 05年4.9812 e + 05年5.2712 1.8 e + e + 05年05年2.7349 2.7415 e + e + 05年05年1.9 3.3682 e + e + 05年05年3.3748 4.26 e + e + 05年05年6.15 5.6542 e + e + 05年05年3.91 3.1262 e + e + 05年05年3.1328 2.3 e + e + 05年05年1.0606 1.0672 e + e + 05年05年4.7333 1.0773 e + e + 05 061.1399e+06 2e+05 2.9506e+05 3.305e+05

解释预测

解释预测的第一个测试观察使用plotLocalEffects函数。另外,通过使用。创建模型中一些重要项的部分依赖图plotPartialDependence函数。

预测测试数据的第一次观测的响应值,并绘制中各项的局部效应CMdl在预测。指定“IncludeIntercept”,真的在图中包含截距项。

yFit =预测(CMdl tbl_test (1,:))
yFit = 4.9812 e + 05
plotLocalEffects (CMdl tbl_test (1:)“IncludeIntercept”,真正的)

预测函数返回第一次观察的销售价格: tbl_test (1).的plotLocalEffects函数创建一个水平条形图,显示中的术语的局部效果CMdl在预测。每个局部效应值显示了每个条款对预计销售价格的贡献: tbl_test (1)

计算的部分相关值BUILDINGCLASSCATEGORY然后画出排序后的值。指定训练数据集和测试数据集,以便使用这两个数据集计算部分依赖值。

(pd, x, y) = partialDependence (CMdl,“BUILDINGCLASSCATEGORY”, (tbl_training;tbl_test]);[pd_sorted,我]= (pd);x_sorted = x(我);x_sorted = reordercats (x_sorted,我);图绘制(x_sorted pd_sorted,”啊,“)包含(“BUILDINGCLASSCATEGORY”) ylabel (“SALEPRICE”)标题(“可依赖情节”

标绘的线表示预测器之间的平均部分关系BUILDINGCLASSCATEGORY和响应SALEPRICE在训练过的模型中。

为这些项创建一个部分相关图RESIDENTIALUNITSLANDSQUAREFEET

图plotPartialDependence (CMdl, (“RESIDENTIALUNITS”“LANDSQUAREFEET”]、[tbl_training;tbl_test])

小的滴答声x设在(RESIDENTIALUNITS),y设在(LANDSQUAREFEET)表示指定数据中预测器的唯一值。预测值包括一些异常值,大多数RESIDENTIALUNITSLANDSQUAREFEET值分别小于10和50000。这个情节表明SALEPRICE属性时值不会发生显著变化RESIDENTIALUNITSLANDSQUAREFEET取值范围大于10和50000。

另请参阅

||||||

相关的话题