1

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

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

4

3 回答 3

1

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

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

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


评估目的

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

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

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

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


生产目的

(不再评价)

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

流样处理

(生产或学习)

当您处于随着时间推移产生新样本的流程中时。您将面临一些示例正确错误情况的情况。这是我们想要的行为,因为我们希望系统能够自我改进。如果你只是纠正错误的叶子,一段时间后你的分类器将与原始随机森林没有任何共同之处。您将进行一种贪婪学习,例如元禁忌搜索。显然我们不想要这个

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

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

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

于 2013-07-08T19:05:46.400 回答
1

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

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

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

如果您使用的是 Python,则应该查看有关该主题的 scikit-learn 文档

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

于 2013-07-08T16:58:03.800 回答
0

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

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

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

于 2015-05-19T19:33:14.300 回答