大量的类具有多重朴素贝叶斯(scikit学习)



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

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

  • MultinomialNB将独立模型适用于每个类,因此,如果您有C=10000+类,它将适用于C=10000+模型,因此,只有模型参数将是[n_classes x n_features],如果n_features很大,这将是相当多的内存。

  • scikit学习的SGDC分类器使用OVA(一对一)策略来训练多类模型(因为SGDC本质上不是多类的),因此需要训练另一个C=10000+模型。

  • 和Perceptron,从scikit的文档学习:

感知器和SGD分类器共享相同的底层实现。事实上,Perceptron()相当于SGD分类器(loss="感知器",eta0=1,learning_rate="常数",惩罚=无)。

因此,您提到的所有3个分类器都不能很好地处理大量的类,因为需要为每个类训练一个独立的模型。我建议你尝试一些天生支持多类分类的东西,比如RandomForestClassifier。

最新更新