You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Spark CountVectorizer中对向量值进行归一化处理?

对CountVectorizer生成的稀疏特征向量做归一化处理

嘿,我来给你捋清楚这个归一化的处理逻辑哈!

首先先明确你提到的原始稀疏向量状态:

词汇表总大小为10,当前文档包含5个唯一元素,这些元素在特征向量中的位置为0、1、4、6和8。其中一个元素出现两次,对应值为2.0,所有元素的总数量是6(也就是1+1+1+1+2=6)

归一化的核心逻辑

你说的“归一化”其实就是L1归一化(也就是词频TF的计算方式):把向量里的每个非零值都除以所有元素的总数量6,这样每个值就代表该词汇在当前文档中的占比,所有归一化后的值加起来总和为1。

具体转换示例

拿你描述的向量来说:

  • 原本位置0、1、4、6上的值是1.0,归一化后就变成 1/6 ≈ 0.1667
  • 那个出现两次的元素(比如位置8)原本值是2.0,归一化后变成 2/6 ≈ 0.3333
  • 词汇表中其他位置(2、3、5、7、9)原本值是0,归一化后依然是0

最终得到的归一化稀疏向量,非零元素就是这几个占比值,整体保持稀疏结构(只存储非零位置和对应值)。

实际代码实现(以Spark为例)

因为CountVectorizerModel是Spark ML里的组件,这里给你个Python代码示例,用Spark的Normalizer类快速实现这个归一化:

from pyspark.ml.feature import CountVectorizerModel, Normalizer

# 假设你已经训练好CountVectorizerModel,并且得到了包含原始特征的DataFrame(列名raw_features)
normalizer = Normalizer(inputCol="raw_features", outputCol="normalized_features", p=1.0)
# 执行归一化转换
normalized_data = normalizer.transform(your_raw_data)

这里设置p=1.0就是指定用L1归一化,正好符合我们“每个值除以总数量”的需求,处理后normalized_features列就是你要的归一化稀疏向量啦。

内容的提问来源于stack exchange,提问作者lee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:14:02