MATLAB:使用fitctree训练的分类器对新数据进行标签预测

时间:2018-02-16 15:52:16

标签: matlab label classification decision-tree predict

我在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 

我在这里做错了什么?

1 个答案:

答案 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'选项。