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 docs和CountVectorizerModel 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