首页 > 解决方案 > 在python中计算概率值的问题

问题描述

此代码是使用 python 的贝叶斯分类器应用程序的一部分。我正在尝试计算每个单词相对于每个类的概率。
word_prob这里的变量,将每个类的所有概率相乘(我们这里有 6 个类)。当我在循环中打印word_prob时,我在每次迭代中得到一个正确的小概率值。但是当我使用*=operator时,最终的概率值乘以2,这很奇怪!为什么会这样?有人可以帮忙吗?
提前致谢

for c in range(1,7):
  word_prob = 1
  for k,v in enumerate(training_data_matrix[0][:-1]):
      word_count = 0
      if v in filtered_words:
         for doc in training_data_matrix[1:]:
            if doc[-1] == str(c):
                word_count += int(doc[k])
         print(v,int(word_count)+1,len(filtered_words))
         word_prob *= ((int(word_count)+1)/len(filtered_words))
         print(word_prob)
  print(c, 'probability is',word_prob)

这是结果:

comp 3 114
0.02631578947368421
网络 1 114
0.00023084025854108953
ucsd 1 114
2.0249145486060484e-06
1 概率为 2.0249145486060484e-06

标签: pythonmathoperatorsprobabilitybayesian

解决方案


你得到概率 0.00000202491454860605。对你有意义吗。我可以看到每个结果之间的比率是 114。即 res1/res2 = 114, res2/resv3 = 114

尝试通过格式化打印语句 print("{:.20f}".format(word_prob))


推荐阅读