带有朴素贝叶斯的两个词典之间的相似性概率

时间:2018-10-15 11:45:34

标签: python machine-learning

我想比较两个字典中的“键”和“值”。

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”具有更多相似性? Dic2中列出的每个项目代表Dic1的概率是多少(%)?

我希望输出是这样的:

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

2 个答案:

答案 0 :(得分:0)

您可以执行以下操作以比较列表之间的值,并输出基于症状(y)的疾病(x)可能性。百分比值是根据可以满足的症状数量来计算的,尽管可以轻松添加,但没有考虑负面症状或遗漏症状-这只是让您滚球的起点

outMat = [re(eg) for eg in egV]

答案 1 :(得分:0)

对于这个问题,我不会使用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%