京公网安备 11010802034615号
经营许可证编号:京B2-20210330
作者:小伍哥
来源:小伍哥聊风控
对于文本处理,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
在数据分析、业务监控、运营复盘等场景中,列值趋势计算是核心需求之一。无论是分析销售额的月度增长、用户活跃的变化趋势、库存 ...
2026-06-12在数字经济深度渗透的当下,消费者的购买行为已从过去的 “被动接受” 转变为 “主动决策”。流量红利消退、获客成本攀升、用户 ...
2026-06-12CDA三级认证是三个级别中的塔尖,全面考察数据战略、团队领导和复杂项目的综合能力。它所对应的《敏捷数据挖掘》教材,不再局限 ...
2026-06-12在游戏产业的商业逻辑中,付费玩家是支撑游戏生存与发展的核心支柱。行业普遍遵循 “二八定律”:20% 的付费玩家贡献了游戏 80% ...
2026-06-11【核心关键词】企业、定位、传统、产品、互联网、可视化、业务侧、数字化、结构化、数据分析、传统制造业、市场状态、发展空间 ...
2026-06-11 解读《CDA二级教材:量化策略分析(2025)》的全景结构与学习逻辑 ” CDA二级认证是企业招聘数据分析师时最常提及的证书门槛 ...
2026-06-11【核心关键词】药企、可视化、营销、分类、数据分析师、销售数据、业务人员、指导方向、分析报告、营销数据、营销医生 【专访摘 ...
2026-06-10在统计学分析、问卷调研、实验验证、业务复盘等场景中,卡方检验与 T 检验是应用最广泛的两类基础假设检验方法。前者专门处理分 ...
2026-06-10 很多数据分析师每天都在计算指标、制作报表,但当被问到“什么叫指标数据元”“指标数据标准包含哪些核心维度”“指标数据质 ...
2026-06-10在MySQL数据库日常查询、数据统计、后台接口开发、数据导出等场景中,开发者经常需要查询数据表除某几列之外的所有字段。例如查 ...
2026-06-09在Python网络请求、爬虫开发、接口测试、数据抓取等实操场景中,requests库是最常用的第三方请求工具,而content属性是requests ...
2026-06-09 数据分析正在重塑每一个行业。CDA认证的三本官方教材,分别对应Level I、Level II、Level III,为你铺就从业务数据分析到数 ...
2026-06-09在数字财务、智慧财税、业财融合深度推进的当下,传统财务模式下数据标准混乱、业务流程碎片化、知识无法沉淀、系统互通性差等问 ...
2026-06-08随着数字经济深度渗透各行各业,数据正式成为继土地、劳动力、资本、技术之后的第五大生产要素,是企业数字化转型、精细化运营、 ...
2026-06-08 很多数据分析师能熟练写SQL、做透视表,但当被问到“数据是从哪里来的?经过哪些加工才进入数据仓库?ETL具体做了什么?”时 ...
2026-06-08【核心关键词】贷款、报表、课程、专业、建模、缺失值、营销、互联网、银行、办公自动化、数据分析、数据预处理、特征工程、贷 ...
2026-06-05在数据库数据查询、业务报表统计、多表关联分析中,LEFT JOIN左连接是使用率最高的SQL关联查询语句。其核心特性是保留左表全部数 ...
2026-06-05 很多数据分析师能熟练地写SQL、做透视表、算描述性统计,但当被问到“如何预测用户流失概率”“如何归因销量下滑的关键因素 ...
2026-06-05任何一款产品从诞生、普及到最终退出市场,都会遵循一套固定的发展规律,这就是产品生命周期理论。在市场竞争日益激烈、产品迭代 ...
2026-06-04在Excel数据分析、办公统计、业务报表制作场景中,数据透视表是数据汇总、分类统计、快速复盘的核心工具,能够高效完成海量原始 ...
2026-06-04