#encoding: utf-8 ''' 案例 弹出硬币10次 参数 a(0< a <1)代表硬币正面朝上的概率,反面朝上的概率为 1-a。 求参数a的值 首先思考在已知最后结果的前提下,表达当前概率函数的表达式 [a]^y1*[1-a]^(1-yi)= Y, yi对应标签 Y代表当前的硬币的结果的概率,似然函数就是上述表达式累成的结果。 我们重复试验10次 。 ''' import matplotlib.pyplot as plt import random #以序列seq中值出现的概率来随机生成某个值 def rand_pick(seq, probabilities): x = random.uniform(0, 1) cumprob = 0.0 for item, item_pro in zip(seq, probabilities): cumprob += item_pro if x < cumprob: break return item value_list = [0, 1] probabilities = [0.5, 0.5] #设置初始的概率值 list_data = [] for i in range(0, 10): list_data.append(rand_pick(value_list, probabilities)) print(list_data) ''' a = 0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1 ''' a = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1] Y = [] for i in range(0, len(a)): y = 1 for j in range(0, len(list_data)): y *= (a[i] ** list_data[j]) * ((1-a[i]) ** (1 - list_data[j])) #我们的似然函数 累乘的结果,得到的还是概率 Y.append(y) print Y plt.plot(a, Y) plt.show() ''' 如图所示 当我们a=0.5 左右时候 可以得到似然函数的最大值, 也就是说当似然函数取极大值的时候我们可以得到a=0.5,a=0.5符合我们 刚开始设置的概率, 硬币朝上的概率是0.5 '''
代码解释似然函数
最新推荐文章于 2022-03-21 13:17:55 发布