首页 > 解决方案 > 我想知道如何在 Python 中计算两种 numpy 数组类型的相似度(数值精度)

问题描述

我是一名刚开始使用 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)

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

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

标签: pythonjupyter-notebook

解决方案


找到了原因。

错误的原因是train_r和test_r中总共存储了24个列表。

我试图一次计算 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

推荐阅读