gpt4 book ai didi

python - 如何在 pyspark 中的 TF-IDF Dataframe 上应用 SVD

转载 作者:行者123 更新时间:2023-12-01 02:35:19 28 4
gpt4 key购买 nike

我已经应用了 pyspark tf-idf 函数并得到以下结果。

| features |
|----------|
| (35,[7,9,11,12,19,26,33],[1.2039728043259361,1.2039728043259361,1.2039728043259361,1.6094379124341003,1.6094379124341003,1.6094379124341003,1.6094379124341003]) |
| (35,[0,2,4,5,6,11,22],[0.9162907318741551,0.9162907318741551,1.2039728043259361,1.2039728043259361,1.2039728043259361,1.2039728043259361,1.6094379124341003]) |

因此,数据框具有 1 列(特征),其中包含 SparseVectors 作为行。

现在我想从这个数据帧构建 IndexRowMatrix,以便我可以运行此处描述的 svd 函数 https://spark.apache.org/docs/latest/api/python/pyspark.mllib.html?highlight=svd#pyspark.mllib.linalg.distributed.IndexedRowMatrix.computeSVD

我尝试了以下方法,但没有成功:

mat = RowMatrix(tfidfData.rdd.map(lambda x: x.features))

TypeError: Cannot convert type <class 'pyspark.ml.linalg.SparseVector'> into Vector

我使用了 RowMatrix,因为要构造它,我不必提供元组,但我什至无法构建 RowMatrix。 IndexedRowMatrix 对我来说会更困难。

那么如何在 pyspark 中的 tf-idf 数据帧输出上运行 IndexedRowMatrix ?

最佳答案

我能解决这个问题。因此,由于错误表明 RowMatrix 不接受 pyspark.ml.linalg.SparseVector 向量,因此我将此向量转换为 pyspark.mllib.linalg 留意 mlmllib。现在以下是将 TF-IDF 输出转换为 RowMatrix 的代码片段,并对其应用computeSVD 方法。

from pyspark.mllib.linalg import Vectors
mat = RowMatrix(df.rdd.map(lambda v: Vectors.dense(v.rawFeatures.toArray()) ))

我已转换为密集矩阵,但您可以编写一些额外的代码行将 ml.linalg.SparseVector 转换为 mllib.linalg.SparseVector

关于python - 如何在 pyspark 中的 TF-IDF Dataframe 上应用 SVD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46313863/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com