我正在尝试使用fitrtree模型进行回归。它在没有验证的情况下工作正常,但通过验证,预测函数会返回错误。
%works fine
tree = fitrtree(trainingData,target,'MinLeafSize',2, 'Leaveout','off');
y_hat = predict(tree, xNew);
%Returns error
tree = fitrtree(trainingData,target,'MinLeafSize',2, 'Leaveout','on');
y_hat = predict(tree, xNew);
错误:classreg.learning.partition.RegressionPartitionedModel类的系统不能与"预测" 命令。首先将系统转换为标识的模型,例如使用" idss"命令。
更新:我发现当我们使用任何排序的交叉验证时,模型都在树的Trained属性中,而不是树本身。什么是训练有素的属性(tree.Trained {1})以及我们从中得到什么信息。?
答案 0 :(得分:1)
如果在调用fitrtree()
时选择了交叉验证方法,则函数的输出将是 RegressionPartitionedModel 而不是 RegressionTree 。
如您所说,您可以访问根据情况存储在tree.Trained
中的 RegressionTree 类型的对象。在此属性下找到的树的数量和含义取决于交叉验证模型。在您的情况下,使用留一法交叉验证(LOOCV),Trained属性包含 N RegressionTree 对象,其中 N 是训练集中的数据点数。这些回归树中的每一个都是通过对除一个数据点以外的所有数据点进行训练而获得的。剩下的数据点用于测试。
例如,如果要访问通过交叉验证获得的第一棵和最后一棵树,并将其用于单独的预测,则可以执行以下操作:
%Returns RegressionPartitionedModel
cv_trees = fitrtree(trainingData,target,'MinLeafSize',2, 'Leaveout','on');
%This is the number of regression trees stored in cv_trees for LOOCV
[N, ~] = size(trainingData);
%Use one of the models from the cross-validation as a predictor
y_hat = predict(tree.Trained{1}, xNew);
y_hat_2 = predict(tree.Trained{N}, xNew);