python - 朴素贝叶斯、文本分析、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)
我相信这行得通;我看过结果。
但是我对实际发生的事情以及它为什么起作用,总结了什么以及我如何能够弄清楚如何做到这一点而无需查看其他人做了什么感到困惑。
解决方案
我昨晚想通了。它实际上不起作用;我误解了结果。(我认为它正在工作,因为 Jupyter 笔记本只在一个大数组中显示了几个值。但是,更仔细地检查,数组值太大了。数组中的最大值大于“文档”的数量!)
X(我的“词袋”)是一个词频向量。对 X 求和提供了关于每个词在文档语料库中出现的频率的信息。但是关于一个词出现在多少个文档中的说明(例如,在 0 到 4 之间四个文档),而不是它在这些文档的集合中出现的次数(四个文档为 0 - n)。
我需要将 X 转换为布尔矩阵。(现在我只需要弄清楚如何做到这一点。;-)
推荐阅读
- animated-gif - 如何在反应结束后立即用静态图标替换动画 gif
- java - 如何检查字符串是否为 yyyy-yyyy 格式
- mysql - 在使用 MySQL 的 maven 项目上使用 hibernate 进行逆向工程
- ruby-on-rails - saved_change_to_attribute?在方法内部调用时总是返回 false
- uml - PlantUML活动图中如何设置泳道的宽度?
- javascript - 尝试弄清楚如何将具有多个条件的长三元运算符转换为长 if 语句
- mysql - MySQL 查询 LEFT JOIN, SUM()
- python-3.x - WEBScraping TypeError:sendmail()缺少1个必需的位置参数:'msg'
- python - 在 PLY 中使用常规定义
- wordpress - WordPress 恶意软件 - 重定向到 (fast.destinyfernandi.com) - 即使在扫描和清理之后