每當我開始擁有更多的類(1000以上)時,MultinominalNB會變得非常慢並且需要千兆字節的RAM。對於支持.partial_fit()(SGDClassifier,Perceptron)的所有scikit學習分類算法也是如此。 使用卷積神經網絡時,10000個班級沒有問題。但是當我想在相同的數據上訓練MultinominalNB時,我的12GB RAM是不夠的,而且速度非常慢。 從我對樸素貝葉斯的理解,即使有很多類,它應該快很多。 可能這是scikit-learn實現的問題(可能是.partial_fit()函數)?我如何在10000+課程(分批)上培訓MultinominalNB/SGDClassifier/Perceptron?具有Multinominal樸素貝葉斯的大量類(scikit-learn)
回答
簡短的回答沒有太多的信息:
的MultinomialNB適合的獨立模型到每個班的,因此,如果你有
C=10000+
類它將適合C=10000+
模型,因此,只有模型參數將是[n_classes x n_features]
,如果n_features
很大,這將是相當多的內存。scikits-learn的SGDClassifier使用OVA(one-versus-all)策略來訓練多類模型(因爲SGDC本質上不是多類型的),因此需要對另一個
C=10000+
模型進行培訓。而且感知,從文檔scikits學習:
感知和SGDClassifier共享相同的底層實現。事實上,Perceptron()相當於SGDClassifier(loss =「perceptron」,eta0 = 1,learning_rate =「constant」,罰分=無)。
因此,您提到的所有3個分類器都不適用於大量的類,因爲需要爲每個類訓練獨立模型。我會建議你嘗試一些固有支持多類分類的東西,例如RandomForestClassifier。
感謝迄今爲止的答案。不幸的是,RandomForestClassifier不能被批量訓練(沒有.partial_fit()方法)。由於訓練數據是5個Mio樣本,我必須進行批次式訓練。我怎麼能這樣做? – jasmok
@jasmok您可以使用['LogisticRegression'](http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html#sklearn.linear_model.LogisticRegression)設置'multiclass ='multinomial' '(而不是默認的「ovr」代表'one-versus-rest',與'one-versus-all'相同)。欲瞭解更多信息:http://scikit-learn.org/stable/modules/multiclass.html。但是,對於您擁有的所有數據,需要很長的培訓時間和內存需求。 –
但LogisticRegression不支持批量訓練。所以我將不得不將所有的數據放入內存。這對於5 Mio樣品不起作用。 SGDRegressor將支持批量培訓,但它沒有多項選項。 – jasmok
- 1. Mahout - 樸素貝葉斯
- 2. Matlab樸素貝葉斯
- 3. 瞭解樸素貝葉斯
- 4. 樸素貝葉斯迴歸
- 5. 樸素貝葉斯分類排
- 6. 與樸素貝葉斯分類器
- 7. 樸素貝葉斯分類百分比
- 8. 多個樸素貝葉斯分類器
- 9. 樸素貝葉斯分類器
- 10. 樸素貝葉斯分類器中的「樸素」是什麼?
- 11. 實現高斯樸素貝葉斯
- 12. [Python的] sklearn樸素貝葉斯
- 13. Ruby中的樸素貝葉斯
- 14. 樸素貝葉斯的問題
- 15. 多項樸素貝葉斯爲OpenCV的
- 16. 模式識別最大似然樸素貝葉斯分類器
- 17. 樸素貝葉斯與Apache星火MLlib
- 18. 樸素貝葉斯和零頻問題
- 19. Python:樸素貝葉斯電影評論
- 20. Python - SelectFromModel與樸素貝葉斯
- 21. 屬性選擇+ WEKA +樸素貝葉斯
- 22. 樣品Accord.NET樸素貝葉斯
- 23. MatLab的:樸素貝葉斯與單變量高斯
- 24. SciKit學習 - 訓練高斯樸素貝葉斯分類器
- 25. 分類數據的樸素貝葉斯分類
- 26. 使用樸素貝葉斯分類器的文檔分類
- 27. Sklearn樸素貝葉斯分類器對屬於同一類
- 28. Python樸素貝葉斯推文分類分類。方法
- 29. 使用Mahout的樸素貝葉斯分類的感傷分析
- 30. Python中的任何樸素貝葉斯分類器?
給我們一些更多的信息。你的訓練數據的形狀是什麼?你有多少個樣本和多少個特徵? –
訓練數據大約是5 Mio文本文檔。我正在使用HashingVectorizer機智number = 2^18。 – jasmok