两个字典间相似性的概率及其朴素贝叶斯算法

2024-05-19 07:21:29 发布

您现在位置:Python中文网/ 问答频道 /正文

有两个字典,我想比较'键'和'值'。你知道吗

Dic1 = {    
    'FOSF SER': 0,
    'ECA': 1,
    'GL': 1,
    'GL H2': 1,
    'GL JEJ': 0
}

Dic2 = {
    'Diabetes': {'GL' : 1, 'GL JEJ': 1, 'HBA GLC': 1, 'GL 2H': 1},
    'Hipotireioidismo': {'FOSF SER': 1, 'ECA': 1, 'TSH 21-54': 1, 'TSH 55-87': 1},
    'Hipertireioidismo': {'FOSF SER': 0, 'TSH 21-54': 0, 'TSH 55-87': 0}
}

换句话说,我希望Python做出以下预测:

在字典“Dic2”中,哪一项与字典“Dic1”更相似?Dic1所指Dic2中所列各项的概率(%)是多少?你知道吗

我希望输出是这样的:

"Diabetes: x.xx%"
"Hipotireoidismo: x.xx%"
"Hipertireoidismo: x.xx%"

Tags: 字典h2serdiabetesglecahbadic2
2条回答

您可以执行以下操作来比较列表之间的值,并根据症状(y)输出疾病的可能性(x)。百分比值是根据满足的症状数量来计算的,不考虑阴性症状或遗漏的症状,尽管这些症状可以很容易地加进去——它只是你开始行动的一个起点

for x in Dic2:
count = 0
Dic3 = Dic2[x]
for y in Dic3:
    if(y in Dic1):
        if(Dic3[y] == Dic1[y]):
            count += 1
percentage = (count/float(len(Dic3)))*100
print(x + " : " + str(percentage) +"%")

对于这个问题我不会用SkLearn。再加上一个简单的嵌套循环,就有可能解决它。你知道吗

假设您只想找到条目数最多的字典,它等于您的查询字典(Dic1)除以查询中的条目数(相似度),我能想到的最简单的答案是:

nDic1 = len(Dic1)*1.
for item in Dic2:
   match = 0
   iDic = Dic2[item]
   for i in iDic:
      if i in Dic1:
         if iDic[i] == Dic1[i]:
            match +=1
   print("{}: {}%".format(item, match*100/nDic1))

这种情况下的打印结果是:

Diabetes: 20.0%
Hipotireioidismo: 20.0%
Hipertireioidismo: 20.0%

相关问题 更多 >

    热门问题