这一部分我们主要介绍和特征处理相关的算法,大体分为以下三类:

特征抽取:从原始数据中抽取特征

特征转换:特征的维度、特征的转化、特征的修改

特征选取:从大规模特征集中选取一个子集

特征提取

TF-IDF (HashingTF and IDF)

“词频-逆向文件频率”(TF-IDF)是一种在文本挖掘中广泛使用的特征向量化方法,它可以体现一个文档中词语在语料库中的重要程度。

​ 词语由t表示,文档由d表示,语料库由D表示。词频TF(t,d)是词语t在文档d中出现的次数。文件频率DF(t,D)是包含词语的文档的个数。如果我们只使用词频来衡量重要性,很容易过度强调在文档中经常出现,却没有太多实际信息的词语,比如“a”,“the”以及“of”。如果一个词语经常出现在语料库中,意味着它并不能很好的对文档进行区分。TF-IDF就是在数值化文档信息,衡量词语能提供多少信息以区分文档。其定义如下:

​ 此处 是语料库中总的文档数。公式中使用log函数,当词出现在所有文档中时,它的IDF值变为0。加1是为了避免分母为0的情况。TF-IDF 度量值表示如下:

​ 此处

是语料库中总的文档数。公式中使用log函数,当词出现在所有文档中时,它的IDF值变为0。加1是为了避免分母为0的情况。TF-IDF 度量值表示如下:

​ 在Spark ML库中,TF-IDF被分成两部分:TF (+hashing) 和 IDF。

TF: HashingTF 是一个Transformer,在文本处理中,接收词条的集合然后把这些集合转化成固定长度的特征向量。这个算法在哈希的同时会统计各个词条的词频。

IDF: IDF是一个Estimator,在一个数据集上应用它的fit()方法,产生一个IDFModel。 该IDFModel 接收特征向量(由HashingTF产生),然后计算每一个词在文档中出现的频次。IDF会减少那些在语料库中出现频率较高的词的权重。

​ Spark.mllib 中实现词频率统计使用特征hash的方式,原始特征通过hash函数,映射到一个索引值。后面只需要统计这些索引值的频率,就可以知道对应词的频率。这种方式避免设计一个全局1对1的词到索引的映射,这个映射在映射大量语料库时需要花费更长的时间。但需要注意,通过hash的方式可能会映射到同一个值的情况,即不同的原始特征通过Hash映射后是同一个值。为了降低这种情况出现的概率,我们只能对特征向量升维。i.e., 提高hash表的桶数,默认特征维度是 2^20 = 1,048,576.

在下面的代码段中,我们以一组句子开始。首先使用分解器Tokenizer把句子划分为单个词语。对每一个句子(词袋),我们使用HashingTF将句子转换为特征向量,最后使用IDF重新调整特征向量。这种转换通常可以提高使用文本特征的性能。

首先,导入TFIDF所需要的包:

from pyspark.ml.feature import HashingTF,IDF,Tokenizer

准备工作完成后,我们创建一个简单的DataFrame,每一个句子代表一个文档。

sentenceData = spark.createDataFrame([(0, "I heard about Spark and I love Spark"),(0, "I wish Java could use case classes"),(1, "Logistic regression models are neat")]).toDF("label", "sentence")

在得到文档集合后,即可用tokenizer对句子进行分词

tokenizer = Tokenizer(inputCol="sentence", outputCol="words")

wordsData = tokenizer.transform(sentenceData)

得到分词后的文档序列后,即可使用HashingTF的transform()方法把句子哈希成特征向量,这里设置哈希表的桶数为2000。

hashingTF = HashingTF(inputCol="words", outputCol="rawFeatures", numFeatures=20)

featurizedData = hashingTF.transform(wordsData)

​可以看到,分词序列被变换成一个稀疏特征向量,其中每个单词都被散列成了一个不同的索引值,特征向量在某一维度上的值即该词汇在文档中出现的次数。

最后,使用IDF来对单纯的词频特征向量进行修正,使其更能体现不同词汇对文本的区别能力,IDF是一个Estimator,调用fit()方法并将词频向量传入,即产生一个IDFModel。

idf = IDF(inputCol="rawFeatures", outputCol="features")

idfModel = idf.fit(featurizedData)

很显然,IDFModel是一个Transformer,调用它的transform()方法,即可得到每一个单词对应的TF-IDF度量值。

rescaledData = idfModel.transform(featurizedData)

rescaledData.select("label", "features").show()

可以看到,特征向量已经被其在语料库中出现的总次数进行了修正,通过TF-IDF得到的特征向量,在接下来可以被应用到相关的机器学习方法中。

