总是百分百的概率:precention_proba,sklearn



我正在使用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]]

,即使我尝试放置歧义数据,也看起来总是这样。对我来说,classfier总是百分百确定的似乎并不可能,所以那里有什么问题?

目前我正在使用多元素分类器,这大约是文本分类。我正在使用新闻纸文章 Sports 经济等课程进行培训。训练示例的大小为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后,它似乎可以正常工作。有人可以解释这种怪异的行为吗?

这意味着,尤其是考虑到至少有一个天真的贝叶斯:

  • 您的数据处理程序中有一个错误,也许您将整个文档转换为一个单词,而不是将其分为部分?检查每个步骤以确保您的文档实际上是在单词级别上编码的。
  • 您的数据是"损坏的"(有独特的单词可以唯一地识别您的课程),例如,新闻组的数据集最初由标题信息组成,其中class name均已指定(因此每个文档有关体育有"小组:sport@..."等)
  • 您有巨大的类不成比例,您的模型只是一直在预测多数类。

相关内容

  • 没有找到相关文章

最新更新