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

Train an existing opencv model with new data

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

我正在考虑这样的事情

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

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

我没有在 opencv 文档中找到关于此的任何信息。

简答:否

Long answer: 在训练过程中,当决策树通过一个大的训练集时,树中的每个分裂节点学习一个特征集和一个对应的阈值。树的分支终止于叶节点,叶节点随后存储预测值。如果您已经训练了决策树,那么它已经从训练集中学习了所有特征、阈值和预测值。用额外的数据再次训练它会使之前学习的参数变得无用。

另一种看待这个问题的方法是考虑随机森林,它是由一组树形成的。鉴于您的新数据集与模型之前看到的数据没有太大区别。如果你愿意,你可以训练一棵新树并将它添加到一组以前训练过的树中。在预测过程中,您可以对所有树的预测进行平均以获得整体预测。