继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Spark MLlib机器学习开发指南(6)--特征提取--CountVectorizer

慕侠2389804
关注TA
已关注
手记 273
粉丝 55
获赞 156

Spark MLlib机器学习开发指南(6)--特征提取,转换,选择--CountVectorizer

翻译自CountVectorizer,基于最新2.2.0版本翻译,转载注明出处 xcrossed 机器学习

CountVectorizer

CountVectorizer和CountVectorizerModel的目标是帮助将一个文档集合转换成一个包含token计数的向量当没有预先的字典可用时。CountVectorizer可用作估计器来提取词汇表,生成CountVectorizerModel。该模型为文档中的文档生成稀疏的词汇表示形式,然后将这些文档传递给LDA等其他算法。

在拟合过程中,CountVectorizer将在语料库中选择由词频排序最高的词汇。一个可选的参数minDF也通过指定一个词汇必须出现在词汇表中的最小值(或小于1.0)来影响拟合过程。另一个可选的二进制切换参数控制输出向量。如果设置为真,所有非零计数都设置为1。这对于离散的概率模型来说尤其有用,模型是二进制的,而不是整数的。

Examples
假定我们有一个列名为id和texts的DataFrame

 id | texts
----|---------- 0  | Array("a", "b", "c") 1  | Array("a", "b", "b", "c", "a")

每行在texts列中表示的是一个Array[String]类型的文档,调用CountVectorizer的fit()方法能产生一个包含词汇表(a, b, c)的CountVectorizerModel.转换后包含一个vector的输出列

 id | texts                           | vector
----|---------------------------------|--------------- 0  | Array("a", "b", "c")            | (3,[0,1,2],[1.0,1.0,1.0]) 1  | Array("a", "b", "b", "c", "a")  | (3,[0,1,2],[2.0,2.0,1.0])

每个向量表示该文档在词汇表上的出现计数。

详细API参考CountVectorizer Scala docsCountVectorizerModel Scala docs

import org.apache.spark.ml.feature.{CountVectorizer, CountVectorizerModel}

val df = spark.createDataFrame(Seq(
  (0, Array("a", "b", "c")),
  (1, Array("a", "b", "b", "c", "a"))
)).toDF("id", "words")// fit a CountVectorizerModel from the corpusval cvModel: CountVectorizerModel = new CountVectorizer()
  .setInputCol("words")
  .setOutputCol("features")
  .setVocabSize(3)
  .setMinDF(2)
  .fit(df)// alternatively, define CountVectorizerModel with a-priori vocabularyval cvm = new CountVectorizerModel(Array("a", "b", "c"))
  .setInputCol("words")
  .setOutputCol("features")

cvModel.transform(df).show(false)

完整示例代码在spark代码仓库"examples/src/main/scala/org/apache/spark/examples/ml/CountVectorizerExample.scala"



作者:xcrossed
链接:https://www.jianshu.com/p/bbf4d3811222


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP