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