我想知道是否以及如何使用python生成器作为scikit-learn分类器的.fit()函数的数据输入?由于数据量巨大,这对我来说似乎是有意义的。
特别是,我将实施随机森林方法。
问候K
答案是否定的。要使用随机森林进行核心学习,您应该
- 将数据拆分为合理大小的批次(受您拥有的 RAM 数量的限制;越大越好);
- 训练单独的随机森林;
-
将所有基础树一起追加到其中一个树的
estimators_
成员中(未经测试):for i in xrange(1, len(forests)): forests[0].estimators_.extend(forests[i].estimators_)`
(是的,这很笨拙,但尚未找到此问题的解决方案。请注意,对于非常大的数据集,只需对适合大型机器 RAM 的一些训练示例进行采样,而不是对所有样本进行训练,可能会有所作为。另一种选择是切换到带有SGD的线性模型,这些模型实现了partial_fit
方法,但显然它们可以学习的函数类型受到限制。
简短的回答是"不,你不能"。经典随机森林分类器不是增量或在线分类器,因此您不能在学习时丢弃训练数据,而必须一次提供所有数据集。
由于RF在机器学习中的普及(尤其是因为一些有趣案例的良好预测结果),有一些尝试来实现随机森林的在线变体,但据我所知,这些尚未在任何python ML包中实现。
参见Amir Saffari的页面了解这种方法(不是Python)。