【问题标题】:Calculate Similarity using User's Personal Data?使用用户的个人数据计算相似度?
【发布时间】:2020-01-10 11:50:39
【问题描述】:

我想使用他们的个人/组织数据(例如部门、公司、站点等)找出哪些用户彼此相似。

我有这个布尔格式的数据,如下图:

       Dep1 Dep2 Comp1 Comp2 Site1 Site2
    U1  0    1     0     1     0     1
    U2  1    0     0     1     1     0
    U3  1    0     1     0     1     0
    U4  0    1     0     1     0     1
    U5  0    1     0     1     1     0
    U6  1    0     1     0     0     1

我想选择一个用户并识别与他们相似的其他用户,以便我可以向他们推荐那些相似用户正在使用的软件/硬件。

我研究了余弦和 Jaccard 相似度,但在布尔数据上计算它们时没有看到太多帮助。

我正在使用 Python,对这门语言并不陌生,但我对数据分析和机器学习还很陌生。任何建议表示赞赏!

【问题讨论】:

  • 您可以只计算相等的列数。所以 U1 和 U2 之间的相似度分数只有 1,U2 和 U3 之间的相似度分数是 2 等等。
  • 如果您想根据文本查找相似性,Word2Vec 可能会帮助您。 Word Embedding的应用:>>情感分析>>语音识别>>信息检索>>问答
  • @DaanKlijn 我想这可能是一个很好的解决方案。我有一个包含 3000 多列和 61k 行的数据框,因此它可能是一个相当密集的算法。你对如何去做有什么建议吗?

标签: python machine-learning data-science similarity cosine-similarity


【解决方案1】:

好吧,正如您已经提到的那样,计算 60k 不同用户之间的相似度将非常密集。这将产生一个 60k*60k 行的相似矩阵,我怀疑它是否适合您的系统内存。如果可能的话,我会尝试按部门或站点(如果有意义的话)对您的用户进行分组。然后仅将用户与其组内的用户进行比较,这样您就不必将所有 60k 与其他 60k 进行比较。

为了保持计算速度相当快,我会使用 numpy 进行矩阵乘法来执行相似度计算。您可以使用以下矩阵乘法简单地计算等于 1 的数量:

import numpy as np

df = np.random.randint(low = 2,size=(5000,3000))
similarities = df.dot(df.T)

这会在 60 秒内在我的笔记本电脑上完成。结果将是一个 5000 * 5000 矩阵,其中包含 df 的所有 5000 行之间的相似性。

【讨论】:

    【解决方案2】:

    制作推荐系统的方法有很多。由于您明确要求余弦相似度,

    import pandas as pd
    
    df = pd.read_csv('tmp.txt')
    
    # calculate the cosine similarity - there are many other metrices
    from sklearn.metrics.pairwise import cosine_similarity
    res = cosine_similarity(df)
    
    # to visualize the similarity matrix as a heatmap
    import plotly.graph_objects as go
    
    fig = go.Figure(data=go.Heatmap(
        z=[list(item) for item in res],
        x = df.index.values,
        y = df.index.values))
    fig.show()
    

    【讨论】:

      猜你喜欢
      • 2012-09-01
      • 1970-01-01
      • 2021-05-29
      • 1970-01-01
      • 2011-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-28
      相关资源
      最近更新 更多