【问题标题】:I'd like to know how to calculate the similarity(numerical accuracy) of the two numpy array types in Python我想知道如何在 Python 中计算两种 numpy 数组类型的相似度(数值精度)
【发布时间】:2019-07-20 17:28:38
【问题描述】:

我是一名刚开始使用 Python 进行深度学习的学生。

首先,我的母语不是英语,所以我可能不擅长使用翻译。

我在深度学习中使用时间序列数据创建了一个模型,可以预测未来某些情况的可能性。我们甚至使用图表完成了可视化。

但我不想通过图表将其可视化,而是想了解训练数据和测试数据之间的相似性,以及数字的准确性。

这两个数据格式如下:

In [51] : train_r
Out[51] : array([[0., 0., 0., ..., 0., 0., 0.],
   [0., 0., 0., ..., 0., 0., 0.],
   [0., 0., 0., ..., 0., 0., 0.],

注意:此数据由0和1组成。

In [52] : test_r
Out[52] : array([[0.        , 0.        , 0.        , ..., 0.03657577, 0.06709877,
    0.0569071 ],
   [0.        , 0.        , 0.        , ..., 0.04707848, 0.07826   ,
    0.0819832 ],
   [0.        , 0.        , 0.        , ..., 0.04467918, 0.07355513,
    0.08117414],

我用余弦相似度法确定这两类数据的准确性,但出现了错误。

from numpy import dot
from numpy.linalg import norm
cos_sim = dot(train_r, test_r)/(norm(train_r)*norm(test_r))

ValueError: shapes (100,24) and (100,24) not aligned: 24 (dim 1) != 100 (dim 0)

所以我在网上搜索了另一种方法,但没有帮助,因为大多数都是字符串分析。

我能弄清楚如何计算两个列表之间的相似度,并用数字来描述吗?

【问题讨论】:

  • 仅供参考,您会收到错误消息,因为当您将numpy.dot() 与二维数组一起使用时,它会进行矩阵乘法。因此,如果您有两个形状为(100,24) 的矩阵,则该操作未定义,因为矩阵乘法仅在n==q 时为m x nq x r 矩阵定义。
  • 你可能想看看这个答案:stackoverflow.com/questions/52030945/…
  • 感谢您的 cmets。两个数组列表是多维的,一个由零组成,一个由零和一之间的小数点组成。毕竟,余弦相似度中出现错误似乎是这两个列表的维度问题。然后,我想知道如何解决这个维度问题,并计算两个列表之间的相似度,以显示深度学习的准确性。我想比较这两个列表,但我不知道该怎么做。

标签: python jupyter-notebook


【解决方案1】:

找到原因。

报错原因是train_r和test_r中一共存储了24个list。

我尝试一次计算24个列表,结果出错。

这是一个简单的解决方案。你可以在train_r和test_r中指定一个列表,用余弦相似度法计算。

train_c = train_r[:,12]
test_c = test_r[:,12]

from numpy import dot
from numpy.linalg import norm
a = train_c
b = test_c

cos_sim = (dot(a, b)/(norm(a)*norm(b))) * 100
print(cos_sim)

95.18094658851624

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-01
    • 2018-10-02
    • 1970-01-01
    • 1970-01-01
    • 2021-11-18
    • 1970-01-01
    • 2018-08-01
    • 1970-01-01
    相关资源
    最近更新 更多