Spark机器学习之 TF-IDF

Spark机器学习之 TF-IDF

TF-IDF简介

TF-IDF叫做词频-逆向文件频率,主要体现一个文档当中的词语在语料库中的重要程度,计算公式如下:
I D F ( t , D ) = l o g ∣ D ∣ + 1 D F ( t , D ) + 1 , . IDF(t,D) = log\frac{|D|+1}{DF(t,D)+1},. IDF(t,D)=logDF(t,D)+1D+1,.

TF分为两步,分为TF和IDF,在TF中使用Hashing处理文本,HashingTF相当于一个转换器,在文本当中会把相关的单词构成一个集合输入到hashingTF中,并由HasingTF转换成固定长度的特征向量,IDF是一个评估器,将TF转换器转换得到的特征向量作为当前的IDFModel的输入,通过计算得到单词在文档中出现的频次,IDF会进行权重的调整,会把介词等词的权重进行调整

示例如下

导入TF-IDF所需要的包
import org.apache.spark.ml.feature.{HashingTF,IDF,Tokenizer}
RDD的隐式转换包
import spark.implicits._
创建一个简单的DataFrame
val sentenceData=spark.createDataFrame(Seq(
      (0,"I heard Spark but I love MapReduce"),
      (1,"I wish Java could use case classes"),
      (2,"Logistic regression models are neat")
      )).toDF("label","sentence")
使用tokenizer对句子进行分词操作

setInputCol表示输入列,setOutputCol表示输出列,输入列为sentence,输出到words中

val tokenizer=new Tokenizer().setInputCol("sentence").setOutputCol("words")
val wordsData=tokenizer.transform(sentenceData)
查看分词结果
wordsData.show(false)

在这里插入图片描述

使用HashingTF的transform方法把句子哈希成为特征向量

使用setNumFeatures()设置向量空间大小

val hashingTF=new
HashingTF().setInputCol("words").setOutputCol("rawFeatures").setNumFeatures(2000)
val featurizedData=hashingTF.transform(wordsData)
featurizedData.select("rawFeatures").show(false)

在这里插入图片描述其中2000表示哈希桶数量,第一个中括号的内容表示哈希值,第二个中括号表示单词出现的次数

使用IDF对单纯的词频特征向量进行权重调整

这一步主要是减少a,an,the之类的单词的权重,得到新的特征向量

val idf=new IDF().setInputCol("rawFeatures").setOutputCol("features")
val idfModel=idf.fit(featurizedData)
调用IDFModel的transform方法

take(3)表示取出前三条记录

val rescaledData=idfModel.transform(featurizedData)
rescaledData.select("features","label").take(3).foreach(println)

在这里插入图片描述
此时第二个中括号内的数据表示的就是每个单词的重要性的权值

自此结束,完成了TF-IDF度量值的抽取
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值