我想训练一个双向分类器,也就是说,假设我有 4 个类,我想将文本分类到其中。我不想将所有训练数据分组到一个训练集中,然后标签将是 4 个标签。相反,我想制作一个二进制标签。例如,我必须首先制作数据集的 4 个副本,然后,我制作标签 A,其余的不是 A,然后第二个数据集将是 B 和 Not B,依此类推。
之后,我必须制作 4 个模型(例如朴素贝叶斯)并训练我制作的每个数据集。我想要的是一种不需要所有这些工作就能完成所有这些工作的方法。这可能吗?
最佳答案
是的,这种单独的二元分类器适用于单个数据集中存在的多个类中的每个类的策略称为“一对一”或 "one versus rest" 。一些 sklearn 模型将此作为参数提供,例如 logistic regression您可以在其中将 multi_class
参数设置为 'ovr'
以进行一次休息。
有一个很好的 sklearn 对象,它可以让其他算法变得简单,名为 OneVersusRestClassifier 。对于您的朴素贝叶斯示例,它很简单:
from sklearn.multiclass import OneVsRestClassifier
from sklearn.naive_bayes import GaussianNB
clf = OneVsRestClassifier(GaussianNB())
然后您可以从那里正常使用您的分类器,例如clf.fit(X,y)
(有趣的是,正如我最初假设的那样,当存在三个或更多类时,一与所有朴素贝叶斯模型并不简单地等同于多项式朴素贝叶斯。有一个简短的示例 here 演示了这一点。)
关于python - 有没有一种快速的方法可以同时训练多个模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56417753/