10

load_file我让linearsvc使用我试图让它在多处理器环境中工作的方法来对抗训练集和测试集。

我怎样才能进行多处理工作LinearSVC().fit() LinearSVC().predict()?我还不太熟悉 scikit-learn 的数据类型。

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

这样做会更容易放入 multiprocessing.pool() 中,这样,将样本分成块,训练它们并稍后组合训练集,它会工作吗?

编辑:这是我的场景:

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

谢谢。

PS:请不要关闭这个。

4

2 回答 2

13

我认为对这种数据使用 SGDClassifier 而不是 LinearSVC 会是一个好主意,因为它要快得多。对于矢量化,我建议您查看散列转换器 PR

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

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

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

于 2012-10-26T07:36:25.260 回答
11

对于线性模型(LinearSVC, SGDClassifier, Perceptron...),您可以对数据进行分块,在每个块上训练独立模型并通过将和作为属性SGDClasifier的平均值插入其中来构建聚合线性模型(例如 ) 。的方法, ,计算相同的函数(使用具有阈值的点积和 One vs All 多类支持进行线性预测),因此用于保存平均系数的特定模型类并不重要。coef_intercept_predictLinearSVCSGDClassifierPerceptronintercept_

然而,如前所述,棘手的一点是并行化特征提取,而当前的 scikit-learn(0.12 版)并没有提供任何方法来轻松做到这一点。

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

于 2012-10-26T09:24:50.537 回答