Spark MLlib数据挖掘3--特征提取和转换

Spark MLlib数据挖掘3–特征提取和转换

一、TF-IDF回顾
1.TF-IDF(Term frequency-inverse document frequency )
TF-IDF是文本挖掘中一种广泛使用的特征向量化方法。TF-IDF反映了语料中单词对文档的重要程度。假设单词用t表示,F表示频度,文档用d表示,语料用D表示,那么文档频度DF(t, D)是包含单词t的文档数。
如果仅使用词的频率来衡量重要性,则介词、人称代词等词会对文档的描述产生很重要的作用,而这些词实质上对文档的描述并没有决定性的作用,例如“a”,“the”,“of”,“we”和“I”。因此如果术语在语料库中经常出现,则表示它不包含有关特定文档的特殊信息。

2.公式
逆文档频度(IDF)是单词携带信息量的数值度量。
在这里插入图片描述
其中 |D|是语料中的文档总数,DF(t, D)是包含单词t的文档数,文档用d表示,语料用D表示。由于使用了log计算,如果单词在所有文档中出现,那么IDF就等于0。注意这里做了平滑处理(+1操作),防止单词没有在语料中出现时IDF计算中除0。
TF-IDF度量是TF和IDF的简单相乘:
在这里插入图片描述
MLlib中词频统计的实现使用了hashing trick(散列技巧),也就是使用哈希函数将原始特征映射到一个数字索引。然后基于这个索引来计算词频。

3.在spark 中TF和IDF的实现是HashingTF和IDF。HashingTF以RDD为输入。

import org.apache.spark.rdd.RDD
import org.apache.spark.SparkContext
import org.apache.spark.mllib.feature.HashingTF
import org.apache.spark.mllib.linalg.Vector
import org.apache.spark.mllib.feature.IDF

val sc: SparkContext = ...
//读取文档数据保存到RDD:documents中
val documents: RDD[Seq[String]] = sc.textFile("...").map(_.split(" ").toSeq)
val hashingTF = new HashingTF()
//获取文档数据的单词频度矩阵
val tf: RDD[Vector] = hashingTF.transform(documents)
//依据tf计算文档的IDF值
val idf = new IDF().fit(tf)
//依据idf和tf计算文档的tfidf值
val tfidf: RDD[Vector] = idf.transform(tf)

在Spark MLlib中IDF可以设置文档的最低频度,用于过滤少于最小数量的文档中出现的术语,设置参数为minDocFreq。

import org.apache.spark.rdd.RDD
import org.apache.spark.SparkContext
import org.apache.spark.mllib.feature.HashingTF
import org.apache.spark.mllib.linalg.Vector
import org.apache.spark.mllib.feature.IDF

//读取文档数据保存到RDD:documents中
val documents: RDD[Seq[String]] = sc.textFile("...").map(_.split(" ").toSeq)
val hashingTF = new HashingTF()
//获取文档数据的单词频度矩阵
val tf: RDD[Vector] = hashingTF.transform(
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值