apache-spark - 使用 Spark CountVectorizer 时如何获取 "normalize"向量值?

标签 apache-spark countvectorizer

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

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

谢谢!

最佳答案

你可以使用Normalizer

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

Normalize a vector to have unit norm using the given p-norm.

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

关于apache-spark - 使用 Spark CountVectorizer 时如何获取 "normalize"向量值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48713954/

相关文章:

hadoop - Spark 应用程序卡在 ACCEPTED 状态

apache-spark - Spark 并发写入相同的 HDFS 位置

scala - 如何在 Spark-Scala 中创建具有已定义架构的行?

machine-learning - CountVectorizer 如何处理测试数据中的新词?

python - CountVectorizer() 不适用于单字母单词

scala - Spark流: Broadcast variables, java.lang.ClassCastException

apache-spark - 来自 .. 错误有效负载 : '400' t active 的无效状态代码 "requirement failed: Session isn'

python - CountVectorizer 在短词上引发错误

python - 迭代 pandas Dataframe/Series 的特定列

python - 在 ML 分类器中编码文本