Scikitklearns TfidTransformer使我的管道仅预测一个实验室

2024-10-02 04:37:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含文本和标签的pandas数据框,我试图使用scikitlearn的CountVectorizerTfidfTransformer和{}来预测标签。数据帧如下所示:

                                                text party
0  Herr ålderspresident! Att vara talman i Sverig...     S
1  Herr ålderspresident! Ärade ledamöter av Sveri...     M
2  Herr ålderspresident! Som företrädare för Alli...     M
3  Val av andre vice talman Herr ålderspresident!...    SD
4  Herr ålderspresident! Vänsterpartiet vill utny...     V

当我用上面提到的三个估计器构建管道时,我的预测精度只有35%,但是当我去掉{}时,准确度就提高到了更合理的~75%的准确度。

^{pr2}$

当我得到0.35并检查predicted时,我发现它几乎只包含一个标签('S')。这是原始数据集中最常见的标签,但这不会影响预测,对吧?你知道为什么我会得到这些奇怪的结果吗?

编辑Link to data,其中anforandetext和{}是相关列。


Tags: 数据text文本pandasparty标签attav
1条回答
网友
1楼 · 发布于 2024-10-02 04:37:45

你得到如此大的差异是因为平滑。如果签出MultinomialNB class的文档,请签出alpha参数。默认值是1.0。这意味着它在默认情况下实现了加一平滑。加一平滑是一种非常常见的技术,用于相对频率估计,以解释看不见的数据。在加一平滑中,我们将1添加到所有原始计数中,以解释看不见的项和文档项矩阵的稀疏性。在

然而,当您最终使用TF-IDF权重时,得到的数字非常小,并且大多在0-1之间。举例来说,如果我使用您的数据,并且只将其转换为TF-IDF权重,这是我获得的TF-IDF权重的小快照。在

  (0, 80914)    0.0698184481033
  (0, 80552)    0.0304609466459
  (0, 80288)    0.0301759343786
  (0, 80224)    0.103630302925
  (0, 80204)    0.0437500703747
  (0, 80192)    0.0808649191625

你可以看到这些都是很小的数字,加上1进行平滑处理会对多项式朴素贝叶斯的计算产生剧烈的影响。通过在这些数字上加1,你就完全改变了他们的分类比例,因此你的估计就一团糟了。我假设,你对多项式朴素贝叶斯的工作原理有很好的了解。如果没有,那么一定要看到这个video。这段视频和我的回答将足以理解这里出了什么问题。在

您应该在TF-IDF的情况下使用一个小值alpha,或者应该在对原始计数进行平滑处理之后构建TF-IDF权重。另外,请使用交叉验证来获得任何准确度估计值。通过在训练数据样本上测试模型,您的准确度数字将极有偏差。我建议使用交叉验证或单独的保留集来评估您的模型。在

希望有帮助。在

相关问题 更多 >

    热门问题