
作者:小伍哥
来源:小伍哥聊风控
对于文本处理,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
解析 loss.backward ():深度学习中梯度汇总与同步的自动触发核心 在深度学习模型训练流程中,loss.backward()是连接 “前向计算 ...
2025-09-02要解答 “画 K-S 图时横轴是等距还是等频” 的问题,需先明确 K-S 图的核心用途(检验样本分布与理论分布的一致性),再结合横轴 ...
2025-09-02CDA 数据分析师:助力企业破解数据需求与数据分析需求难题 在数字化浪潮席卷全球的当下,数据已成为企业核心战略资产。无论是市 ...
2025-09-02Power BI 度量值实战:基于每月收入与税金占比计算累计税金分摊金额 在企业财务分析中,税金分摊是成本核算与利润统计的核心环节 ...
2025-09-01巧用 ALTER TABLE rent ADD INDEX:租房系统数据库性能优化实践 在租房管理系统中,rent表是核心业务表之一,通常存储租赁订单信 ...
2025-09-01CDA 数据分析师:企业数字化转型的核心引擎 —— 从能力落地到价值跃迁 当数字化转型从 “选择题” 变为企业生存的 “必答题”, ...
2025-09-01数据清洗工具全景指南:从入门到进阶的实操路径 在数据驱动决策的链条中,“数据清洗” 是决定后续分析与建模有效性的 “第一道 ...
2025-08-29机器学习中的参数优化:以预测结果为核心的闭环调优路径 在机器学习模型落地中,“参数” 是连接 “数据” 与 “预测结果” 的关 ...
2025-08-29CDA 数据分析与量化策略分析流程:协同落地数据驱动价值 在数据驱动决策的实践中,“流程” 是确保价值落地的核心骨架 ——CDA ...
2025-08-29CDA含金量分析 在数字经济与人工智能深度融合的时代,数据驱动决策已成为企业核心竞争力的关键要素。CDA(Certified Data Analys ...
2025-08-28CDA认证:数据时代的职业通行证 当海通证券的交易大厅里闪烁的屏幕实时跳动着市场数据,当苏州银行的数字金融部连夜部署新的风控 ...
2025-08-28PCU:游戏运营的 “实时晴雨表”—— 从数据监控到运营决策的落地指南 在游戏行业,DAU(日活跃用户)、MAU(月活跃用户)是衡量 ...
2025-08-28Excel 聚类分析:零代码实现数据分群,赋能中小团队业务决策 在数字化转型中,“数据分群” 是企业理解用户、优化运营的核心手段 ...
2025-08-28CDA 数据分析师:数字化时代数据思维的践行者与价值推动者 当数字经济成为全球经济增长的核心引擎,数据已从 “辅助性信息” 跃 ...
2025-08-28ALTER TABLE ADD 多个 INDEX:数据库批量索引优化的高效实践 在数据库运维与性能优化中,索引是提升查询效率的核心手段。当业务 ...
2025-08-27Power BI 去重函数:数据清洗与精准分析的核心工具 在企业数据分析流程中,数据质量直接决定分析结果的可靠性。Power BI 作为主 ...
2025-08-27CDA 数据分析师:数据探索与统计分析的实践与价值 在数字化浪潮席卷各行业的当下,数据已成为企业核心资产,而 CDA(Certif ...
2025-08-27t 检验与 Wilcoxon 检验:数据差异比较的两大统计利器 在数据分析中,“比较差异” 是核心需求之一 —— 如新药疗效是否优于旧药 ...
2025-08-26季节性分解外推法:解锁时间序列预测的规律密码 在商业决策、资源调度、政策制定等领域,准确的预测是规避风险、提升效率的关键 ...
2025-08-26CDA 数据分析师:数据治理驱动下的企业数据价值守护者 在数字经济时代,数据已成为企业核心战略资产,其价值的释放离不开高 ...
2025-08-26