sparl ML使用TFIDF

TFIDF将文本向量化,用于后期的特征使用

1.创建DF

// $example on$
val sentenceData = sqlContext.createDataFrame(Seq(
  (0, "Hi I heard about Spark"),
  (0, "I wish Java could use case classes"),
  (1, "Logistic regression models are neat")
)).toDF("label", "sentence")

 

JSON格式:

{"label":0,"sentence":"I wish Java could use case classes"}
{"label":1,"sentence":"Logistic regression models are neat"}
{"label":0,"sentence":"Hi I heard about Spark"}

 

2.由于我们需要处理的是term词条,所以先tokenizer

val tokenizer = new Tokenizer().setInputCol("sentence").setOutputCol("words")
val wordsData = tokenizer.transform(sentenceData)
 

3.接着求TF即词条的频率

val hashingTF = new HashingTF()
  .setInputCol("words").setOutputCol("rawFeatures").setNumFeatures(20)
val featurizedData = hashingTF.transform(wordsData)

格式:

scala> featurizedData.select("rawFeatures").show
+--------------------+
|         rawFeatures|
+--------------------+
|(20,[5,6,9],[2.0,...|
|(20,[3,5,12,14,18...|
|(20,[5,12,14,18],...|
+--------------------+

格式2:
scala> res36.take(5).foreach(println)
[(20,[5,6,9],[2.0,1.0,2.0])]
[(20,[3,5,12,14,18],[2.0,2.0,1.0,1.0,1.0])]
[(20,[5,12,14,18],[1.0,2.0,1.0,1.0])]

4.获取iDF

val idf = new IDF().setInputCol("rawFeatures").setOutputCol("features")
val idfModel = idf.fit(featurizedData)
 
5.得到TF-iDF
 
val rescaledData = idfModel.transform(featurizedData)
rescaledData.select("features", "label").take(3).foreach(println)
 
scala>rescaledData.select("features", "label").take(3).foreach(println)
[(20,[5,6,9],[0.0,0.6931471805599453,1.3862943611198906]),0]
[(20,[3,5,12,14,18],[1.3862943611198906,0.0,0.28768207245178085,0.28768207245178085,0.28768207245178085]),0]
[(20,[5,12,14,18],[0.0,0.5753641449035617,0.28768207245178085,0.28768207245178085]),1]

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值