我在MATLAB 2015b中使用fitctree构建了一个简单的分类树。我想开始使用它来预测新数据(tabletest)。 'Predict'给了我一个错误,我不确定如何在新数据上使用kfoldPredict。
代码:
predict(Mdl10feat,tabletest)
错误:
Undefined function 'predict' for input arguments of type
'classreg.learning.partition.ClassificationPartitionedModel'.
分类器:
Mdl10feat =
classreg.learning.partition.ClassificationPartitionedModel
CrossValidatedModel: 'Tree'
PredictorNames: {'fermin' 'MAJ' 'SOL' 'ECC' 'ORI' 'W' 'H' 'CIRC1' 'EQU' 'CONT'}
ResponseName: 'classROI'
NumObservations: 376810
KFold: 10
Partition: [1x1 cvpartition]
ClassNames: {'Hit' 'Miss'}
ScoreTransform: 'none'
输入:
tabletest =
fermin MAJ SOL ECC ORI W H CIRC1 EQU CONT
______ ______ _______ _______ ______ ______ ______ ______ ______ ____
29.748 46.342 0.98621 0.76677 87.506 27.307 43.691 1.0426 36.847 149
我在这里做错了什么?
答案 0 :(得分:2)
fitctree
的文档,特别是output argument tree
的文档,说明如下:
分类树,作为分类树对象返回。
使用
'CrossVal'
,'KFold'
,'Holdout'
,'Leaveout'
或'CVPartition'
选项会生成类ClassificationPartitionedModel
的树。 您无法使用分区树进行预测,因此这种树没有predict
方法。相反,使用kfoldPredict
来预测未用于训练的观察结果的响应。否则,
tree
属于ClassificationTree
类,您可以使用predict
方法进行预测。
由于您的输出属于ClassificationPartitionedModel
类型,因此您必须使用kfoldPredict
方法。
请注意我在上面以粗体显示的语句:分区树不能用于预测新数据。这是因为给fitctree
的数据集用于 训练和测试/验证。从上面的模型输出中可以看出,您使用的'KFold'
值为10.这意味着您的数据首先被划分为10个集合,然后每个集合被用作另一个训练模型的验证集合。 9. kfoldPredict
方法为您提供分类结果。
如果您想使用所有数据来训练模型,然后对新数据使用predict
,则必须避免使用'CrossVal'
,'KFold'
,{{1}在调用'Holdout'
时,},'Leaveout'
或'CVPartition'
选项。