python的特征提取实验一_Spark 2.1.0 入门:特征抽取 — TF-IDF(Python版)相关推荐

  1. python的特征提取实验一_在opencv3中使用ORB进行特征提取实验-Python版

    ORB (Oriented FAST and Rotated BRIEF) 分为两部分: 特征点提取 -由FAST(Features from Accelerated Segment Test)算法发 ...

  2. Pytorch1.1.0 入门 自定义op(python)

    因为需求,需要调研tensorRT与ONNX关于自定义层的方法.经过之前的调研,首先,关于onnx,开发者手册中的介绍有限,在已知的demo中没有关于onnx自定义层的,详情见TensorRT 5.1 ...

  3. python是一种面向对象的高级语言_为什么入门大数据选择Python而不是Java?

    马云说:"未来最大的资源就是数据,不参与大数据十年后一定会后悔."毕竟出自wuli马大大之口,今年二月份我开始了学习大数据的道路,直到现在对大数据的学习脉络和方法也渐渐清晰.今天我 ...

  4. python适合开发区块链吗_区块链入门开发语言选择 python适合开发区块链吗

    区块链用什么需要开发?在哪可以了解? 从现在各个公有链的使用情况来看,来一代的都是参考Bitcoin,使用C 开发,而新一代的区块链技术使用的语言则是Go,Python,C#和JavaScript.以 ...

  5. Python使用numpy中trim_zeros函数去除首尾0值的语法

    Python使用numpy中trim_zeros函数去除首尾0值的语法 目录 Python使用numpy中trim_zeros函数去除首尾0值的语法 #numpy中trim_zeros

  6. 用python玩转办公软件(pandas数据分析)入门

    用python玩转办公软件(pandas数据分析)入门 文章目录 用python玩转办公软件(pandas数据分析)入门 1.pandas介绍 2.csv文件介绍 3.pandas常用操作csv (1 ...

  7. Python模拟赌博实验,赌博为什么能赌到倾家荡产?

    Python模拟赌博实验 作者:dalalaa http://www.jianshu.com/p/2d919a028600 概述 前言 实验思路 实验步骤 统计数据 结论 阿广说 福利一刻 推荐阅读 ...

  8. python程序设计梁勇 百度网盘_20194220 2019-2020-2 《Python程序设计》实验二报告

    20194220 2019-2020-2 <Python程序设计>实验二报告 课程:<Python程序设计> 班级: 1942 姓名: 梁勇 学号:20194220 实验教师: ...

  9. python实训报告pygame_20181218 实验四《Python程序设计》实验报告

    20181218 2019-2020-2 <Python程序设计>实验四报告 课程:<Python程序设计> 班级: 1812 姓名: 学号:20181218 实验教师:王志强 ...

最新文章

  1. 重复提交版本之后该采取的测试策略
  2. ffmpeg拿AVPacket做缓冲队列时注意
  3. CentOS 7安装教程(图文详解)如下
  4. AngularJS路由使用案例
  5. MATLAB(六)数据处理
  6. html框架里面怎么填写内容_还不会Python高级框架?进来,速学
  7. 一篇文章搞定Python多进程
  8. CSS(九)元素隐藏和利弊
  9. ImageView显示控制
  10. python定时器 中止_定时器Timer如何终止运行的问题
  11. FlyMcu 串口无法打开 串口被占用
  12. 秒杀抢购助手,支持淘宝/天猫+京东+苏宁易购+聚划算百亿补贴+拼多多抢券
  13. 制作扫码连wifi的二维码
  14. ubuntu20.04设置登录壁纸
  15. MySQL复制表结构
  16. Python中字符的匹配
  17. 高效能人士的七个习惯总结
  18. [WebView] - WebView leaked
  19. 2016年终总结:一份来自跨界喜剧人的告白
  20. mapgis java二次开发_mapgis7.0二次开发小试牛刀

热门文章

  1. IDEA图形化操作git
  2. 第十篇: 高可用的服务注册中心(Finchley版本)V2.0_dev
  3. powerdesigner逆向工程(sql转pdm)
  4. 快速部署web项目上线云服务器
  5. shell取当前月份第一天_红帽认证8.0版本即将发布!Ansible和shell脚本自动化将重点考察...
  6. 2020洪灾地图_卫星地图看洪灾:为何湖北易发洪水?
  7. windows如何生成ssh密钥
  8. 逐鹿工具显示服务器错误连接不上怎么解决,win7系统安装逐鹿工具箱提示“error launching installer”错误的解决方法...
  9. 获得分辨率_变分辨率宽幅面光固化3D打印,
  10. java 排序api_用java api进行sort