TfidfVectorizer、CountVectorizer 和 TfidfTransformer 是 sklearn 中处理自然语言常用的工具。TfidfVectorizer 相当于 CountVectorizer + TfidfTransformer。

下面先说 CountVectorizer。

CountVectorizer

CountVectorizer 的作用是将文本文档转换为计数的稀疏矩阵。下面举一个具体的例子来说明(代码来自于官方文档)。

from sklearn.feature_extraction.text import CountVectorizer
# 定义一个 list,其中每个元素是一个文档(一个句子)
corpus = [
'This is the first document.',
'This document is the second document.',
'And this is the third one.',
'Is this the first document?',
]
vectorizer = CountVectorizer()
# 将文本数据转换为计数的稀疏矩阵
X = vectorizer.fit_transform(corpus)
# 查看每个单词的位置
print(vectorizer.get_feature_names())
#输出为 ['and', 'document', 'first', 'is', 'one', 'second', 'the', 'third', 'this'] # 由于 X 存储为稀疏矩阵,需要转换为 array 才能查看
print(X.toarray())
# 输出为
# [[0 1 1 1 0 0 1 0 1]
# [0 2 0 1 0 1 1 0 1]
# [1 0 0 1 1 0 1 1 1]
# [0 1 1 1 0 0 1 0 1]]

其中 vectorizer.get_feature_names()包含了数据中出现的所有单词去重后的集合,相当于一个词典。当然你也可以给 CountVectorizer 提供一个单独的词典,否则 CountVectorizer 会自己从数据中学习到词典。

X.toarray()是查看文档转化后的计数矩阵。比如矩阵的第一行[0 1 1 1 0 0 1 0 1]对应于文档中的第一句This is the first document.,表示词典中对应位置的单词出现的次数。

This is the first document转为为计数矩阵后如下:

and document first is one second the third this
0 1 1 1 0 0 1 0 1

其他句子也是类似的规则,这里不再赘述。

原来文档元素个数是 4,每个元素是一个句子,长度不固定。X.toarray()的维度是 (4,9),

可以看到转化之后的计数矩阵的元素是 4,每个元素的长度固定为 9,这里的 9 就是字典的长度。

TfidfTransformer

使用计算 tf-idf。tf 表示词频率,而 tf-idf 表示词频率乘以逆文档频率。这是信息检索中常用的一种术语权重方案,在文档分类中也得到了很好的应用。如果你还不了解 tf-idf,请阅读阮一峰老师的这篇文章

使用 TfidfTransformer 如下,输出的 tf-idf 矩阵维度也是 (4,9)

from sklearn.feature_extraction.text import TfidfTransformer

transform = TfidfTransformer()
Y = transform.fit_transform(X) # 这里的输入是上面文档的计数矩阵
print(Y.toarray()) # 输出转换为tf-idf后的 Y 矩阵

输出为:

[[0.         0.46979139 0.58028582 0.38408524 0.         0.
0.38408524 0. 0.38408524]
[0. 0.6876236 0. 0.28108867 0. 0.53864762
0.28108867 0. 0.28108867]
[0.51184851 0. 0. 0.26710379 0.51184851 0.
0.26710379 0.51184851 0.26710379]
[0. 0.46979139 0.58028582 0.38408524 0. 0.
0.38408524 0. 0.38408524]]

TfidfVectorizer

TfidfVectorizer 相当于 CountVectorizer 和 TfidfTransformer 的结合使用。上面代码先调用了 CountVectorizer,然后调用了 TfidfTransformer。使用 TfidfVectorizer 可以简化代码如下:

# 把每个设备的 app 列表转换为字符串,以空格分隔
apps=deviceid_packages['apps'].apply(lambda x:' '.join(x)).tolist()
vectorizer=CountVectorizer()
transformer=TfidfTransformer()
# 原来的 app 列表 转换为计数的稀疏矩阵。
cntTf = vectorizer.fit_transform(apps)
# 得到 tf-idf 矩阵
tfidf=transformer.fit_transform(cntTf)
# 得到所有的 APP 列表,相当于词典
word=vectorizer.get_feature_names()

如果你觉得这篇文章对你有帮助,不妨点个赞,让我有更多动力写出好文章。

我的文章会首发在公众号上,欢迎扫码关注我的公众号张贤同学

