机器学习:TF-IDF算法原理及代码实现

2024-08-30 09:04

本文主要是介绍机器学习:TF-IDF算法原理及代码实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

TF-IDF是一种用于信息检索与文本挖掘的常用加权技术。它是一种统计方法,用以评估一个词语对于一个文件集或一个语料库中的其中一份文件的重要程度。它的主要思想是:如果某个词语在一篇文章中出现的频率高(Term Frequency,TF),并且在其他文章中很少出现(Inverse Document Frequency,IDF),则认为这个词语具有很好的类别区分能力,对这篇文章的内容有很好的指示作用。

1. 词频(TF)

  • 定义:表示词条(关键字)在文档中出现的频率。
  • 计算公式
  • 目的:评估词条在文档中的重要性。

2. 逆文档频率(IDF)

  • 定义:表示词条的普遍重要性。
  • 计算公式
  • 目的:评估词条的稀有程度,降低常见词的权重。

3. TF-IDF

  • 定义:一个词条在一个文档中的重要性与它在语料库中的稀有程度的乘积。
  • 计算公式
  • 应用:通过计算文档中每个词条的TF-IDF值,可以评估词条对文档的区分能力。

4.优点:

  1. 简单性:TF-IDF算法易于理解和实现,不需要复杂的数学模型或机器学习技术。

  2. 有效性:在许多情况下,TF-IDF能够有效地捕捉文档中关键词的重要性,对于初步的文本分析和检索任务非常有效。

  3. 去噪能力:通过降低常见词的权重,TF-IDF减少了停用词和其他常见词对文本分析的影响。

  4. 无监督:TF-IDF不需要训练数据,可以应用于任何文本集合,无需事先标注。

  5. 多领域适用性:TF-IDF算法不依赖于特定领域的知识,因此可以应用于不同的领域和语料库。

  6. 可扩展性:TF-IDF可以应用于大规模文档集合,尽管计算和存储需求可能会随着文档数量的增加而增加。

5.缺点:

  1. 忽略词序:TF-IDF不考虑词条在文档中的位置或顺序,这可能会丢失一些语义信息。

  2. 对文档长度敏感:长文档可能会倾向于降低词条的权重,因为TF是基于词条出现次数的,而IDF与文档总数成反比。

  3. 无法捕捉同义词:TF-IDF无法识别意义相同或相近的不同词条,例如“汽车”和“轿车”可能被视为两个不同的词条。

  4. 无法处理多义词:TF-IDF不区分词条的不同含义,这可能导致在某些情况下权重分配不准确。

  5. 停用词处理:虽然TF-IDF降低了常见词的权重,但停用词的筛选需要预先进行,且不同的应用可能需要不同的停用词列表。

  6. 权重分配:TF-IDF的权重分配可能不是最优的,特别是在某些特定类型的文本分析任务中,可能需要更复杂的权重分配策略。

  7. 无法捕捉语义关系:TF-IDF不包含语义分析,无法捕捉词条之间的语义关系或上下文信息。

  8. 更新和维护成本:随着语料库的更新,TF-IDF模型需要重新计算,这可能在大规模数据集上是一个挑战。

6.代码实现

        1.数据预处理(task2_1.txt)

#打开文件task2_1.txt并读取所有行到列表cor。
import pandas as pd
infile=open(r"task2_1.txt","r")
cor=infile.readlines()

        2.导入TfidfVectorizer并初始化。

from sklearn.feature_extraction.text import TfidfVectorizer
tf=TfidfVectorizer()

        3.使用TfidfVectorizer将文本数据转换为TF-IDF矩阵。

tfidf=tf.fit_transform(cor)

        4.获取TF-IDF模型中的词汇表。

wordlist=tf.get_feature_names_out()

        5.创建一个DataFrame,其中词汇表作为索引,TF-IDF矩阵转置后的密集形式作为数据。

df=pd.DataFrame(tfidf.T.todense(),index=wordlist)

        6.遍历每篇文档,创建一个字典resdict来存储每篇文档中权重最高的词条。

for k in range(len(cor)):fea=df.iloc[:,k].to_list()resdict={}for i in range(0,len(wordlist)):if df.iloc[i,k]!= 0:  # 只考虑非零权重的词条resdict[wordlist[i]]=fea[i]# 按权重降序排序词条resdict=sorted(resdict.items(),key=lambda  x:x[1],reverse=True)print(resdict)

        7.完整代码

