热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SparkMLlib机器学习开发指南(4)特征提取TFIDF

翻译自官方文档基于最新2.2.0版本翻译转载注明出处xcrossed机器学习本节介绍和特征一起工作的算法,大致分为以下几类:提取:从原始数据提取特征转换:缩放,转换,或者修改特征选

翻译自官方文档

基于最新2.2.0版本翻译

转载注明出处 xcrossed 机器学习

本节介绍和特征一起工作的算法,大致分为以下几类:

  • 提取:从原始数据提取特征
  • 转换:缩放,转换,或者修改特征
  • 选择:从一个大的特征集合里面选择一个子集
  • 局部敏感哈希(LSH):这类算法能将特征变换与其他算法相结合

目录

  • 特征提取
    • TF-IDF
    • Word2Vec
    • CountVectorizer
  • 特征转换
    • 标记生成器(Tokenizer)
    • 停用词移除器(StopWordsRemover)
    • n-gram
    • 二值化
    • PCA
    • 多项式展开(PolynomialExpansion)
    • 离散余弦变换(Discrete Cosine Transform DCT)
    • StringIndexer
    • IndexToString
    • OneHotEncoder
    • VectorIndexer
    • Interaction
    • Normalizer
    • StandardScaler
    • MinMaxScaler
    • MaxAbsScaler
    • Bucketizer
    • ElementwiseProduct
    • SQLTransformer
    • VectorAssembler
    • QuantileDiscretizer
    • Imputer
  • 特征选择
    • VectorSlicer
    • RFormula
    • ChiSqSelector
  • 局部敏感哈希
    • LSH操作
      • 特征转换
      • 近似相似性join
      • 近似最近邻搜索
    • LSH算法
      • 欧几里德距离的随机投影
      • Jaccard距离最小hash
特征提取

TF-IDF
TF-IDF是在文本挖掘中广泛使用的特征向量化方法,以反映语料库中文档的词语的重要性。用t表示一个词,d表示一篇文档,D表示文档集, 词频TF(t, d)表示表示文档d中词t的个数,文档频率DF(t,D)表示在文档集D中词t出现的个数。如果我们仅仅用词频衡量重要性,非常容易出现那些 频频繁出现的词如the,of但表示出很少和文档有关的信息。如果一个词语在语料库中经常出现,这意味着它不携带关于特定文档的特殊信息。逆文档频率IDF是一个词语能提供多少信息的数值化表示。

IDF(t,D)=log((|D|+1)/(DF(t, D) + 1))

在这里,|D|是语料的总文档数,由于使用对数,如果一个词出现在所有文档中,则IDF值 为0,应用平滑项以避免分母为0。TF-IDF是度量TF和IDF的产物:

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

词频和文档频率有很多定义的方法。在MLlib,我们分离TF和IDF,使其灵活。
TF:HashingTF和CountVectorizer都可以用来生成词频向量。
HashingTF是一个转换器,它接受词集合输入,并将这些集合转换为固定长度的特征向量。
在文本处理中,一个词语集合也许是一个词袋。HashingTF利用哈希技巧。原始特征被映射到索引通过使用Hash函数。Hash函数使用MurmurHash 3,然后根据映射的索引计算词频。这个方法避免了在大语料上成本昂贵的全局词索引map的计算方式,但是会存在潜在的hash冲突,也就是不同的词特征在hash后被映射成相同的词。为了减少冲突的机会,我们可以增加目标特征维度,即散列表的桶数。由于使用简单的模数将散列函数转换为列索引,建议使用两个幂作为特征维,否则不会将特征均匀地映射到列。默认的特征维度为2^18=262,144.可选的二进制切换参数控制词频计数。当设置为true时,所有非零频率计数设置为1.对于模拟二进制而不是整数计数的离散概率模型特别有用。
CountVectorizer 将一个文本文档转成词数向量,具体参考CountVectorizer
IDF:IDF是一个估计器,通过拟合数据集产生一个IDFModel。IDFModel输入特征向量(通过由HashingTF 或者 CountVectorizer创建)并且缩放每列。直观地说,它减少了在语料库中频繁出现的列。
注意:spark.ml 不提供文本分词,我们参照Stanford NLP Group和scalanlp/chalk.

示例
在下面的代码段中,我们从一组句子开始。我们用Tokenizer将每个句子分成单词。
对于每个句子(包的单词),我们使用HashingTF将该句子哈希成特征向量。我们使用IDF来重新缩放特征向量;这通常在使用文本作为功能时提高性能。然后,我们的特征向量可以被传递给学习算法。
参考HashingTF Scala docs和IDF Scala docs获得更详细的API

import org.apache.spark.ml.feature.{HashingTF, IDF, Tokenizer}
val sentenceData = spark.createDataFrame(Seq(
(0.0, "Hi I heard about Spark"),
(0.0, "I wish Java could use case classes"),
(1.0, "Logistic regression models are neat")
)).toDF("label", "sentence")
val tokenizer = new Tokenizer().setInputCol("sentence").setOutputCol("words")
val wordsData = tokenizer.transform(sentenceData)
val hashingTF = new HashingTF()
.setInputCol("words").setOutputCol("rawFeatures").setNumFeatures(20)
val featurizedData = hashingTF.transform(wordsData)
// alternatively, CountVectorizer can also be used to get term frequency vectors
val idf = new IDF().setInputCol("rawFeatures").setOutputCol("features")
val idfModel = idf.fit(featurizedData)
val rescaledData = idfModel.transform(featurizedData)
rescaledData.select("label", "features").show()

