python朴素贝叶斯回归预测的结果全是1_python – 朴素贝叶斯概率总是1
我開始使用sklearn.naive_bayes.GaussianNB進(jìn)行文本分類,并且獲得了很好的初始結(jié)果.我想使用分類器返回的概率作為置信度的度量,但predict_proba()方法總是為所選類返回“1.0”,而其余所有類都返回“0.0”.
我知道(從here開始)“……來自predict_proba的概率輸出不應(yīng)該過于嚴(yán)肅”,但到了那個(gè)程度?!
分類器可能會(huì)誤認(rèn)為金融投資或和弦字符串,但predict_proba()輸出沒有顯示出猶豫的跡象……
關(guān)于上下文:
– 我一直在使用sklearn.feature_extraction.text.TfidfVectorizer進(jìn)行特征提取,一開始沒有用stop_words限制詞匯表,或者min / max_df – >我一直在變得非常大的載體.
– 我一直在分層類別樹上訓(xùn)練分類器(淺層:深度不超過3層),每個(gè)類別有7個(gè)文本(手動(dòng)分類).目前,這是平坦的培訓(xùn):我不考慮層次結(jié)構(gòu).
得到的GaussianNB對(duì)象非常大(~300MB),預(yù)測(cè)相當(dāng)慢:一個(gè)文本大約1秒.
這有關(guān)系嗎?這一切的根源是巨大的載體嗎?
我如何獲得有意義的預(yù)測(cè)?我需要使用不同的分類器嗎?
這是我正在使用的代碼:
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import GaussianNB
import numpy as np
from sklearn.externals import joblib
Vectorizer = TfidfVectorizer(input = 'content')
vecs = Vectorizer.fit_transform(TextsList) # ~2000 strings
joblib.dump(Vectorizer, 'Vectorizer.pkl')
gnb = GaussianNB()
Y = np.array(TargetList) # ~2000 categories
gnb.fit(vecs.toarray(), Y)
joblib.dump(gnb, 'Classifier.pkl')
...
#In a different function:
Vectorizer = joblib.load('Vectorizer.pkl')
Classifier = joblib.load('Classifier.pkl')
InputList = [Text] # One string
Vec = Vectorizer.transform(InputList)
Probs = Classifier.predict_proba([Vec.toarray()[0]])[0]
MaxProb = max(Probs)
MaxProbIndex = np.where(Probs==MaxProb)[0][0]
Category = Classifier.classes_[MaxProbIndex]
result = (Category, MaxProb)
更新:
按照下面的建議,我嘗試了MultinomialNB&邏輯回歸.它們都返回不同的概率,并且在任何方面對(duì)我的任務(wù)都更好:更準(zhǔn)確的分類,更小的存儲(chǔ)器和物體.更好的速度(MultinomialNB快速閃電!).
我現(xiàn)在有一個(gè)新問題:返回的概率非常小 – 通常在0.004-0.012范圍內(nèi).這是針對(duì)預(yù)測(cè)/獲勝類別(并且分類是準(zhǔn)確的).
總結(jié)
以上是生活随笔為你收集整理的python朴素贝叶斯回归预测的结果全是1_python – 朴素贝叶斯概率总是1的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python自动化之文件处理_Pytho
- 下一篇: python实现洗牌算法_为什么渔民耶茨