下面是我的数据集:
我想迭代列来计算Jaccard similarity。顺便说一句,我对使用库来做这件事不感兴趣。
下面是我的代码:
def jaccard_binary(x,y):
"""A function for finding the similarity between two binary vectors"""
intersection = np.logical_and(x, y)
union = np.logical_or(x, y)
similarity = intersection.sum() / float(union.sum())
return similarity
for (columns) in df.items():
jb = jaccard_binary(i, j)
jac_sim = pd.DataFrame(jb, index=df.columns, columns=df.columns)
print(jac_sim)
但当然有些地方是错的,因为它显示了所有数据的相同值:
我做错了什么?我想这样做,因为我以后需要迭代列来执行其他公式,以计算其他事情。这就是为什么我需要迭代数据,但我不知道如何正确地做它。
下面也是我尝试过的,但它给“1”值的一切:
for i in range(0, len(df)):
for j in range(0,len(df.columns)):
jb = jaccard_binary(i, j)
jac_sim = pd.DataFrame(jb, index=df.columns, columns=df.columns)
print(jb)
谢谢!
2条答案
按热度按时间5n0oy7gb1#
在@J_H的回答的基础上,添加了一些代码来显示如何计算多行和多列的jaccard相似性
guz6ccqo2#
...迭代列以计算Jaccard相似性。
您希望使用相等运算符而不是逻辑AND。
示例数据:
在这个例子中,等式运算符给了我们一个五个布尔值的向量,然后我们把这些数字代入定义。
这是按照你的要求计算症状相似度的,很明显,如果有其他的要求,我们可以将病人的相似度与P1进行比较,取转置
df.T
,或者对行进行操作。