我使用Python的sklearn分類文本。始終概率:predict_proba,sklearn
我調用函數predict_proba
,它看起來像這樣:
[[ 6.74918834e-53 1.59981248e-51 2.74934762e-26 1.24948745e-43
2.93801753e-48 3.43788315e-18 1.00000000e+00 2.96818867e-20]]
即使我試圖把歧義數據,它看起來總是這樣。 這似乎並不可能對我來說,classfier始終確保百分之百的,所以有什麼問題呢?
此刻我正在使用MultinomialNB分類器和它的約文本分類。我使用報紙文章帶班像體育,經濟等來訓練我的模型。訓練樣本的大小是175,分佈是這樣的:
{'business': 27,
'economy': 20,
'lifestyle': 22,
'opinion': 11,
'politics': 30,
'science': 21,
'sport': 21,
'tech': 23}
我的管道是這樣的,我的特點是主要袋的詞和類似文本長度有一定的語言關鍵人物。
cv = CountVectorizer(min_df=1, ngram_range=(1,1), max_features=1000)
tt = TfidfTransformer()
lv = LinguisticVectorizer() # custom class
clf = MultinomialNB()
pipeline = Pipeline([
('features', FeatureUnion([
('ngram_tf_idf', Pipeline([
('counts', cv),
('tf_idf', tt),
])),
('linguistic', lv),
])),
('scaler', StandardScaler(with_mean=False)),
('classifier', clf)
])
如果你想看看我的訓練例子,我有上傳吧:wetransfer.com
UPDATE:也許值得一提的是,在測試樣品當前設置分數0.67 。但在使用StandardScaler
之前,概率分佈更加現實(即不總是100%) - 但它只得到0.2。
UPDATE:在管道中加入MaxAbsScaler
後,它似乎正常工作。有人可以解釋這種奇怪的行爲嗎?
你能分享你所使用的算法和你的數據看起來更多的細節?只有您提供的內容很難回答您的問題。 – burhan
如果你使用僅僅用175的訓練樣本袋的詞的功能,你可能有更多的功能比樣品,這是一個很好的食譜沒有適當調整學習過擬合。 burhan的觀點是,如果沒有對實際數據進行處理,就很難給出有針對性的反饋意見。 –
@RandyC:我添加了我的訓練樣本。 即使模型過度擬合,如果我輸入一個包含「足球」,「商業」和「氣候」等文字的文本,並且這些都在詞袋中,我認爲概率不應該是百分百的其中一個類... – ScientiaEtVeritas