Spark大数据-特征抽取CountVectorizer

本文深入探讨了CountVectorizer在文档向量化中的应用,通过计数将文档转换为向量,实现词语频率的稀疏表示。文章详细介绍了如何设置词汇表的大小和最低文档频率,展示了如何使用Spark MLlib中的CountVectorizer进行特征抽取,并提供了实例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

特征抽取CountVectorizer

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

// 通过计数将文档转化为向量的,产生文档关于词语的稀疏表示
// CountVectorizer将根据语料库中的词频排序从高到低进行选择,词汇表的最大含量由vocabsize超参数来指定,超参数minDF,
// 则指定词汇表中的词语至少要在多少个不同文档中出现
import org.apache.spark.sql.SparkSession
val spark=SparkSession.builder().master("local").appName("CountVectorizerTest").getOrCreate()
// 开启RDD的隐式转换
import implicits._
import org.apache.spark.ml.feature.{CountVectorizer, CountVectorizerModel}
// 也可以使用parallelize来创建RDD
val df=spark.createDataFrame(Seq(
    (0, Array("a", "b", "c")),
    (1, Array("a", "b", "b", "c", "a"))
)).toDF("id","words")
df.show()

val cvModel: CountVectorizerModel=new CountVectorizer().
    setInputCol("words").
    setOutputCol("features").
    setVocabSize(3).//词汇表的大小
    setMinDF(2).//词汇表中的词至少在两个文档中出现过
    fit(df)
    
cvModel.vocabulary
[b, a, c]
cvModel.transform(df).show(false)
+---+---------------+-------------------------+
|id |words          |features                 |
+---+---------------+-------------------------+
|0  |[a, b, c]      |(3,[0,1,2],[1.0,1.0,1.0])|
|1  |[a, b, b, c, a]|(3,[0,1,2],[2.0,2.0,1.0])|
+---+---------------+-------------------------+
// CountVectorizerModel可以通过指定一个先验词汇表来直接生成,如以下例子,直接指定词汇表的成员是“a”,“b”,“c”三个词:
val cvm = new CountVectorizerModel(Array("a", "b", "c")).
    setInputCol("words").
    setOutputCol("features")

cvm.transform(df).select("features").show(false)
+-------------------------+
|features                 |
+-------------------------+
|(3,[0,1,2],[1.0,1.0,1.0])|
|(3,[0,1,2],[2.0,2.0,1.0])|
+-------------------------+
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值