热门标签 | HotTags
当前位置:  开发笔记 > 人工智能 > 正文

机器学习-TF-IDF源代码实现

TF-IDF本博文介绍如何对文本文件进行打标,在实际的文本业务场景中,对文章打标是最为常见的应用之一。当我们打开一篇关于足球比赛的新闻的时候,往往可以看到在新闻的正文前面会有“体育”

TF-IDF

   本博文介绍如何对文本文件进行打标,在实际的文本业务场景中,对文章打标是最为常见的应用之一。当我们打开一篇关于足球比赛的新闻的时候,往往可以看到在新闻的正文前面会有“体育”“足球”这样的小标签,这些标签可以帮助人们对文章进行分类,也 可以作为文本内容推荐的一个依据。很多时候,我们看到的文本内容是通过内容提供者手 动标记的,本节将介绍一种自动打标的算法TF-IDF。


基础概要

  词频-逆向文件频率Term Frequency-inverse Document Frequency TF-IDF )是一种用于信息检索与数据挖掘的技术,也就是常见的文本的打标。要理解TF-IDF法实现原理,首先要先知道什么是文本打标。文本打标就是找出最能代表这个文本意义的—些词 语,这里涉及两个方面:一方面是打标词语要出现得足够多,也就足通过对文章进行词频统 计,在通常情况下出现多的词语才是最能代表文章意义的,这是单从一篇文章的角度来决定 的:另一方面,把多篇文章放在一起来比较,类似于“的” “是”这样的常用助词可能在每篇 文章中出现的频率都很高,虽然这些词满足了出现频率高的要求,但是它们并不能作为每篇 文章的标签,因为这些词语不具备个性。所谓个性就是当我们把多篇文章放到一起来看,要 找出每篇文章独特的词语,也就是某个词可能在文章A中出现得非常多,在其他文章都没怎么出现,那么这个词语对本文章来讲就具有代表性,可以作为标签来代表这篇文章。

  以上两方面就是TF-IDF这个算法的精髓体现。我们再把TF-IDF从字面意义的角度拆开理解,对某个词语B, TF (Term Frequency)表示B在某篇文章中出现的频率,DF(Documem Frequency)表示出现词语B的文章占到所有文章的比例。只有TF和DF进行 Inverse,也就是除法,才能正确地表示某个词语在对应某个文章的TF-IDF的值。下面通过公式推导TF-IDF值。


算法推导

  具体的TF-IDF求解过程是通过求解TF和IDF值来实现的。这里先设置几个变量 t 表示某个词,d表示某篇文章,D表示全部文章的集合,绝对值符号丨丨表示对象的个数。

(1 ) TF值求解。TF值求解一般是依赖分词和词频统计的结果,我们举—个例子说明, 假设有这样的一个文本“我爱踢足球,踢足球很累”。通过分词和词频统计可以得到下面 的结果{足球:2,踢:2,我:1.,爱:1,累:1,很:1},这里边—共出现8个词(足球和踢出现了 两次)。对“足球”这个词来讲,它在这个文本文件中的TF值就是2/8=0.25。TF是表示的单个词在对应的文章中的出现频率,公式为

TF(t,d)=|t| / |d|


(2) IDF值求解。IDF的值表示的是出现某个词语f的文章,占到总文章集合的百分比。假如有3篇文章分别是{“小明是个好学生。”},{“小明喜欢苹果。”},{“中国真大。”}这里“小明”的DF值为2/3。IDF是将DF求倒数,并且通常会取对数,涉及信息论中摘的槪念。IDF的公式为

    IDF (t , D)= log[ |D| / |{t属于d:d属于}|]


最终t在d中的TF-IDF值

TF-IDF(t , d , D)= TF(t,d)*  IDF (t , D)



代码:



结果:


  可以看出tell在doc1中出现的次数很多,但在doc2,doc3中出现的次数同样多,所以不能作为doc1的标签,他的TF-IDF值偏低,再看how在doc3中出现的次数多,但在doc1,doc2中没有出现,所以how在对应的doc3中的TF-IDF值偏高,这段代码可以很清晰的看出TF-IDF的算法特性

  这个算法的推导非常简单,需要注意的是TF-IDF不是根据词在某一篇文章中的出现频率来打分,而是根据词对文章的代表性来评估的,TF-IDF得出词的特征值配合分类算法或者聚类算法进行训练,所以更多的时候. TF-IDF并不是一个文本分析中的结果项而是作为特征值来使用。











推荐阅读
  • Python 工具推荐 | PyHubWeekly 第二十一期:提升命令行体验的五大工具
    本期 PyHubWeekly 为大家精选了 GitHub 上五个优秀的 Python 工具,涵盖金融数据可视化、终端美化、国际化支持、图像增强和远程 Shell 环境配置。欢迎关注并参与项目。 ... [详细]
  • 毕业设计:基于机器学习与深度学习的垃圾邮件(短信)分类算法实现
    本文详细介绍了如何使用机器学习和深度学习技术对垃圾邮件和短信进行分类。内容涵盖从数据集介绍、预处理、特征提取到模型训练与评估的完整流程,并提供了具体的代码示例和实验结果。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文将介绍如何使用 Go 语言编写和运行一个简单的“Hello, World!”程序。内容涵盖开发环境配置、代码结构解析及执行步骤。 ... [详细]
  • 本文探讨了Hive中内部表和外部表的区别及其在HDFS上的路径映射,详细解释了两者的创建、加载及删除操作,并提供了查看表详细信息的方法。通过对比这两种表类型,帮助读者理解如何更好地管理和保护数据。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 数据管理权威指南:《DAMA-DMBOK2 数据管理知识体系》
    本书提供了全面的数据管理职能、术语和最佳实践方法的标准行业解释,构建了数据管理的总体框架,为数据管理的发展奠定了坚实的理论基础。适合各类数据管理专业人士和相关领域的从业人员。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • 机器学习中的相似度度量与模型优化
    本文探讨了机器学习中常见的相似度度量方法,包括余弦相似度、欧氏距离和马氏距离,并详细介绍了如何通过选择合适的模型复杂度和正则化来提高模型的泛化能力。此外,文章还涵盖了模型评估的各种方法和指标,以及不同分类器的工作原理和应用场景。 ... [详细]
  • 基于机器学习的人脸识别系统实现
    本文介绍了一种使用机器学习技术构建人脸识别系统的实践案例。通过结合Python编程语言和深度学习框架,详细展示了从数据预处理到模型训练的完整流程,并提供了代码示例。 ... [详细]
  • 机器学习核心概念与技术
    本文系统梳理了机器学习的关键知识点,涵盖模型评估、正则化、线性模型、支持向量机、决策树及集成学习等内容,并深入探讨了各算法的原理和应用场景。 ... [详细]
  • 随着生活节奏的加快和压力的增加,越来越多的人感到不快乐。本文探讨了现代社会中导致人们幸福感下降的各种因素,并提供了一些改善建议。 ... [详细]
  • Python中HOG图像特征提取与应用
    本文介绍如何在Python中使用HOG(Histogram of Oriented Gradients)算法进行图像特征提取,探讨其在目标检测中的应用,并详细解释实现步骤。 ... [详细]
author-avatar
喵咘噜_783
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有