我有一个数据框,其中行表示对象,列表示对象特征。
我正在尝试计算对象的余弦相似度,当我运行代码时,它似乎工作得很好,但是当我对距离进行排序时,衣柜对象的距离都是0,只有当它们的向量相同时才有可能,但事实并非如此。
我查看了数据输出,似乎任何精度超过E-16的数字都会变成0(它在终端打印输出和csv文件输出中都显示为0)
这些列是float64格式的。
如何才能显示更高的精确度?
下面是我正在运行的代码以供参考:
import pandas as pd
from scipy.spatial.distance import pdist
from scipy.spatial.distance import squareform
dfe = pd.read_csv('file.csv')
dfe = dfe.set_index('object')
dfe = dfe.fillna(dfe.mean())
pairwise = pd.DataFrame(squareform(pdist(dfe, metric='cosine')),columns = dfe.index,index = dfe.index)
long_form = pairwise.unstack()
long_form.index.rename(['object_1', 'object_2'], inplace=True)
long_form = long_form.to_frame('distance').reset_index()发布于 2021-07-28 07:43:43
如果您的意思是,当您尝试获取两个元素之间的差值时得到0,而当元素差值小于1e-16时得到0,这就是float64精度限制。有关示例print(1+1e-16),请参阅。有关这方面的信息可以通过numpy.finfo(numpy.float)获得。
您应该尝试使用更高精度的数据类型。例如:
dfe = pd.read_csv('file.csv').astype(numpy.float128)如果squareform的结果仍然是float64 dtype,那么您应该将您的scipy库update到更高的版本。
https://stackoverflow.com/questions/68536283
复制相似问题