【问题标题】:how to "normalize" vectors values when using Spark CountVectorizer?使用 Spark CountVectorizer 时如何“标准化”向量值?
【发布时间】:2018-02-10 05:06:41
【问题描述】:

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

(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])

即,每个值除以 6,即所有元素的总数。例如,0.3333 = 2.0/6

那么这里有没有办法有效地做到这一点?

谢谢!

【问题讨论】:

    标签: apache-spark countvectorizer


    【解决方案1】:

    你可以使用Normalizer

    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])|
    # +--------------------------------------+---------------------------------------------------------------------------------------------------------------------+
    

    【讨论】:

      猜你喜欢
      • 2015-12-24
      • 2018-09-19
      • 2021-06-19
      • 1970-01-01
      • 2013-08-16
      • 1970-01-01
      • 1970-01-01
      • 2017-05-29
      • 2021-05-13
      相关资源
      最近更新 更多