python的特征提取实验一_Spark 2.1.0 入门:特征抽取 — TF-IDF(Python版)
这一部分我们主要介绍和特征处理相关的算法,大体分为以下三类:
特征抽取:从原始数据中抽取特征
特征转换:特征的维度、特征的转化、特征的修改
特征选取:从大规模特征集中选取一个子集
特征提取
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版)相关推荐
- python的特征提取实验一_在opencv3中使用ORB进行特征提取实验-Python版
ORB (Oriented FAST and Rotated BRIEF) 分为两部分: 特征点提取 -由FAST(Features from Accelerated Segment Test)算法发 ...
- Pytorch1.1.0 入门 自定义op(python)
因为需求,需要调研tensorRT与ONNX关于自定义层的方法.经过之前的调研,首先,关于onnx,开发者手册中的介绍有限,在已知的demo中没有关于onnx自定义层的,详情见TensorRT 5.1 ...
- python是一种面向对象的高级语言_为什么入门大数据选择Python而不是Java?
马云说:"未来最大的资源就是数据,不参与大数据十年后一定会后悔."毕竟出自wuli马大大之口,今年二月份我开始了学习大数据的道路,直到现在对大数据的学习脉络和方法也渐渐清晰.今天我 ...
- python适合开发区块链吗_区块链入门开发语言选择 python适合开发区块链吗
区块链用什么需要开发?在哪可以了解? 从现在各个公有链的使用情况来看,来一代的都是参考Bitcoin,使用C 开发,而新一代的区块链技术使用的语言则是Go,Python,C#和JavaScript.以 ...
- Python使用numpy中trim_zeros函数去除首尾0值的语法
Python使用numpy中trim_zeros函数去除首尾0值的语法 目录 Python使用numpy中trim_zeros函数去除首尾0值的语法 #numpy中trim_zeros
- 用python玩转办公软件(pandas数据分析)入门
用python玩转办公软件(pandas数据分析)入门 文章目录 用python玩转办公软件(pandas数据分析)入门 1.pandas介绍 2.csv文件介绍 3.pandas常用操作csv (1 ...
- Python模拟赌博实验,赌博为什么能赌到倾家荡产?
Python模拟赌博实验 作者:dalalaa http://www.jianshu.com/p/2d919a028600 概述 前言 实验思路 实验步骤 统计数据 结论 阿广说 福利一刻 推荐阅读 ...
- python程序设计梁勇 百度网盘_20194220 2019-2020-2 《Python程序设计》实验二报告
20194220 2019-2020-2 <Python程序设计>实验二报告 课程:<Python程序设计> 班级: 1942 姓名: 梁勇 学号:20194220 实验教师: ...
- python实训报告pygame_20181218 实验四《Python程序设计》实验报告
20181218 2019-2020-2 <Python程序设计>实验四报告 课程:<Python程序设计> 班级: 1812 姓名: 学号:20181218 实验教师:王志强 ...
最新文章
- 重复提交版本之后该采取的测试策略
- ffmpeg拿AVPacket做缓冲队列时注意
- CentOS 7安装教程(图文详解)如下
- AngularJS路由使用案例
- MATLAB(六)数据处理
- html框架里面怎么填写内容_还不会Python高级框架?进来,速学
- 一篇文章搞定Python多进程
- CSS(九)元素隐藏和利弊
- ImageView显示控制
- python定时器 中止_定时器Timer如何终止运行的问题
- FlyMcu 串口无法打开 串口被占用
- 秒杀抢购助手,支持淘宝/天猫+京东+苏宁易购+聚划算百亿补贴+拼多多抢券
- 制作扫码连wifi的二维码
- ubuntu20.04设置登录壁纸
- MySQL复制表结构
- Python中字符的匹配
- 高效能人士的七个习惯总结
- [WebView] - WebView leaked
- 2016年终总结:一份来自跨界喜剧人的告白
- mapgis java二次开发_mapgis7.0二次开发小试牛刀
热门文章
- IDEA图形化操作git
- 第十篇: 高可用的服务注册中心(Finchley版本)V2.0_dev
- powerdesigner逆向工程(sql转pdm)
- 快速部署web项目上线云服务器
- shell取当前月份第一天_红帽认证8.0版本即将发布!Ansible和shell脚本自动化将重点考察...
- 2020洪灾地图_卫星地图看洪灾:为何湖北易发洪水?
- windows如何生成ssh密钥
- 逐鹿工具显示服务器错误连接不上怎么解决,win7系统安装逐鹿工具箱提示“error launching installer”错误的解决方法...
- 获得分辨率_变分辨率宽幅面光固化3D打印,
- java 排序api_用java api进行sort