【问题标题】:How to calculate the cosine similarity of two vectors in PySpark?PySpark中如何计算两个向量的余弦相似度?
【发布时间】:2017-10-15 03:34:15
【问题描述】:

我即将在 PySpark 中计算两个向量的余弦相似度,比如

1 - spatial.distance.cosine(xvec, yvec)

但 scipy 似乎不支持 pyspark.ml.linalg.Vector 类型。

【问题讨论】:

    标签: pyspark apache-spark-mllib


    【解决方案1】:

    您可以使用dotnorm 方法轻松计算:

    from pyspark.ml.linalg import Vectors
    x = Vectors.dense([1,2,3])
    y = Vectors.dense([2,3,5])
    
    1 - x.dot(y)/(x.norm(2)*y.norm(2))
    # 0.0028235350472619603
    

    使用 scipy

    from scipy.spatial.distance import cosine
    ​
    x = np.array([1,2,3])
    y = np.array([2,3,5])
    
    cosine(x, y)
    # 0.0028235350472619603
    

    【讨论】:

    • @Psidom 为什么我不能将它应用于整个向量类型的列?像df_new = df_with_vectors.select("vector1", "vector2", "vector1.dot(vector2)/(vector1.norm(2)*vector2.norm(2)) as norm_src") 这样的东西会给出need struct type but got vector 的错误。
    猜你喜欢
    • 2010-10-05
    • 2016-07-11
    • 2017-09-07
    • 2016-03-06
    • 2016-03-08
    • 2019-12-27
    • 2021-07-19
    • 2014-03-25
    • 2015-05-24
    相关资源
    最近更新 更多