【发布时间】:2017-04-06 11:34:39
【问题描述】:
我正在使用 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 后,它似乎可以正常工作。有人可以解释这种奇怪的行为吗?
【问题讨论】:
-
你能分享更多关于你使用的算法和你的数据是什么样子的细节吗?仅凭您提供的内容很难回答您的问题。
-
如果您使用只有 175 个训练样本的词袋特征,您可能拥有比样本更多的特征,这是在没有适当调整学习器的情况下过拟合的好方法。就 burhan 而言,如果不使用您的实际数据,很难就此提供任何有针对性的反馈。
-
@RandyC:我已经添加了我的训练样本。而且即使模型过拟合,如果我输入的文本中包含“足球”、“商业”和“气候”之类的词,而这些词都在词袋中,我认为概率不应该是一百其中一类的百分比...
标签: python machine-learning scikit-learn