如何计算相似度矩阵的平均值和标准差?

3
我正在处理CSV文件,有一段代码可以计算文档之间的相似度。第一个帖子提供了代码以及数据和输出的详细信息:1
data.csv 文件内容如下:
idx         messages
112  I have a car and it is blue
114  I have a bike and it is red
115  I don't have any car
117  I don't have any bike

输出结果为:
    id     112    114    115    117
    id                             
    112  100.0   78.0   51.0   50.0
    114   78.0  100.0   47.0   54.0
    115   51.0   47.0  100.0   83.0
    117   50.0   54.0   83.0  100.0

现在我想计算相似矩阵的下三角均值和标准差(因为上下两个三角是相似的),不包括单位数据(100.0)。

我尝试使用Panda内置的平均值和标准差:

df_std = df.std()
df_Mean = df.mean()

但是这种方法考虑了输出中的所有数据,如身份和上三角。

我想知道是否有任何方法可以按照我提到的方式计算平均值和标准差。


你的预期输出是什么? - BENY
2个回答

2

使用numpy.tril,并将k=-1,将0变为np.nan

最初的回答

import numpy as np

ltri = np.tril(df.values, -1)
ltri = ltri[np.nonzero(ltri)]

输出:

array([[ 0.,  0.,  0.,  0.],
       [78.,  0.,  0.,  0.],
       [51., 47.,  0.,  0.],
       [50., 54., 83.,  0.]])

现在你可以执行 ltri.std(), ltri.mean():

最初的回答:

ltri.std(), ltri.mean()
# (14.361406616345072, 60.5)

1
@ALollz 啊,忘了加非零值。让我更新一下 ;) - Chris
感谢您的评论和代码。我提前表示感谢。我还有一个问题。现在代码已经准备好了一个CSV文件,并在每个idx之间执行相似性。我如何在两个不同的文档之间执行相同的相似性? - Bilgin
@Bilgin 更新了有关零的信息。针对您评论中的问题,我建议您要么编辑当前问题,要么发布另一个问题(推荐),并提供一些示例 :) - Chris

1
你可以使用 np.nan 来将所有不需要的值掩码。
df.values[np.triu_indices_from(df.values,0)]=np.nan
df.mean()
112    59.666667
114    50.500000
115    83.000000
117          NaN
dtype: float64
df.std()
112    15.885003
114     4.949747
115          NaN
117          NaN
dtype: float64

掩码值后

df
      112   114   115  117
112   NaN   NaN   NaN  NaN
114  78.0   NaN   NaN  NaN
115  51.0  47.0   NaN  NaN
117  50.0  54.0  83.0  NaN

感谢您的评论。如何计算三角形的整个上部或下部平均值?是这样吗:df.mean(df.mean()) - Bilgin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接