【问题标题】:Train an existing opencv model with new data使用新数据训练现有的 opencv 模型
【发布时间】:2016-10-10 10:19:56
【问题描述】:

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

我在想这样的事情

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

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

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

【问题讨论】:

  • 从直觉来看,应该可以从现有的 dt 创建样本(用于新训练)应该快速创建相同的树。但实际上只是直觉

标签: c++ opencv decision-tree


【解决方案1】:

简短回答:否

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

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

【讨论】:

    猜你喜欢
    • 2013-07-06
    • 2019-05-01
    • 1970-01-01
    • 2013-12-06
    • 2018-10-23
    • 1970-01-01
    • 2023-02-17
    • 2017-08-19
    • 2020-05-06
    相关资源
    最近更新 更多