代码之家  ›  专栏  ›  技术社区  ›  iamabhaykmr

ValueError:qk和pk必须具有相同的形状-空间距离jensenshannon先生

  •  0
  • iamabhaykmr  · 技术社区  · 6 年前

    我调用下面的jensen\u shannon(query,matrix)函数,在文档矩阵中查找文档查询的最相似文档

    def jensen_shannon(query, matrix):
    """
    This function implements a Jensen-Shannon similarity
    between the input query (an LDA topic distribution for a document)
    and the entire corpus of topic distributions.
    It returns an array of length M where M is the number of documents in the corpus
    """
    # lets keep with the p,q notation above
    p = query[None,:].T # take transpose
    q = matrix.T # transpose matrix
    m = 0.5*(p + q)
    return np.sqrt(0.5*(entropy(p,m) + entropy(q,m)))
    

    查询形状:(100,)

    矩阵的形状:(10804100)

    ValueError                                Traceback (most recent call last)
    <ipython-input-103-86cb68dd862d> in <module>
          1 # this is surprisingly fast
    ----> 2 most_sim_ids = get_most_similar_documents(new_doc_distribution,doc_topic_dist)
    
    <ipython-input-102-c0fb95224e87> in get_most_similar_documents(query, matrix, k)
          6     print(query.shape)
          7     print(matrix.shape)
    ----> 8     sims = jensen_shannon(query,matrix) # list of jensen shannon distances
          9     return sims.argsort()[:k] # the top k positional index of the smallest Jensen Shannon distances
    
    <ipython-input-74-6ffb0ec54e9a> in jensen_shannon(query, matrix)
         10     q = matrix.T # transpose matrix
         11     m = 0.5*(p + q)
    ---> 12     return np.sqrt(0.5*(entropy(p,m) + entropy(q,m)))
    
    ~/venv/lib/python3.6/site-packages/scipy/stats/_distn_infrastructure.py in entropy(pk, qk, base, axis)
       2668         qk = asarray(qk)
       2669         if qk.shape != pk.shape:
    -> 2670             raise ValueError("qk and pk must have same shape.")
       2671         qk = 1.0*qk / np.sum(qk, axis=axis, keepdims=True)
       2672         vec = rel_entr(pk, qk)
    
    ValueError: qk and pk must have same shape.
    

    Add axis parameter for scipy.spatial.distance.jensenshannon 但它不接受函数中的轴参数。

    有人知道我错过了什么吗?非常感谢任何线索。谢谢。

    https://www.kaggle.com/ktattan/lda-and-document-similarity/data

    0 回复  |  直到 6 年前
        1
  •  1
  •   user14810162    5 年前

    试试这个:

    p = query[None,:].T + np.zeros([100, 10804])

    10804=文件数

        2
  •  0
  •   Allan    5 年前