Python 多处理scikit学习

Python 多处理scikit学习,python,multithreading,numpy,machine-learning,scikit-learn,Python,Multithreading,Numpy,Machine Learning,Scikit Learn,我使用load\u file方法让linearsvc在训练集和测试集上工作,我正在尝试让它在多处理器环境下工作 如何在LinearSVC().fit()LinearSVC().predict()上获得多处理工作?我还不太熟悉scikit learn的数据类型 我也在考虑将样本拆分为多个阵列,但我不熟悉numpy阵列和scikit学习数据结构 这样做可以更容易地放入multiprocessing.pool(),这样就可以将样本分割成块,对它们进行训练,然后再将训练好的数据集组合起来,这样做行吗 编

我使用
load\u file
方法让linearsvc在训练集和测试集上工作,我正在尝试让它在多处理器环境下工作

如何在
LinearSVC().fit()
LinearSVC().predict()上获得多处理工作?我还不太熟悉scikit learn的数据类型

我也在考虑将样本拆分为多个阵列,但我不熟悉numpy阵列和scikit学习数据结构

这样做可以更容易地放入multiprocessing.pool(),这样就可以将样本分割成块,对它们进行训练,然后再将训练好的数据集组合起来,这样做行吗

编辑: 以下是我的设想:

比如说,我们在训练样本集中有100万个文件,当我们想在几个处理器上分发Tfidfvectorizer的处理时,我们必须拆分这些样本(在我的情况下,它将只有两个类别,所以让我们假设每个要训练的样本为500000个)。我的服务器有24个内核,48 GB,所以我想将每个主题分成1000000/24个块,并在这些块上处理Tfidfvectorizer。像这样,我将测试样本集,以及SVC.fit()和decision()。这有意义吗

谢谢


PS:请不要关闭此项。

我认为对此类数据使用SGDClassizer而不是LinearSVC将是一个好主意,因为它要快得多。对于矢量化,我建议您查看

对于多处理:您可以将数据集分布在多个核之间,进行
部分拟合
,获取权重向量,对其进行平均,将其分配给估计器,然后再次进行部分拟合

并行梯度下降是一个活跃的研究领域,因此没有现成的解决方案

顺便问一下,您的数据有多少类?对于每个班级,将(自动)培训一名单独的学员。如果您的类几乎与核心一样多,那么通过在SGDClassizer中指定
n_jobs
,每个核心只做一个类可能会更好更容易。

对于线性模型(
LinearSVC
SGDClassizer
感知器
),您可以对数据进行分块,通过将
coef
intercept
的平均值作为属性,在每个区块上训练独立模型,并构建聚合线性模型(例如
SGDClasifier
)。
LinearSVC
sgdclassizer
Perceptron
predict
方法计算相同的函数(使用具有
截距
阈值和一对多类支持的点积进行线性预测),因此用于保存平均系数的特定模型类并不重要

然而,正如前面所说,难点在于并行化特征提取,而当前的scikit learn(版本0.12)并没有提供任何方法来轻松实现这一点


编辑:scikit learn 0.13+现在有一个无状态的哈希向量器。

如果我错了,请纠正我,但SVM通常不会花很长时间做出决定。并行执行不同样本的解码可能比并行执行一个样本的解码更有意义。如果我要在2100万个文档上这样做呢?这会花很长时间吗?我也在考虑不同的样品,在每个过程中拆分后是否能够重新组合不同的样品?我想我不明白你的问题。样本是独立的。为什么必须重新组合某些内容?
TFIDFvectorier
对于中心词汇表来说是不可并行的。我们要么需要一个共享词汇表(例如,在集群上使用redis服务器),要么实现一个尚不存在的
HashVectorizer
。将只有3个类。SGDClassifer和LinearSVC一样精确吗?我会到处测试的。谢谢,伙计,我会看看测试出来的。那么TFIDF矢量器还不能并行对吗?而且,特征提取在我们的测试中花费的时间最多。是的,这是scikit学习的一个已知限制。使用哈希向量器进行高效并行文本特征提取在我的个人优先级列表中占有很高的位置,但我现在的优先级更高:)Ic,如果我想贡献我应该从哪里开始?如果你想贡献一个哈希文本向量器,你应该首先通过阅读它的源代码和相关文件的源代码来熟悉现有的
countvectorier
实现。然后阅读下面的文章,然后看看这是密切相关的,但不是散列文本向量。