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 corpus
val cvModel: CountVectorizerModel = new CountVectorizer()
.setInputCol("words")
.setOutputCol("features")
.setVocabSize(3)
.setMinDF(2)
.fit(df)
// alternatively, define CountVectorizerModel with a-priori vocabulary
val 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"