我使用Python的 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]]
即使我试图输入含糊不清的数据,它看起来总是像这样。 对于我来说,类似的人总是百分之百确定,这对我来说有什么问题呢?
目前我使用的是 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
更新:也许值得一提的是,目前的设置在测试样本上得分为0.67。但在使用StandardScaler
之前,概率分布更加真实(即并非总是100%) - 但它的得分仅为0.2。
更新:在管道中添加MaxAbsScaler
后,它似乎正常运行。有人可以解释这种奇怪的行为吗?
答案 0 :(得分:2)
这意味着,特别是考虑到Naive Bayes至少有一个持有: