Apache spark 如何";“正常化”;使用Spark CountVectorizer时的矢量值?

Apache spark 如何";“正常化”;使用Spark CountVectorizer时的矢量值?,apache-spark,countvectorizer,Apache Spark,Countvectorizer,CountVectorizer和CountVectorizerModel通常会创建一个稀疏的特征向量,如下所示: (10,[0,1,4,6,8],[2.0,1.0,1.0,1.0,1.0]) 这基本上表示词汇表的总大小为10,当前文档有5个唯一元素,在特征向量中,这5个唯一元素位于0、1、4、6和8。此外,其中一个元素显示两次,因此为2.0值 现在,我想“规范化”上述特征向量,使其看起来像这样 (10,[0,1,4,6,8],[0.3333,0.1667,0.1667,0.1667,0.166

CountVectorizer
CountVectorizerModel
通常会创建一个稀疏的特征向量,如下所示:

(10,[0,1,4,6,8],[2.0,1.0,1.0,1.0,1.0])
这基本上表示词汇表的总大小为10,当前文档有5个唯一元素,在特征向量中,这5个唯一元素位于0、1、4、6和8。此外,其中一个元素显示两次,因此为2.0值

现在,我想“规范化”上述特征向量,使其看起来像这样

(10,[0,1,4,6,8],[0.3333,0.1667,0.1667,0.1667,0.1667])
i、 每个值除以6,即所有元素的总数。例如,
0.3333=2.0/6

那么这里有没有一种有效的方法


谢谢

您可以使用
Normalizer

class pyspark.ml.feature.Normalizer(*args,**kwargs)

使用给定的p-范数规范化向量,使其具有单位范数

来自pyspark.ml.linalg导入SparseVector
从pyspark.ml.feature导入规范化器
df=spark.createDataFrame([
(SparseVector(10[0,1,4,6,8],[2.0,1.0,1.0,1.0,1.0]),)
],[“功能”])
规格化器(inputCol=“features”,outputCol=“features\u norm”,p=1)。转换(df)。显示(1,False)
# +--------------------------------------+---------------------------------------------------------------------------------------------------------------------+
#|特征|特征|标准|
# +--------------------------------------+---------------------------------------------------------------------------------------------------------------------+
# |(10,[0,1,4,6,8],[2.0,1.0,1.0,1.0,1.0])|(10,[0,1,4,6,8],[0.3333333333333333,0.16666666666666666,0.16666666666666666,0.16666666666666666,0.16666666666666666])|
# +--------------------------------------+---------------------------------------------------------------------------------------------------------------------+