我正在考虑使用随机森林来解决分类问题。数据是按顺序来的。我计划使用前N(500)来训练分类器。然后,使用分类器对数据进行分类。它会犯错误,错误有时可以被记录下来。
我的问题是:我可以使用这些错误分类的数据来重新训练原始分类器吗?如果我简单地将错误分类的样本添加到大小为N的原始训练集中,那么错误分类样本的重要性将被夸大,因为更正后的分类样本会被忽略。我必须使用所有数据重新训练分类器吗?还有哪些分类器可以进行这种学习?
发布于 2013-07-09 00:58:04
您所描述的是Boosting元算法的基本版本。
如果你的底层学习者有一种自然的方法来处理样本权重,那就更好了。我还没有尝试提升随机森林(通常boosting用于深度限制在1到3之间的单个浅层决策树),但这可能会起作用,但可能会占用大量CPU。
或者,您可以使用不同的PRNG种子值并行训练多个独立的增强决策树桩,然后聚合最终决策函数,就像您对随机森林所做的那样(例如,投票或平均类概率分配)。
如果你使用的是Python,你应该看看scikit-learn documentation on the topic。
免责声明:我是一名scikit-learn贡献者。
发布于 2013-07-09 03:05:46
这是我对你的问题的理解。
您有一个数据集,并使用它创建了两个子数据集,例如,训练数据集和评估数据集。如何使用评估数据集来提高分类性能?
这个问题的重点不是找到一个更好的分类器,而是找到一个好的方法来评估,然后在生产环境中有一个好的分类器。
评估目的
由于评估数据集已被标记为评估,因此现在有办法做到这一点。您必须使用另一种方法进行培训和评估。
一种常见的方法是使用cross-validation;
对数据集中的样本进行随机化。从初始数据集创建10个分区。然后进行以下十次迭代:使用除第n个分区之外的所有分区进行训练,并使用第n个分区进行评估。
在此之后,取十次运行的误差的中位数。这将为您提供分类器的错误率。最小的运行会给你带来最坏的情况。
生产目的
(不再进行评估)
你不再关心评估了。因此,获取所有数据集的所有样本,并将其提供给分类器进行训练(重新运行完整的简单训练)。结果可以在生产环境中使用,但不能再用您的任何数据进行评估。其结果与先前分区集中的最坏情况一样好。
流样本处理
(生产或学习)
当您处于随着时间推移而产生新样本的流程中时。你将面临一些样本纠正错误的情况。这是我们想要的行为,因为我们希望系统自我改进。如果你只是就地纠正错误中的叶子,在一段时间后,你的分类器将与原始的随机森林没有任何共同之处。你将会做一种贪婪的学习,比如meta taboo search。很明显,我们不想要这个。
如果我们试图在每次有新样本可用时重新处理所有数据集+新样本,我们将体验可怕的低延迟。解决方案就像人类一样,有时后台进程运行(当服务使用率较低时),所有数据都会得到完整的重新学习;最后交换新旧分类器。
有时睡眠时间太短,无法完全重新学习。因此,您必须使用节点计算集群like that。它花费了大量的开发,因为你可能需要重写算法;但在那个时候,你已经拥有了你能找到的最大的计算机。
注意:交换过程对于掌握是非常重要的。你应该已经在你的生产计划中有它了。如果你想改变算法,你该怎么做?后援?基准测试?断电了吗?等等。
发布于 2015-05-20 03:33:14
我会简单地添加新数据,并定期重新训练分类器,如果它不是太昂贵的话。
保持平衡的一个简单方法是增加权重。
如果你用1/n_positive加权所有正样本,用1/n_negative加权所有负样本(包括你得到的所有新的负样本),那么你就不必担心分类器失去平衡。
https://stackoverflow.com/questions/17522608
复制相似问题