TfidfVectorizer、CountVectorizer 和 TfidfTransformer 的简单教程的更多相关文章

  1. 文本数据预处理:sklearn 中 CountVectorizer、TfidfTransformer 和 TfidfVectorizer

    文本数据预处理的第一步通常是进行分词,分词后会进行向量化的操作.在介绍向量化之前,我们先来了解下词袋模型. 1.词袋模型(Bag of words,简称 BoW ) 词袋模型假设我们不考虑文本中词与词 ...

  2. Git和Github简单教程

    原文链接:Git和Github简单教程 网络上关于Git和GitHub的教程不少,但是这些教程有的命令太少不够用,有的命令太多,使得初期学习的时候需要额外花不少时间在一些当前用不到的命令上. 这篇文章 ...

  3. FusionCharts简单教程(三)-----如何自定义图表上的工具提示

    最近有蛮多人总是问我这个FusionCharts制表的问题,帮助他们解决之后,在昨晚发现以前整理的笔记中有这个简单教程,而且以前也发表了几篇这个博文,所以就将其全部上传上来供别人参考.如有不正确之处望 ...

  4. FusionCharts简单教程(八)-----使用网格组件

            有时候我们会觉得使用图像不够直接,对于数据的显示没有表格那样直接明了.所以这里就介绍如何使用网格组件.将网格与图像结合起来.网格组件能够将FusionCharts中的单序列数据以列表的 ...

  5. Qt Quick 简单教程

    上一篇<Qt Quick 之 Hello World 图文详解>我们已经分别在电脑和 Android 手机上运行了第一个 Qt Quick 示例—— HelloQtQuickApp ,这篇 ...

  6. Git和Github简单教程(收藏)

    原文链接:Git和Github简单教程 目录: 零.Git是什么 一.Git的主要功能:版本控制 二.概览 三.Git for Windows软件安装 四.本地Git的使用 五.Github与Git的 ...

  7. mysql安装简单教程(自动安装/配置安装)

    mysql安装简单教程(自动安装/配置安装) 1.1前言: 由于特殊原因,在最近2-3个月里mysql真是安装了无数遍,每次安装都要上网找教程,每个教程基本都不一样,因此还是自己写下来比较好,毕竟自己 ...

  8. 平衡树简单教程及模板(splay, 替罪羊树, 非旋treap)

    原文链接https://www.cnblogs.com/zhouzhendong/p/Balanced-Binary-Tree.html 注意是简单教程,不是入门教程. splay 1. 旋转: 假设 ...

  9. LayaAir引擎开发HTML5最简单教程(面向JS开发者)

    LayaAir引擎开发HTML5最简单教程(面向JS开发者) 一.总结 一句话总结:开发游戏还是得用游戏引擎来开发,其实很简单啦 切记:开发游戏还是得用游戏引擎来开发,其实很简单,引擎很多东西都帮你做 ...

随机推荐

  1. 重学数据结构(三)——使用单链表实现LRU淘汰缓存机制

    使用单链表实现LRU(Least Recently Used)淘汰缓存机制 需求:存在一个单链表,在单链表尾部的都是越早之前添加的元素. 当元素被访问到时,会添加进缓存(也就是这个单链表中). 如果这 ...

  2. 网络流(dinic算法)

    洛谷p3376 https://www.luogu.com.cn/problem/P3376 #include <iostream> #include <cstdio> #in ...

  3. text输入框

    https://blog.csdn.net/renhong20121314/article/details/51906555

  4. 一个文本框的andriod教程

    https://blog.csdn.net/androidmsky/article/details/49870823

  5. adb常用命令大全

    1. 显示系统中全部Android平台:    android list targets2. 显示系统中全部AVD(模拟器):  启动制定模拟器:emulator -avd 模拟器名字    andr ...

  6. win10在html上运行java的applet程序

    Applet是采用Java编程语言编写的小应用程序,该程序可以包含在 HTML(标准通用标记语言的一个应用)页中,与在页中包含图像的方式大致相同. 含有Applet的网页的HTML文件代码中部带有 和 ...

  7. PHP 超级全局变量讲解

    PHP 超级全局变量 超级全局变量在PHP 4.1.0之后被启用, 是PHP系统中自带的变量,在一个脚本的全部作用域中都可用. PHP 超级全局变量 PHP中预定义了几个超级全局变量(superglo ...

  8. Python os.lstat() 方法

    概述 os.lstat() 方法用于类似 stat() 返回文件的信息,但是没有符号链接.在某些平台上,这是fstat的别名,例如 Windows.高佣联盟 www.cgewang.com 语法 ls ...

  9. PHP round() 函数

    实例 对浮点数进行四舍五入:高佣联盟 www.cgewang.com <?php echo(round(0.60) . "<br>"); echo(round(0 ...

  10. 2020牛客暑假多校训练营 第二场 H Happy Triangle set 线段树 分类讨论

    LINK:Happy Triangle 这道题很容易. 容易想到 a+b<x a<x<b x<a<b 其中等于的情况在第一个和第三个之中判一下即可. 前面两个容易想到se ...