有没有一种快速的方法可以同时训练多个模型?

Posted

技术标签:

【中文标题】有没有一种快速的方法可以同时训练多个模型?【英文标题】:Is there a fast way to train many models at the same time? 【发布时间】:2019-10-18 10:35:48 【问题描述】:

我想训练一个 2 路分类器,也就是说,假设我有 4 个要对文本进行分类的类。我不想将所有训练数据分组到一个训练集中,然后标签将是 4 个标签。相反,我想制作一个二进制标签。例如,我必须首先制作 4 个数据集副本,然后,我制作标签 A,其余的不是 A,然后第二个数据集将是 B 和 Not B,依此类推..

之后,我必须制作 4 个模型(例如朴素贝叶斯)并训练我制作的每个数据集。我想要的是一种无需所有这些工作即可完成所有这些工作的方法。这可能吗?

【问题讨论】:

【参考方案1】:

是的,这种将单独的二元分类器适用于单个数据集中存在的多个类中的每一个的策略称为“一对多”或"one versus rest"。一些 sklearn 模型附带此参数作为参数,例如 logistic regression ,您可以将 multi_class 参数设置为 'ovr' 一个 v.rest。

有一个很好的 sklearn 对象,它可以让其他称为 OneVersusRestClassifier 的算法变得容易。对于您的朴素贝叶斯示例,它很简单:

from sklearn.multiclass import OneVsRestClassifier
from sklearn.naive_bayes import GaussianNB

clf = OneVsRestClassifier(GaussianNB())

然后您可以从那里照常使用您的分类器,例如clf.fit(X,y)

(有趣的是,当我最初假设存在三个或更多类时,一个与所有朴素贝叶斯模型并不简单地等同于多项朴素贝叶斯。有一个简短的例子 here 可以证明这一点。)

【讨论】:

我正在使用管道和文本分类,它给了我这个错误:A sparse matrix was passed, but dense data is required. Use X.toarray() to convert to a dense numpy array.

以上是关于有没有一种快速的方法可以同时训练多个模型?的主要内容,如果未能解决你的问题,请参考以下文章

TensorFlow 同时调用多个预训练好的模型

对抗训练

模型训练过程中的训练集训练开发集开发集和测试集总结

观察学习曲线

观察学习曲线

keras中的预训练对象检测模型