【问题标题】:Problem with calculating probability values in python在python中计算概率值的问题
【发布时间】:2021-04-11 00:03:17
【问题描述】:

此代码是使用 python 的贝叶斯分类器应用程序的一部分。我正在尝试计算每个单词相对于每个类的概率。
word_prob 变量在这里,乘以每个类的所有概率(我们这里有 6 个类)。当我在循环中打印word_prob 时,我在每次迭代中得到一个正确的小概率值。但是当我使用*= 运算符时,最终的概率值乘以 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)

结果如下:

补偿 3 114
0.02631578947368421
网络 1 114
0.00023084025854108953
加州大学圣地亚哥分校 1 114
2.0249145486060484e-06
1个概率是2.0249145486060484e-06

【问题讨论】:

    标签: python math operators probability bayesian


    【解决方案1】:

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

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

    【讨论】:

    • 好的,谢谢。我会在打印时格式化它们。但 114 是字数。事实上,概率是这样计算的:3/114 - 1/114 - 1/114。这三个概率相乘得到 2.0249145 !!为什么?!!
    • 您缺少指数符号。它的 2.0249145486060484e-06 或 0.00000202491454860605 不是 2.0249145
    • 好吧,我问为什么是 2.0249145486060484e-06 ??将 3/114 和 1/114 和 1/114 相乘不会得到 2.0249145486060484e-06。!!
    • (3/114) * (1/114) * (1/114) == 2.0249145486060484e-06
    • :) 执行我。我没有注意到减号。非常感谢
    猜你喜欢
    • 1970-01-01
    • 2020-04-22
    • 2016-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-02
    相关资源
    最近更新 更多