大量的多项式朴素贝叶斯课程(scikit-learn)

时间:2016-01-07 15:46:33

标签: machine-learning scikit-learn naivebayes

每当我开始拥有更多的类(1000或更多)时,MultinominalNB变得非常慢并且需要数千兆字节的RAM。对于支持.partial_fit()(SGDClassifier,Perceptron)的所有scikit学习分类算法也是如此。 使用卷积神经网络时,10000个类没有问题。但是当我想在相同数据上训练MultinominalNB时,我的12GB内存还不够,而且速度非常慢。 根据我对朴素贝叶斯的理解,即使有很多课程,也应该快得多。 这可能是scikit-learn实现的问题(也许是.partial_fit()函数)?如何在10000多个类别(批处理)上训练MultinominalNB / SGDClassifier / Perceptron?

1 个答案:

答案 0 :(得分:1)

没有太多信息的简短回答:

  • MultinomialNB为每个类配备独立模型,因此,如果您有C=10000+个类,它将适合C=10000+个模型,因此,只有模型参数将为[n_classes x n_features],如果n_features很大,则会占用大量内存。

  • scikits-learn的SGDClassifier使用OVA(one-versus-all)策略来训练多类模型(因为SGDC本身并不是多类),因此需要训练另一个C=10000+模型

  • Perceptron,来自scikits-documentation的文档:

  

Perceptron和SGDClassifier共享相同的底层实现。实际上,Perceptron()等同于SGDClassifier(loss =“perceptron”,eta0 = 1,learning_rate =“constant”,惩罚=无)。

因此,你提到的所有3个分类器都不适用于大量的类,因为需要为每个类训练一个独立的模型。我建议你尝试一些本质上支持多类分类的东西,比如RandomForestClassifier