完整示例请参考spark仓库examples/src/main/scala/org/apache/spark/examples/ml/TfIdfExample.scala


推荐阅读
  • 本指南从零开始介绍Scala编程语言的基础知识,重点讲解了Scala解释器REPL(读取-求值-打印-循环)的使用方法。REPL是Scala开发中的重要工具,能够帮助初学者快速理解和实践Scala的基本语法和特性。通过详细的示例和练习,读者将能够熟练掌握Scala的基础概念和编程技巧。 ... [详细]
  • 在机器学习领域,深入探讨了概率论与数理统计的基础知识,特别是这些理论在数据挖掘中的应用。文章重点分析了偏差(Bias)与方差(Variance)之间的平衡问题,强调了方差反映了不同训练模型之间的差异,例如在K折交叉验证中,不同模型之间的性能差异显著。此外,还讨论了如何通过优化模型选择和参数调整来有效控制这一平衡,以提高模型的泛化能力。 ... [详细]
  • 独家解析:深度学习泛化理论的破解之道与应用前景
    本文深入探讨了深度学习泛化理论的关键问题,通过分析现有研究和实践经验,揭示了泛化性能背后的核心机制。文章详细解析了泛化能力的影响因素,并提出了改进模型泛化性能的有效策略。此外,还展望了这些理论在实际应用中的广阔前景,为未来的研究和开发提供了宝贵的参考。 ... [详细]
  • 本文探讨了一种高效的算法,用于生成所有数字(0-9)的六位组合,允许重复使用数字,并确保这些组合的和等于给定的整数N。该算法通过优化搜索策略,显著提高了计算效率,适用于大规模数据处理和组合优化问题。 ... [详细]
  • 计算机视觉领域介绍 | 自然语言驱动的跨模态行人重识别前沿技术综述(上篇)
    本文介绍了计算机视觉领域的最新进展,特别是自然语言驱动的跨模态行人重识别技术。上篇内容详细探讨了该领域的基础理论、关键技术及当前的研究热点,为读者提供了全面的概述。 ... [详细]
  • 美团优选推荐系统架构师 L7/L8:算法与工程深度融合 ... [详细]
  • 投融资周报 | Circle 达成 4 亿美元融资协议,唯一艺术平台 A 轮融资超千万美元 ... [详细]
  • 为了评估精心优化的模型与策略在实际环境中的表现,Google对其实验框架进行了全面升级,旨在实现更高效、更精准和更快速的在线测试。新的框架支持更多的实验场景,提供更好的数据洞察,并显著缩短了实验周期,从而加速产品迭代和优化过程。 ... [详细]
  • 本文介绍了如何利用 `matplotlib` 库中的 `FuncAnimation` 类将 Python 中的动态图像保存为视频文件。通过详细解释 `FuncAnimation` 类的参数和方法,文章提供了多种实用技巧,帮助用户高效地生成高质量的动态图像视频。此外,还探讨了不同视频编码器的选择及其对输出文件质量的影响,为读者提供了全面的技术指导。 ... [详细]
  • 如何在Linux服务器上配置MySQL和Tomcat的开机自动启动
    在Linux服务器上部署Web项目时,通常需要确保MySQL和Tomcat服务能够随系统启动而自动运行。本文将详细介绍如何在Linux环境中配置MySQL和Tomcat的开机自启动,以确保服务的稳定性和可靠性。通过合理的配置,可以有效避免因服务未启动而导致的项目故障。 ... [详细]
  • 在尝试对 QQmlPropertyMap 类进行测试驱动开发时,发现其派生类中无法正常调用槽函数或 Q_INVOKABLE 方法。这可能是由于 QQmlPropertyMap 的内部实现机制导致的,需要进一步研究以找到解决方案。 ... [详细]
  • 本文探讨了利用Python实现高效语音识别技术的方法。通过使用先进的语音处理库和算法,本文详细介绍了如何构建一个准确且高效的语音识别系统。提供的代码示例和实验结果展示了该方法在实际应用中的优越性能。相关文件可从以下链接下载:链接:https://pan.baidu.com/s/1RWNVHuXMQleOrEi5vig_bQ,提取码:p57s。 ... [详细]
  • 如何使用mysql_nd:Python连接MySQL数据库的优雅指南
    无论是进行机器学习、Web开发还是爬虫项目,数据库操作都是必不可少的一环。本文将详细介绍如何使用Python通过 `mysql_nd` 库与 MySQL 数据库进行高效连接和数据交互。内容涵盖以下几个方面: ... [详细]
  • 能够感知你情绪状态的智能机器人即将问世 | 科技前沿观察
    本周科技前沿报道了多项重要进展,包括美国多所高校在机器人技术和自动驾驶领域的最新研究成果,以及硅谷大型企业在智能硬件和深度学习技术上的突破性进展。特别值得一提的是,一款能够感知用户情绪状态的智能机器人即将问世,为未来的人机交互带来了全新的可能性。 ... [详细]
  • 机器学习中的标准化缩放、最小-最大缩放及鲁棒缩放技术解析 ... [详细]
author-avatar
啊明小窝日记
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有