使用新数据训练现有的opencv模型

时间:2016-10-09 17:39:04

标签: c++ opencv decision-tree

我正在使用opencv Decision Trees来创建分类器。我想知道是否可以重新训练该模型(可以保存并加载到.yml文件中)添加新数据。我正在使用的Opencv版本是2.4。

我在想这样的事情

CvDTree dtree;
dtree.load("existingTree.yml");
dtree.train(newValues, CV_ROW_SAMPLE, newResponses);

newValues仅包含新样本,newResponses包含该值的类。这会产生一个新的决策树,用第一个训练过程的旧值和新的训练过程进行训练吗?

我没有找到有关此问题的opencv文档的任何信息。

1 个答案:

答案 0 :(得分:0)

简答:否

长答案:在训练期间,当决策树通过大型训练集时,树中的每个分裂节点都学习特征集和相应的阈值。树的分支以叶节点终止,叶节点然后存储预测值。如果您已经训练了决策树,那么它已经从训练集中学习了所有特征,阈值和预测值。使用其他数据再次训练会使先前学习的参数无效。

另一种看待这种情况的方法是想到由一群树木组成的随机森林。鉴于您的新数据集与模型之前看到的数据没有太大差异。如果您愿意,可以训练一棵新树并将其添加到一组先前训练过的树上。在预测期间,您可以对所有树的预测进行平均以获得总体预测。