CountVectorizer 和 CountVectorizerModel 通常会创建如下所示的稀疏特征向量:
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 .
0.3333 = 2.0/6
那么,有没有办法有效地做到这一点?
谢谢
您可以使用 Normalizer
Normalizer
class pyspark.ml.feature.Normalizer(*args, **kwargs) 使用给定的p-范数规范化向量,使其具有单位范数。
class pyspark.ml.feature.Normalizer(*args, **kwargs)
使用给定的p-范数规范化向量,使其具有单位范数。
具有 1-norm
from pyspark.ml.linalg import SparseVector from pyspark.ml.feature import Normalizer df = spark.createDataFrame([ (SparseVector(10,[0,1,4,6,8],[2.0,1.0,1.0,1.0,1.0]), ) ], ["features"]) Normalizer(inputCol="features", outputCol="features_norm", p=1).transform(df).show(1, False) # +--------------------------------------+---------------------------------------------------------------------------------------------------------------------+ # |features |features_norm | # +--------------------------------------+---------------------------------------------------------------------------------------------------------------------+ # |(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])| # +--------------------------------------+---------------------------------------------------------------------------------------------------------------------+