
作者:小伍哥
来源:小伍哥聊风控
对于文本处理,tf-idf的使用已经非常普遍,在sklearn等知名的机器学习开源库中都提供了直接的调用,然而很多人并没有搞清楚TF-IDF是怎么算出来的,也就无法对这种计算方法进行针对性的改进了。我之前也是稀里糊涂的,在各种开源库随手可得的Python年代“调包需谨慎”,不能让自己成为只会调包的人,我们内功还是需要修炼的,计算之前,我们先了解下tf-idf的基本定义。
tf(term frequency:指的是某一个给定的词语在该文件中出现的次数,这个数字通常会被归一化(一般是词频除以该文件总词数),以防止它偏向长的文件。
idf (inverse document frequency):反应了一个词在所有文本(整个文档)中出现的频率,如果一个词在很多的文本中出现,那么它的idf值应该低,而反过来如果一个词在比较少的文本中出现,那么它的idf值应该高。
一个词语的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。
下面我们看看大多数情况下,tf-idf 的定义:
TF的计算公式如下:
其中
是在某一文本中词条w出现的次数,
是该文本总词条数。
IDF的计算公式:
其中Y是语料库的文档总数,Yw是包含词条w的文档数,分母加一是为了避免
未出现在任何文档中从而导致分母为
的情况。
TF-IDF的就是将TF和IDF相乘
从以上计算公式便可以看出,某一特定文件内的高词语频率,以及该词语在整个文件集合中的低文件频率,可以产生出高权重的TF-IDF。因此,TF-IDF倾向于过滤掉常见的词语,保留重要的词语。
现在我们来看看,tf-idf到底怎么计算的,和我们手算的能不能对上。
在sklearn中,tf与上述定义一致,我们看看idf在sklearn中的定义,可以看到,分子分母都加了1,做了更多的平滑处理
smooth_idf=False
idf(t) = log [ n / df(t) ] + 1
smooth_idf=True
idf(t) = log [ (1 + n) / (1 + df(t)) ] + 1
下面我们手把手的计算出TF-IDF的值,使用的是sklearn官方的案例:
corpus = ['This is the first document.', 'This document is the second document.', 'And this is the third one.', 'Is this the first document?'] #初始化 vector = TfidfVectorizer() #tf-idf计算 tfidf = vector.fit_transform(corpus) #直接打印,得到的是一个稀疏矩阵,第1位表示文档编号,第二位代表词的编号 print(tfidf) (0, 1) 0.46979138557992045 (0, 2) 0.5802858236844359 (0, 6) 0.38408524091481483 (0, 3) 0.38408524091481483 (0, 8) 0.38408524091481483 (1, 5) 0.5386476208856763 (1, 1) 0.6876235979836938 (1, 6) 0.281088674033753 (1, 3) 0.281088674033753 (1, 8) 0.281088674033753 (2, 4) 0.511848512707169 (2, 7) 0.511848512707169 (2, 0) 0.511848512707169 (2, 6) 0.267103787642168 (2, 3) 0.267103787642168 (2, 8) 0.267103787642168 (3, 1) 0.46979138557992045 (3, 2) 0.5802858236844359 (3, 6) 0.38408524091481483 (3, 3) 0.38408524091481483 (3, 8) 0.38408524091481483
通过vocabulary_属性,可以查看每个词对应的数字编号,就可以与上面的矩阵对应起来了
vector.vocabulary_ {'this': 8, 'is': 3, 'the': 6, 'first': 2, 'document': 1, 'second': 5, 'and': 0, 'third': 7, 'one': 4}
通过上面的字典和矩阵可以知道,第一个文档'This is the first document'的tf-idf 值如下
(0, 1) 0.46979138557992045 document (0, 2) 0.58028582368443590 first (0, 6) 0.38408524091481483 the (0, 3) 0.38408524091481483 is (0, 8) 0.38408524091481483 this
document first the is this
0.46979 0.58028 0.384085 0.38408 0.384085
我们手动计算来验证下:
tf 计算
对于第一个文档,有5个不同的词,每个词的词频为:tf= 1/5
idf计算
document:log((1+N)/(1+N(document)))+1= log((1+4)/(1+3))+1 = 1.2231435 first :log((1+N)/(1+N(first)))+1 = log((1+4)/(1+2))+1 = 1.5108256 the :log((1+N)/(1+N(the )))+1 = log((1+4)/(1+4))+1 = 1.0 is :log((1+N)/(1+N(is )))+1 = log((1+4)/(1+4))+1 = 1.0 this :log((1+N)/(1+N(this)))+1 = log((1+4)/(1+4))+1 = 1.0
tf-idf计算
1.2231435*1/5 = 0.24462869 1.5108256*1/5 = 0.30216512 1.0*1/5 = 0.2 1.0*1/5 = 0.2 1.0*1/5 = 0.2
得到我们手工计算的tf-idf值
和我们sklearn计算的
答案并不对,哪里出了问题呢?我们仔细看看原来的代码,因为sklearn做了归一化,我们按同样的方法进行归一化计算如下:
计算每个tf-idf 的平方根
(0.24462869**2 + 0.30216512**2 + 0.2**2 + 0.2**2 + 0.2**2)**0.5 = 0.5207177313
对每个值除以平方根
0.24462869/0.5207177313244965 = 0.4697913577434035 0.30216512/0.5207177313244965 = 0.5802858282382923 0.20000000/0.5207177313244965 = 0.3840852499708055 0.20000000/0.5207177313244965 = 0.3840852499708055 0.20000000/0.5207177313244965 = 0.3840852499708055
这样一看,就和我们的sklearn计算的一致了,到此,我们也算是学会了计算tf-idf值了,加深了对该方法的理解,以便于后期的算法调用,心里有货,才不惧未知。
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
在数据成为新时代“石油”的今天,几乎每个职场人都在焦虑: “为什么别人能用数据驱动决策、升职加薪,而我面对Excel表格却无从 ...
2025-10-18数据清洗是 “数据价值挖掘的前置关卡”—— 其核心目标是 “去除噪声、修正错误、规范格式”,但前提是不破坏数据的真实业务含 ...
2025-10-17在数据汇总分析中,透视表凭借灵活的字段重组能力成为核心工具,但原始透视表仅能呈现数值结果,缺乏对数据背景、异常原因或业务 ...
2025-10-17在企业管理中,“凭经验定策略” 的传统模式正逐渐失效 —— 金融机构靠 “研究员主观判断” 选股可能错失收益,电商靠 “运营拍 ...
2025-10-17在数据库日常操作中,INSERT INTO SELECT是实现 “批量数据迁移” 的核心 SQL 语句 —— 它能直接将一个表(或查询结果集)的数 ...
2025-10-16在机器学习建模中,“参数” 是决定模型效果的关键变量 —— 无论是线性回归的系数、随机森林的树深度,还是神经网络的权重,这 ...
2025-10-16在数字化浪潮中,“数据” 已从 “辅助决策的工具” 升级为 “驱动业务的核心资产”—— 电商平台靠用户行为数据优化推荐算法, ...
2025-10-16在大模型从实验室走向生产环境的过程中,“稳定性” 是决定其能否实用的关键 —— 一个在单轮测试中表现优异的模型,若在高并发 ...
2025-10-15在机器学习入门领域,“鸢尾花数据集(Iris Dataset)” 是理解 “特征值” 与 “目标值” 的最佳案例 —— 它结构清晰、维度适 ...
2025-10-15在数据驱动的业务场景中,零散的指标(如 “GMV”“复购率”)就像 “散落的零件”,无法支撑系统性决策;而科学的指标体系,则 ...
2025-10-15在神经网络模型设计中,“隐藏层层数” 是决定模型能力与效率的核心参数之一 —— 层数过少,模型可能 “欠拟合”(无法捕捉数据 ...
2025-10-14在数字化浪潮中,数据分析师已成为企业 “从数据中挖掘价值” 的核心角色 —— 他们既要能从海量数据中提取有效信息,又要能将分 ...
2025-10-14在企业数据驱动的实践中,“指标混乱” 是最常见的痛点:运营部门说 “复购率 15%”,产品部门说 “复购率 8%”,实则是两者对 ...
2025-10-14在手游行业,“次日留存率” 是衡量一款游戏生死的 “第一道关卡”—— 它不仅反映了玩家对游戏的初始接受度,更直接决定了后续 ...
2025-10-13分库分表,为何而生? 在信息技术发展的早期阶段,数据量相对较小,业务逻辑也较为简单,单库单表的数据库架构就能够满足大多数 ...
2025-10-13在企业数字化转型过程中,“数据孤岛” 是普遍面临的痛点:用户数据散落在 APP 日志、注册系统、客服记录中,订单数据分散在交易 ...
2025-10-13在数字化时代,用户的每一次行为 —— 从电商平台的 “浏览→加购→购买”,到视频 APP 的 “打开→搜索→观看→收藏”,再到银 ...
2025-10-11在机器学习建模流程中,“特征重要性分析” 是连接 “数据” 与 “业务” 的关键桥梁 —— 它不仅能帮我们筛选冗余特征、提升模 ...
2025-10-11在企业的数据体系中,未经分类的数据如同 “杂乱无章的仓库”—— 用户行为日志、订单记录、商品信息混杂存储,CDA(Certified D ...
2025-10-11在 SQL Server 数据库操作中,“数据类型转换” 是高频需求 —— 无论是将字符串格式的日期转为datetime用于筛选,还是将数值转 ...
2025-10-10