每当我开始拥有更多的类(1000个或更多)时,MultinominalNB就会变得非常慢,并占用数GB的RAM。对于所有支持.partial_fit()(SGDClassifier,Perceptron)的scikit学习分类算法,情况都是如此。
使用卷积神经网络时,没有10000个类别。但是,当我想在同一数据上训练MultinominalNB时,我的12GB RAM不够用,而且非常慢。
根据我对朴素贝叶斯的理解,即使有很多课程,也应该更快。
这可能是scikit-learn实现的问题(可能是.partial_fit()函数的问题)吗?如何在10000多个类(批处理)上训练MultinominalNB / SGDClassifier / Perceptron?
最佳答案
没有太多信息的简短答案:
MultinomialNB适合每个类的独立模型,因此,如果您有C=10000+
类,它将适合C=10000+
模型,因此,只有模型参数为[n_classes x n_features]
,如果n_features
cc>很大。
scikits-learn的SGDClassifier使用OVA(一对多)策略来训练多类模型(因为SGDC本质上不是多类),因此,需要训练另一个C=10000+
模型。
Perceptron,来自scikits-learn的文档:
Perceptron和SGDClassifier共享相同的基础实现。实际上,Perceptron()等效于SGDClassifier(损失=“ perceptron”,eta0 = 1,learning_rate =“常数”,惩罚=无)。
因此,您提到的所有3个分类器都不能很好地用于大量的类,因为需要为每个类训练一个独立的模型。我建议您尝试一些固有支持多类分类的方法,例如RandomForestClassifier。
关于machine-learning - 多项式朴素贝叶斯(scikit-learn),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34659367/