始终百分百概率:predict_proba,sklearn

时间:2016-11-22 17:16:37

标签: python machine-learning scikit-learn

我使用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后,它似乎正常运行。有人可以解释这种奇怪的行为吗?

1 个答案:

答案 0 :(得分:2)

这意味着,特别是考虑到Naive Bayes至少有一个持有:

  • 您的数据处理程序中有一个错误,也许您将整个文档转换为单个单词,而不是实际将其分成几部分?检查每一步,确保您的文档实际上是在单词级别编码的。
  • 您的数据“已损坏”(有唯一标识您的类的唯一字词),例如新闻组数据集最初由标题信息组成,其中类名是字面指定的(因此每个文档都是关于运动有“group:sport @ ...”等。)
  • 你有巨大不成比例的课程,只是你的模型只是一直在预测大多数班级。