首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >贝叶斯统计

贝叶斯统计
EN

Stack Overflow用户
提问于 2014-08-21 00:16:18
回答 1查看 748关注 0票数 1

我需要知道如何找到两个离散分布的贝叶斯概率。例如,分布如下:

代码语言:javascript
复制
hypo_A=[ 0.1,0.4,0.5,0.0,0.0,0.0]
hypo_B=[ 0.1,0.1,0.1,0.3,0.3,0.1]

两者的先验概率都是一样的

给出了贝叶斯公式p(x/H) = (p(H/x)*p(x))/(summation(p(H/x`)*p(x`)))

基本上,我需要知道如何在python中将这些不均匀分布相乘。

EN

回答 1

Stack Overflow用户

发布于 2015-06-30 18:23:46

我强烈推荐你去读一读Think Bayes的书。

这是我用python编写的一个简单的贝叶斯统计植入:

代码语言:javascript
复制
from collections import namedtuple
hypothesis=namedtuple('hypothesis',['likelihood','belief'])
class DiscreteBayes:
    def __init__(self):
        """initiates the hypothesis list"""
        self.hypo=dict()
    def normalize(self):
        """normalizes the sum of all beliefs to 1"""
        s=sum([float(h.belief) for h in self.hypo.values()])
        self.hypo=dict([(k,hypothesis(likelihood=h.likelihood,belief=h.belief/s)) for k,h in self.hypo.items()])
    def update(self,data):
        """updates beliefs based on new data"""
        if type(data)!=list:
            data=[data]
        for datum in data:
            self.hypo=dict([(k,hypothesis(likelihood=h.likelihood,belief=h.belief*h.likelihood(datum))) for k,h in self.hypo.items()])
        self.normalize()
    def predict(self,x):
        """predict new data based on previously seen"""
        return sum([float(h.belief)*float(h.likelihood(x)) for h in self.hypo.values()])

在您的案例中:

代码语言:javascript
复制
hypo_A = [ 0.1,0.4,0.5,0.0,0.0,0.0]
hypo_B = [ 0.1,0.1,0.1,0.3,0.3,0.1]
d = DiscreteBayes()
d.hypo['hypo_A'] = hypothesis(likelihood=hypo_A.get ,belief=1)
d.hypo['hypo_B'] = hypothesis(likelihood=hypo_B.get ,belief=1)
d.normalize()
x = 1
d.update(x) #updating beliefs after seeing x
d.predict(x) #the probability of seeing x in the future
print (d.hypo)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25411707

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档