【问题标题】:progressive random forest?渐进式随机森林?
【发布时间】:2013-07-05 13:08:29
【问题描述】:

我正在考虑使用随机森林来解决分类问题。数据按顺序出现。我计划使用第一个 N(500) 来训练分类器。然后,使用分类器对之后的数据进行分类。它会犯错误,有时可以记录错误。

我的问题是:我可以使用那些错误分类的数据来重新训练原始分类器吗?如何?如果我只是将错误分类的那些添加到大小为 N 的原始训练集中,那么错误分类的重要性将被夸大,因为正确分类的那些被忽略了。我是否必须使用所有数据重新训练分类器?还有哪些分类器可以做这种学习?

【问题讨论】:

    标签: machine-learning classification random-forest


    【解决方案1】:

    您描述的是Boosting 元算法的基本版本。

    如果您的基础学习者能够自然地处理样本权重,那就更好了。我没有尝试提升随机森林(通常提升用于深度限制在 1 到 3 之间的单个浅层决策树),但这可能有效,但可能会占用大量 CPU。

    或者,您可以使用不同的 PRNG 种子值并行训练几个独立的增强决策树桩,然后像使用随机森林一样聚合最终决策函数(例如投票或平均类概率分配)。

    如果你使用 Python,你应该看看scikit-learn documentation on the topic

    免责声明:我是 scikit-learn 的贡献者。

    【讨论】:

    • 我想知道风铃是否意味着一旦部署了分类器就会有关于正确性的反馈,以便新的数据点可用于训练。那么您是否需要进行在线培训而不是批量培训?
    • 在这种情况下,在考虑人工修正的情况下,根据所有标记数据的总和重新训练新模型可能要快得多。
    • jonnydedwards 所说的正是我在问题中的意思。我关心的是在生产中部署分类器后改进分类器。用户采用后,我有机会收到有关其正确性的反馈。当它正确分类时,用户什么也不说。如果它分类错误,用户有时会告诉我。那么,如何将那些报告的错误分类的案例合并到分类器中呢?
    • 您将更正后的标记数据添加到聚合训练集中,然后重新训练新模型。然而,自动化模型更新和部署以自动考虑用户反馈可能是有风险的(取决于应用程序的类型),因为恶意用户可以利用此反馈循环并通过注入大量有毒输入来操纵系统。在这种情况下,最好让一个值得信赖的人工版主参与进来。
    【解决方案2】:

    这是我对您的问题的理解。

    您有一个数据集并用它创建两个子数据集,即训练数据集和评估数据集。 如何使用评估数据集来提高分类性能?

    这个问题的重点不是找到更好的分类器,而是找到一个好的评估方法,然后在生产环境中拥有一个好的分类器。


    评估目的

    由于评估数据集已被标记为评估,现在您可以这样做。您必须使用其他方式进行培训和评估。

    一种常见的方法是交叉验证

    随机化数据集中的样本。从您的初始数据集创建十个分区。然后执行以下十次迭代: 取除第 n 个分区以外的所有分区进行训练,并用第 n 个分区进行评估。

    在此之后取十次运行的错误的中位数。 这将为您提供分类器的错误率。 最少的运行会给您带来最坏的情况。


    生产目的

    (不再评价)

    您不再关心评估。因此,获取所有数据集的所有样本并将其用于训练分类器(重新运行完整的简单训练)。结果可用于生产环境,但不能再使用您的任何数据进行评估。结果与先前分区集中的最坏情况一样好。

    流样本处理

    (生产或学习)

    当您处于随着时间推移产生新样本的流程中时。您将面临一些示例正确错误情况的情况。这是想要的行为,因为我们希望系统 提高自己。如果您只是纠正错误的叶子,经过一段时间后,您的 分类器与原始随机森林没有任何共同之处。你会做 一种贪婪学习的形式,例如meta taboo search。显然我们不想这样

    如果我们尝试在每次有新样本可用时重新处理所有数据集 + 新样本,我们将体验到可怕的低延迟。解决方案就像人类,有时 后台进程运行(当服务使用率低时),所有数据都完成 重新学习;最后交换新旧分类器。

    有时睡眠时间太短,无法完成重新学习。所以你必须使用节点计算集群like that。它花费了大量的开发成本,因为您可能需要重新编写算法;但那时你已经拥有了你能找到的最大的电脑。

    注意:Swap 过程对掌握非常重要。您应该已经将它包含在您的生产计划中。如果你想改变算法,你会怎么做?备份?基准?停电?等等……

    【讨论】:

    • 我的问题实际上与初始交叉验证无关。更多的是在生产中部署分类器后,您还有机会收到有关其正确性的反馈。当它正确分类时,用户什么也不说。如果它错误分类,用户有时会告诉你。那么,我应该如何将用户的反馈融入到原始培训中呢?
    • 好的,我正在为此用例添加详细信息。
    【解决方案3】:

    如果不太昂贵,我会简单地添加新数据并定期重新训练分类器。

    保持平衡的一个简单方法是添加权重。

    如果您按 1/n_positive 对所有正样本加权,按 1/n_negative 对所有负样本加权(包括您获得的所有新负样本),那么您不必担心分类器会失去平衡。

    【讨论】:

      猜你喜欢
      • 2017-03-15
      • 2014-08-07
      • 2015-10-15
      • 2015-02-15
      • 2018-07-10
      • 2015-09-16
      • 2012-07-20
      • 1970-01-01
      相关资源
      最近更新 更多