在 scikit-learn 中使用 python 生成器 [关闭]

Posted

技术标签:

【中文标题】在 scikit-learn 中使用 python 生成器 [关闭]【英文标题】:Using python generators in scikit-learn [closed] 【发布时间】:2014-01-24 00:02:20 【问题描述】:

我想知道是否以及如何使用 python 生成器作为 scikit-learn 分类器的 .fit() 函数的数据输入?由于大量的数据,这对我来说似乎很有意义。

特别是我即将实施随机森林方法。

问候 克

【问题讨论】:

您为什么不亲自尝试一下呢?这似乎不是您自己无法弄清楚的事情。 @InbarRose 对我来说似乎不是那么简单。经典的随机森林不是在线分类器,所以简单的答案是“你不能”。有一些方法可以解决这个问题,但很棘手,我怀疑它们是否在 sklearn 中实现。 这个问题有什么不清楚的地方? 我发现自己的问题很清楚,larsmans 和 alko 的答案都是正确的。我认为应该删除 [on hold] 标签。 @larsmans 和 alkothanx 提供答案。正是我想知道的。关于[坚持]当然,如果愿意,我会澄清这个问题。不过,我可能需要关于不清楚的地方的建议。 【参考方案1】:

答案是“不”。要使用随机森林进行核心外学习,您应该

    将您的数据分成大小合理的批次(受您拥有的 RAM 数量限制;越大越好); 训练单独的随机森林;

    将所有底层树一起附加到其中一棵树的estimators_ 成员中(未经测试):

    for i in xrange(1, len(forests)):
        forests[0].estimators_.extend(forests[i].estimators_)`
    

(是的,这很骇人听闻,但尚未找到解决此问题的方法。请注意,对于非常大的数据集,仅采样一些适合大型机器 RAM 的训练示例而不是训练可能是值得的对所有这些。另一种选择是切换到使用 SGD 的线性模型,它们实现了 partial_fit 方法,但显然它们可以学习的函数种类有限。)

【讨论】:

【参考方案2】:

简短的回答是“不,你不能”。经典随机森林分类器不是增量分类器或在线分类器,因此您不能在学习时丢弃训练数据,而必须一次性提供所有数据集。

由于 RF 在机器学习中的普及(尤其是因为某些有趣案例的良好预测结果),有一些尝试实现随机森林的在线变体,但据我所知,这些还没有在任何 python 中实现机器学习包。

请参阅Amir Saffari's page 了解这种方法(不是 Python)。

【讨论】:

以上是关于在 scikit-learn 中使用 python 生成器 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

使用 Scikit-Learn 在 Python 中绘制随机森林的树

如何在 scikit-learn 的 SVM 中使用非整数字符串标签? Python

使用 Scikit-Learn 在 Python 中绘制多项式回归

想要在不使用 Scikit-Learn 的情况下在 python 中构建支持向量机的真正建议 [关闭]

使用 scikit-learn 和 matplotlib 在 python 中重新创建决策边界图

python中使用scikit-learn的决策树算法运行错误