基于最新2.2.0版本翻译

本节介绍和特征一起工作的算法,大致分为以下几类:提取:从原始数据提取特征

转换:缩放,转换,或者修改特征

选择:从一个大的特征集合里面选择一个子集

局部敏感哈希(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

局部敏感哈希欧几里德距离的随机投影

Jaccard距离最小hash特征转换

近似相似性join

近似最近邻搜索LSH操作

LSH算法

特征提取

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获得更详细的APIimport 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 vectorsval 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

作者:xcrossed

链接:https://www.jianshu.com/p/91a3920932c0

python tfidf特征变换_Spark MLlib机器学习开发指南(4)--特征提取--TF-IDF相关推荐

  1. python tfidf特征变换_Python机器学习之“特征工程”

    本次将介绍特征工程的一些常见示例:表示分类数据的特征.表示文本的特征和表示图像的特征.另外,还会介绍提高模型复杂度的衍生特征和处理缺失数据的填充方法.这个过程通常被称为向量化,因为它把任意格式的数据转 ...

  2. python tfidf特征变换_机器学习的“万能模板” - 数据分析

    最后是文本变量.很遗憾Titanic数据集中没有合适的文本变量.一般我们处理文本变量的方法是,合并所有的文本形成一个变量,然后调用Count Vectorizer或者TfidfVectorizer算法 ...

  3. python tfidf特征变换_Python中的TfidfVectorizer参数解析

    vectorizer = CountVectorizer() #构建一个计算词频(TF)的玩意儿,当然这里面不足是可以做这些 transformer = TfidfTransformer() #构建一 ...

  4. python tfidf特征变换_使用sklearn提取文本的tfidf特征

    from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer, TfidfTransformer corpu ...

  5. python实践pdf在线阅读_Python机器学习实践指南 PDF高清完整版

    Python机器学习实践指南 PDF高清完整版 作者: 库姆斯 (Alexander T.Combs) 出品方: 异步社区 原作名: Python Machine Learning Blueprint ...

  6. 独家 | 手把手教你用Python 3创建用于机器学习开发的Linux虚拟机(附安装教程代码)

    原文标题:How to Create a Linux Virtual Machine For Machine Learning Development With Python 3 作者:Jason B ...

  7. 独家 | 手把手教你用Python 3创建用于机器学习开发的Linux虚拟机(附安装教程代码)...

    Linux是使用Python进行机器学习开发的极佳环境.这些工具能够被简便快捷地安装,并且您可以直接开发和运行大型模型. 在本教程中,您将了解如何使用Python创建和安装用于机器学习的Linux虚拟 ...

  8. 以太坊Python智能合约开发指南

    在以太坊上获得一个基本的智能合约是一个很简单的事,只需google查询"ERC20代币教程",你会发现有关如何做到这一点的大量信息.以编程方式与合约交互完全是另一回事,如果你是一个 ...

  9. Python智能合约开发指南(以太坊+web3py)

    在以太坊上获得一个基本的智能合约是一个很简单的事,只需google查询"ERC20代币教程",你会发现有关如何做到这一点的大量信息.以编程方式与合约交互完全是另一回事,如果你是一个 ...

最新文章

  1. C程序中变量存放方式介绍
  2. 遨游金山网盾?蹦出来有啥用?
  3. 【SQL】表A多个字段,关联表B一个字段说明
  4. 转-SQL 2005修改系统表
  5. DOM-14 【实战】解决事件代理和鼠标移动事件的窘态
  6. silklabo哪个公众号有资源_微小说免费渣渣团资源公众号看大全集
  7. 发掘 CPU 与超级工厂的共性,程序员的心思你别猜
  8. 基于‘BOSS直聘招聘信息’分析企业到底需要什么样的PHPer
  9. c 字符串数组_C语言探索之旅 | 第二部分第四课:字符串
  10. 【转】WPF/Silverlight开发的15个最佳实践
  11. linux librtmp 编译,在linux系统下安装python librtmp包的实现方法
  12. 自动化测试基础篇--Selenium等待时间
  13. pcr计算码率的过程
  14. 修改jupyter notebook的默认工作路径
  15. 浏览器内核控制Meta标签说明文档(360浏览器默认极速模式)
  16. 贝尔宾团队角色理论及实践
  17. Java读取ID卡卡号源码
  18. usleep的调用过程
  19. 【Android楚君】【Python洪君】生成姓名: 根据性别、字数随机生成好听的名字
  20. 腾讯汤道生:产业互联网开放生态已初步形成,2021加大SaaS生态建设|CEO说

热门文章

  1. sqlserver oracle对比,sqlserver和oracle常用函数对比
  2. mysql登陆三小时平均值图片_Mysql每小时平均值,间隔从半小时开始
  3. zstd安装_PHP: 安装 - Manual
  4. 改变numpy的大小_Numpy入门详细教程
  5. 计算机逻辑判断函数函数知识点,计算机考点条件检测函数IF
  6. getlasterror返回57怎么解决_王者荣耀:用时最短职业比赛?3分57秒结束,解说都看呆了!...
  7. 河南大学计算机与信息工程学院张磊,张磊-食品与生物工程学院
  8. mysql用户如何迁移_迁移MySQL用户及权限
  9. pytorch tensor查找0_Pytorch简单教程
  10. 为什么服务器要选择 Linux,这里总结了 10 大理由