多处理scikit-learn

Phy*_*win 10 python multithreading numpy machine-learning scikit-learn

我让linearsvc使用load_file方法对抗训练集和测试集我试图让它在Multiprocessor环境中工作.

如何进行多处理工作LinearSVC().fit() LinearSVC().predict()?我还不熟悉scikit-learn的数据类型.

我也在考虑将样本分成多个数组,但我不熟悉numpy数组和scikit-learn数据结构.

这样做会更容易进入multiprocessing.pool(),然后将样本拆分成块,训练它们并稍后将训练后的集合组合起来,它会起作用吗?

编辑:这是我的方案:

比方说,我们在训练样本集中有100万个文件,当我们想要在几个处理器上分发Tfidfvectorizer的处理时,我们必须分割这些样本(对于我的情况,它只有两个类别,所以假设每个样本需要500000个训练) .我的服务器有24个内核,48 GB,所以我想将每个主题分成块数1000000/24并处理它们的Tfidfvectorizer.就像我将测试样本集,以及SVC.fit()和决定().是否有意义?

谢谢.

PS:请不要关闭它.

And*_*ler 13

我认为使用SGDClassifier而不是LinearSVC这种数据是一个好主意,因为它更快.对于矢量化,我建议你研究一下哈希变换器PR.

对于多处理:您可以跨核心分发数据集,执行partial_fit,获取权重向量,对它们求平均值,将它们分配给估算器,再次进行部分拟合.

做平行梯度下降是一个积极研究的领域,因此那里没有现成的解决方案.

你的数据有多少课?对于每个班级,将单独培训(自动).如果你的内核几乎和内核一样多,那么通过n_jobs在SGDClassifier中指定,每个内核只执行一个类可能会更好更容易.


ogr*_*sel 11

对于线性模型(LinearSVC,SGDClassifier,Perceptron...),您可以大块数据,火车每块独立的模型,建立一个总的线性模型(例如SGDClasifier在坚持它的平均值)coef_,并intercept_为属性.所述predict的方法LinearSVC,SGDClassifier,Perceptron(使用点积与线性预测计算出相同的功能intercept_的阈值和一个VS所有多类别支持),以便使用用于保持平均系数的特定的模型类并不重要.

然而,如前所述,棘手的问题是并行化特征提取和当前的scikit-learn(版本0.12)并没有提供任何方法来轻松完成.

编辑:scikit-learn 0.13+现在有一个无状态的散列矢量化器.