我有一个包含文本和标签的pandas数据框,我试图使用scikitlearn的CountVectorizer
、TfidfTransformer
和{
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%,但是当我去掉{
当我得到0.35并检查predicted
时,我发现它几乎只包含一个标签('S')。这是原始数据集中最常见的标签,但这不会影响预测,对吧?你知道为什么我会得到这些奇怪的结果吗?
编辑:Link to data,其中anforandetext
和{
你得到如此大的差异是因为平滑。如果签出MultinomialNB class的文档,请签出
alpha
参数。默认值是1.0
。这意味着它在默认情况下实现了加一平滑。加一平滑是一种非常常见的技术,用于相对频率估计,以解释看不见的数据。在加一平滑中,我们将1
添加到所有原始计数中,以解释看不见的项和文档项矩阵的稀疏性。在然而,当您最终使用TF-IDF权重时,得到的数字非常小,并且大多在0-1之间。举例来说,如果我使用您的数据,并且只将其转换为TF-IDF权重,这是我获得的TF-IDF权重的小快照。在
你可以看到这些都是很小的数字,加上1进行平滑处理会对多项式朴素贝叶斯的计算产生剧烈的影响。通过在这些数字上加1,你就完全改变了他们的分类比例,因此你的估计就一团糟了。我假设,你对多项式朴素贝叶斯的工作原理有很好的了解。如果没有,那么一定要看到这个video。这段视频和我的回答将足以理解这里出了什么问题。在
您应该在TF-IDF的情况下使用一个小值
alpha
,或者应该在对原始计数进行平滑处理之后构建TF-IDF权重。另外,请使用交叉验证来获得任何准确度估计值。通过在训练数据样本上测试模型,您的准确度数字将极有偏差。我建议使用交叉验证或单独的保留集来评估您的模型。在希望有帮助。在
相关问题 更多 >
编程相关推荐