TF-IDF计算过程一步步推导详解含代码演示

相关概念

TF-IDF

TF-IDF(Term Frequency–Inverse Document Frequency)是一种用于资讯检索与文本挖掘的常用加权技术。TF-IDF是一种统计方法,用以评估一个字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。

TF

tf(term frequency:指的是某一个给定的词语在该文件中出现的次数,这个数字通常会被归一化(一般是词频除以该文件总词数),以防止它偏向长的文件。

IDF

idf (inverse document frequency):反应了一个词在所有文本(整个文档)中出现的频率,如果一个词在很多的文本中出现,那么它的idf值应该低,而反过来如果一个词在比较少的文本中出现,那么它的idf值应该高。

N

N代表文档的总数。

W

W是某个单词在几个文档里出现过,同一一个文档出行多次,计为1。

代码示例

from sklearn.feature_extraction.text import TfidfVectorizer
import pandas as pd
# 定义更复杂的文档集
complex_documents = ["The quick brown fox jumps over the lazy dog.","The brown fox is quick and the brown dog is lazy.","The sky is blue and beautiful.","Look at the bright blue sky!","The quick brown dog jumps over the lazy fox."
]
# 创建TF-IDF模型
complex_vectorizer = TfidfVectorizer(smooth_idf=True)
#将文档转换为TF-IDF矩阵
complex_tfidf_matrix = complex_vectorizer.fit_transform(complex_documents)
#print(complex_tfidf_matrix)
#获取特征名称
feature_names = complex_vectorizer.get_feature_names_out()
#将TF-IDF矩阵转换为DataFrame
complex_tfidf_df = pd.DataFrame(complex_tfidf_matrix.toarray(), columns=feature_names)
#打印 TF-IDF矩阵
#print(complex_tfidf_df)
#TF-IDF矩阵保存成csv文件
complex_tfidf_df.to_csv('./output/complex_tfidf_matrix.csv', index=True)

计算过程详解

原始文档见下:

The quick brown fox jumps over the lazy dog

The brown fox is quick and the brown dog is lazy

The sky is blue and beautiful

Look at the bright blue sky

The quick brown dog jumps over the lazy fox

确定N

不难看出文档总共有5份,所以这里的N为5.

确定W

我们以“Look at the bright blue sky”为例来演示:

这句话里每个单词在该文档里都是唯一的,所以每个单词的TF = 1/6。

计算每个单词的IDF值

以单词blue为例,它总共在两个文档里出现,所以W=2,所以其IDF=ln((1+5)/(1+2))+1,其它以此类推。

单词

IDF值

look

ln((1+5)/(1+1))+1=2.0986122886681096913952452369225

at

ln((1+5)/(1+1))+1=2.0986122886681096913952452369225

the

ln((1+5)/(1+5))+1 = 1

bright

ln((1+5)/(1+1))+1=2.0986122886681096913952452369225

blue

ln((1+5)/(1+2))+1 = 1.69314718055994530941723212145818

sky

ln((1+5)/(1+2))+1 = 1.69314718055994530941723212145818

计算每个单词的TF-IDF值

即上述每个单元格*(1/6)

单词

tfidf值

look

0.34976871477801824

at

0.34976871477801824

the

0.16666666666666666

bright

0.34976871477801824

blue

0.2821911967599909

sky

0.2821911967599909

TF-IDF值进行归一化

计算这组单词TF-IDF的平方根

(0.34976871477801824**2 + 0.34976871477801824**2 + 0.16666666666666666**2 + 0.34976871477801824**2 + 0.2821911967599909**2+ 0.2821911967599909**2)**0.5

= 0.7443493684741389

生成最终TF-IDF值

单词

归一化后TFIDF值

look

0.34976871477801824/0.7443493684741389=0.4698985847130068

at

0.34976871477801824/0.7443493684741389=0.4698985847130068

the

0.16666666666666666/0.7443493684741389=0.22390919335139758

bright

0.34976871477801824/0.7443493684741389=0.4698985847130068

blue

0.2821911967599909/0.7443493684741389=0.3791112194243705

sky

0.2821911967599909/0.7443493684741389=0.3791112194243705

对比sklearn里的结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/41622.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据分析:基于STAR+FeatureCounts的RNA-seq分析全流程流程

流程主要包含两部分组成: 第一部分:二代测序数据的Raw data的fastq文件转换成Gene Count或者Features Counts表(行是Features,列是样本名);第二部分:对counts 表进行统计分析,并对其…

云计算渲染时代:选择Blender或KeyShot进行高效渲染

在云渲染技术日益成熟的背景下,挑选一款贴合项目需求的3D渲染软件显得尤为关键。当前,Blender与KeyShot作为业界领先的全能渲染解决方案,广受推崇。它们虽皆能创造出令人信服的逼真视觉效果,但在特色功能上各有所长。本篇文章旨在…

装机选单条内存还是两条内存组建双通道?有什么区别差异?

单通道和双通道内存,单通道仅为一根内存,例如主板上仅插一条8G或16G,甚至是32G内存。 而双通道内存一般需要主板上插上两根或以上数量的内存,例如双8G、双16G、双32G内存。 装机建议上两条内存组建双通道,可以提供双倍…

LT8711UXE2 国产芯片 Type-C with 2lane@8.1Gbps/lane 4K60 USB3.0 在线提供软硬件技术支持服务

2.一般说明 LT8711UXE2是一款高性能的Type-C/DP1.4到HDMI2.0转换器,设计用于将USBType-C源或DP1.4源连接到HDMI2.0收发器。该LT8711UXE2集成了一个符合DP1.4标准的接收器和一个符合HDMI2.0标准的发射器。此外,还包括用于CC通信的两个CC控制器&#xff0c…

乐鑫ESPRESSIF芯片开发简介

乐鑫科技(Espressif Systems,通常简称乐鑫或ESPRESSIF)是一家全球化的无晶圆厂半导体公司,专注于研发无线通信微控制器单元(MCU)芯片,特别在物联网(IoT)领域有着显著的影…

节省上千元的SSL多域名证书申请方法

在数字化时代的浪潮中,网络安全问题日益凸显其重要性。 作为网络安全的核心组成部分,SSL证书(安全套接层证书)在确保数据传输的机密性、完整性和真实性方面发挥着至关重要的作用。 申请便宜SSL证书步骤 1. 登录来此加密网站&am…

【数据结构】08.堆及堆的应用

一、堆的概念及结构 堆(Heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵完全二叉树的数组对象。 堆是非线性数据结构,相当于一维数组,有两个直接后继。 如果有一个关键码的集合K { k₀,k₁,k₂ &#…

深入理解C# log4Net日志框架:功能、使用方法与性能优势

文章目录 1、log4Net的主要特性2、log4Net框架详解配置日志级别 3、log4Net的使用示例4、性能优化与对比5、总结与展望 在软件开发过程中,日志记录是一个不可或缺的功能。它可以帮助开发者追踪错误、监控应用程序性能,以及进行调试。在C#生态系统中&…

政策护航新能源助推绿色经济腾飞

随着全球气候变化问题日益严重,新能源行业的发展成为推动绿色经济腾飞的重要引擎。近年来,各国政府纷纷出台政策支持新能源产业,旨在激发行业活力,促进经济可持续发展。本文将从政策红利的角度,探讨新能源行业发展的现…

Echarts 问题集锦

最近公司集中做统计图表,新手小白,真被Echarts折腾地不轻,怕自己年老记忆衰退,特地做一些记录。以备后面查阅。 1、X轴的 数据显示不全,间或不显示 很奇葩,我发现数据里有一个值为0.0,当这条记…

SpringBoot 启动流程四

SpringBoot启动流程四 前面这个创建对象是初始化SpringApplication对象 是加载了SpringBoot程序的所有相关配置 我们接下来要将这个run方法 run过程是一个运行 初始化容器 我们看我们的运行结果是得到一个ConfigurableApplicationContext对象 package com.bigdata1421.star…

力扣 最大数(贪心策略)

核心思想 贪心 这个解决方案之所以被认为是基于贪心算法的,主要体现在以下几点: 1.局部最优解即全局最优解 在每一步排序中,我们都选择当前能够得到最大数字的字符串组合方式。这种局部最优的选择,最终能够得到全局最优解,即最大的数字字符串。 2.无后效性 在每一步排序中…

第一百四十七节 Java数据类型教程 - Java字符串字符

Java数据类型教程 - Java字符串字符 索引字符 您可以使用charAt()方法从String对象中获取特定索引处的字符。索引从零开始。 下面的代码打印索引值和字符在“W3CSCHOOL.CN"字符串中的每个索引处: public class Main {public static void main(String[] args) {String s…

实验3-Spark基础-Spark的安装

文章目录 1. 下载安装 Scala1.1 下载 Scala 安装包1.2 基础环境准备1.3 安装 Scala 2. 下载安装 Spark2.1 下载 Spark 安装包2.2 安装 Spark2.3 配置 Spark2.4 创建配置文件 spark-env.sh 3. pyspark 启动4. 建立/user/spark文件夹 1. 下载安装 Scala 1.1 下载 Scala 安装包 下…

2.5 C#视觉程序开发实例1----IO_Manager实现切换程序

2.5 C#视觉程序开发实例1----IO_Manager实现切换程序 1 IO_Manager中输入实现 1.0 IO_Manager中输入部分引脚定义 // 设定index 目的是为了今后可以配置这些参数、 // 输入引脚定义 private int index_trig0 0; // trig index private int index_cst 7; //cst index priva…

构建滑块组件_第 1 部分

前言 ● 本次将和大家一起学习实现滑块的功能 ● 由于这有些错乱,我们将用图片来代替,以实现功能 ● 这里我们简单的说一下原理,如下图所示,通过改变tanslateX的值来达到滑动的效果,所以最核心的就是我们需要通过…

FreeBSD@ThinkPad x250因电池耗尽关机后无法启动的问题存档

好几次碰到电池耗尽FreeBSD关机,再启动,网络通了之后到了该出Xwindows窗体的时候,屏幕灭掉,网络不通,只有风扇在响,启动失败。关键是长按开关键后再次开机,还是启动失败。 偶尔有时候重启到单人…

NLP篇1

场景:假设给你一篇文章。 目标:说白了,就是数学的分类。但是如何实现分类呢。下面将逐步一 一 分析与拆解。先把目标定好了和整体框架定好了。而不是只见树木而不见森林。 情感分类(好评、差评,中性) 整体…

掌握 Postman 脚本:入门指南

在探索 API 测试自动化环墁下,Postman 脚本显现其强大功能和灵活性,它不仅仅是 API 测试的工具,更是一个综合性的自动化平台。 Postman 脚本简介 Postman 允许用户在 API 请求生命周期中运行 JavaScript 脚本,这些脚本分为以下三…

【C++题解】1413. 切割绳子

问题:1413. 切割绳子 类型:贪心,二分,noip2017普及组初赛 题目描述: 有 n 条绳子,每条绳子的长度已知且均为正整数。绳子可以以任意正整数长度切割,但不可以连接。现在要从这些绳子中切割出 m…