import pandas as pd
infile=open(r"task2_1.txt","r")
cor=infile.readlines()
# 初始化TfidfVectorizer
from sklearn.feature_extraction.text import TfidfVectorizer
tf=TfidfVectorizer()
# 转换文本数据为TF-IDF矩阵
tfidf=tf.fit_transform(cor)
# 获取词汇表
wordlist=tf.get_feature_names_out()
# 创建DataFrame,将词汇表作为行索引,原始文本数据作为列
df=pd.DataFrame(tfidf.T.todense(),index=wordlist)
for k in range(len(cor)):fea=df.iloc[:,k].to_list()resdict={}for i in range(0,len(wordlist)):if df.iloc[i,k]!= 0:resdict[wordlist[i]]=fea[i]resdict=sorted(resdict.items(),key=lambda  x:x[1],reverse=True)print(resdict)

这篇关于机器学习:TF-IDF算法原理及代码实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1120378

相关文章

windos server2022里的DFS配置的实现

《windosserver2022里的DFS配置的实现》DFS是WindowsServer操作系统提供的一种功能,用于在多台服务器上集中管理共享文件夹和文件的分布式存储解决方案,本文就来介绍一下wi... 目录什么是DFS?优势:应用场景:DFS配置步骤什么是DFS?DFS指的是分布式文件系统(Distr

NFS实现多服务器文件的共享的方法步骤

《NFS实现多服务器文件的共享的方法步骤》NFS允许网络中的计算机之间共享资源,客户端可以透明地读写远端NFS服务器上的文件,本文就来介绍一下NFS实现多服务器文件的共享的方法步骤,感兴趣的可以了解一... 目录一、简介二、部署1、准备1、服务端和客户端:安装nfs-utils2、服务端:创建共享目录3、服

C#使用yield关键字实现提升迭代性能与效率

《C#使用yield关键字实现提升迭代性能与效率》yield关键字在C#中简化了数据迭代的方式,实现了按需生成数据,自动维护迭代状态,本文主要来聊聊如何使用yield关键字实现提升迭代性能与效率,感兴... 目录前言传统迭代和yield迭代方式对比yield延迟加载按需获取数据yield break显式示迭

Python实现高效地读写大型文件

《Python实现高效地读写大型文件》Python如何读写的是大型文件,有没有什么方法来提高效率呢,这篇文章就来和大家聊聊如何在Python中高效地读写大型文件,需要的可以了解下... 目录一、逐行读取大型文件二、分块读取大型文件三、使用 mmap 模块进行内存映射文件操作(适用于大文件)四、使用 pand

python实现pdf转word和excel的示例代码

《python实现pdf转word和excel的示例代码》本文主要介绍了python实现pdf转word和excel的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一、引言二、python编程1,PDF转Word2,PDF转Excel三、前端页面效果展示总结一

在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码

《在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码》在MyBatis的XML映射文件中,trim元素用于动态添加SQL语句的一部分,处理前缀、后缀及多余的逗号或连接符,示... 在MyBATis的XML映射文件中,<trim>元素用于动态地添加SQL语句的一部分,例如SET或W

Python xmltodict实现简化XML数据处理

《Pythonxmltodict实现简化XML数据处理》Python社区为提供了xmltodict库,它专为简化XML与Python数据结构的转换而设计,本文主要来为大家介绍一下如何使用xmltod... 目录一、引言二、XMLtodict介绍设计理念适用场景三、功能参数与属性1、parse函数2、unpa

C#实现获得某个枚举的所有名称

《C#实现获得某个枚举的所有名称》这篇文章主要为大家详细介绍了C#如何实现获得某个枚举的所有名称,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考一下... C#中获得某个枚举的所有名称using System;using System.Collections.Generic;usi

Go语言实现将中文转化为拼音功能

《Go语言实现将中文转化为拼音功能》这篇文章主要为大家详细介绍了Go语言中如何实现将中文转化为拼音功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 有这么一个需求:新用户入职 创建一系列账号比较麻烦,打算通过接口传入姓名进行初始化。想把姓名转化成拼音。因为有些账号即需要中文也需要英

C# 读写ini文件操作实现

《C#读写ini文件操作实现》本文主要介绍了C#读写ini文件操作实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录一、INI文件结构二、读取INI文件中的数据在C#应用程序中,常将INI文件作为配置文件,用于存储应用程序的