python - 推文分类器特征选择 NLTK

标签 python twitter machine-learning nltk classification

我目前正在尝试使用 NLTK 中的朴素贝叶斯分类器对推文进行分类。我正在对与特定股票代码相关的推文进行分类,使用“$”前缀(例如:$AAPL)。我的 Python 脚本一直基于这篇博文:Twitter Sentiment Analysis using Python and NLTK .到目前为止,我得到了相当不错的结果。但是,我觉得还有很多很大的改进空间。

在我的词特征选择方法中,我决定实现 tf-idf 算法来选择信息量最大的词。这样做之后,我觉得结果并不那么令人印象深刻。

然后我在以下博客中实现了该技术:Text Classification Sentiment Analysis Eliminate Low Information Features .结果与使用 tf-idf 算法获得的结果非常相似,这促使我更彻底地检查了我的分类器的“信息量最大的特征”列表。那时我意识到我有一个更大的问题:

推文和真实语言不使用相同的语法和措辞。在普通文本中,可以使用 tf-idf 或停用词来挑出许多冠词和动词。然而,在推文语料库中,一些信息量极小的词,例如“the”、“and”、“is”等,与对正确分类文本至关重要的词一样多。我不能只删除所有少于 3 个字母的单词,因为一些无信息的特征比这更大,而一些信息更小。

如果可以的话,我希望不必使用停用词,因为需要经常更新列表。但是,如果这是我唯一的选择,我想我将不得不接受它。

因此,总结一下我的问题,有谁知道如何真正在特定来源(即推文)中获取信息最丰富的词语?

编辑:我试图将其分为三类:积极的、消极的和中立的。另外,我想知道,对于 TF-IDF,我应该只剪掉分数低的词,还是剪掉一些分数高的词?在每种情况下,您会从特征选择过程中排除多少百分比的文本源词汇?

最佳答案

您链接到的博文描述了show_most_informative_features 方法,但是NaiveBayesClassifier还有一个 most_informative_features 方法,它返回特征而不只是打印它们。您可以简单地根据您的训练集设置一个截止点 - 就信息量而言,“the”、“and”和其他不重要的特征将位于列表的底部。

的确,这种方法可能会过度拟合(某些特征在您的训练集中比在您的测试集中重要得多),但对于任何根据您的训练集过滤特征的方法都是如此。

关于python - 推文分类器特征选择 NLTK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8778924/

相关文章:

python - 递归地 for() 一个 python 对象以查找特定类型或具有特定值的值

python - 使用 reload 时出现奇怪的 Python 问题

python - 基于 bool 向量选择 numpy 中的列

python - 从异步中的两个协程中选择第一个结果

artificial-intelligence - 最相距的 k 个元素(聚类?)

apache-spark - Scala 到 Java 8 MLeap 翻译

java - 推特授权

java - Twitter API - 无法更新包含圆括号的状态

c - 使用 C 访问 Twitter Streaming API

tensorflow - Keras 报告错误的准确性