matlab用fitrtree模型预测函数误差。

问题描述 投票:2回答:1

我试图用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类的系统不能与 "predict "命令一起使用。请先将系统转换为已识别的模型,如使用 "idss "命令。

更新一下。 我发现当我们使用任何形式的交叉验证时,模型都在树的训练属性中,而不是树本身。 这个训练属性是什么(tree.Trained{1}),我们能从中得到什么信息?

matlab machine-learning regression decision-tree
1个回答
1
投票

如果您在调用 fitrtree(),函数的输出是一个 回归分割模型(RegressionPartitionedModel) 而非 回归树.

正如你所说,你可以访问类型为 回归树 储存在 tree.Trained 在你的情况下。你在这个属性下找到的树的数量和意义取决于交叉验证模型。在您的案例中,使用 留一漏一交叉验证 (LOOCV),Trained属性包含了 N 回归树 对象,其中 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);
© www.soinside.com 2019 - 2024. All rights reserved.