首页 > 解决方案 > 朴素贝叶斯、文本分析、SKLearn

问题描述

这是来自使用烂番茄数据的文本分析练习。数据在critics.csv 中,作为pandas DataFrame 导入,“critics”。

这部分练习是为了

构建文档频率 (df) 的累积分布。-axis 是文档计数 (),-axis 是出现少于 () 次的单词的百分比。例如,在 =5 处,绘制一个点,表示出现在 5 个或更少文档中的单词的百分比或数量。

在之前的练习中,我有一个“词袋”

from sklearn.feature_extraction.text import CountVectorizer

vectorizer = CountVectorizer()

# build the vocabulary and transform to a "bag of words"
X = vectorizer.fit_transform(critics.quote)

# Convert matrix to Compressed Sparse Column (CSC) format
X = X.tocsc()  

我发现的 Evey 样本以这种方式从“词袋”矩阵中计算每个词的文档矩阵:

docs_per_word = X.sum(axis=0) 

我相信这行得通;我看过结果。

但是我对实际发生的事情以及它为什么起作用,总结了什么以及我如何能够弄清楚如何做到这一点而无需查看其他人做了什么感到困惑。

标签: pythonscikit-learnnlpnaivebayes

解决方案


我昨晚想通了。它实际上不起作用;我误解了结果。(我认为它正在工作,因为 Jupyter 笔记本只在一个大数组中显示了几个值。但是,更仔细地检查,数组值太大了。数组中的最大值大于“文档”的数量!)

X(我的“词袋”)是一个词频向量。对 X 求和提供了关于每个词在文档语料库中出现的频率的信息。但是关于一个词出现在多少个文档中的说明(例如,在 0 到 4 之间四个文档),而不是它在这些文档的集合中出现的次数(四个文档为 0 - n)。

我需要将 X 转换为布尔矩阵。(现在我只需要弄清楚如何做到这一点。;-)


推荐阅读