加载中…
个人资料
hzsok13
hzsok13
  • 博客等级:
  • 博客积分:0
  • 博客访问:3,816
  • 关注人气:70
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

[转载]贝叶斯概率公式应用一——狼来了问题

(2019-01-17 10:31:52)
标签:

转载

分类: 教育
贝叶斯概率公式应用一——狼来了问题

问题描述:

狼来了问题:

合理假设:

(1)村民初始对小孩的信任度为0.8

(2)可信的小孩说谎的可能性为0.1

(3)不可信的小孩说谎的可能性为0.5

小孩说两次谎后,他的可信度变为0.138,求如果这个孩子要改邪归正,他需要多少次才能把信任度提高到80%

二、实验数据说明

1. 实验数据

  a.事件A表示“小孩说谎”,用事件A*表示“小孩不说谎”;

  b.事件B表示“小孩可信”,用事件A*表示“小孩不可信”;

事件

P(B)

PA/B

PA/B*

概率

0.138

0.1

0.5

事件

P(B*)

PA*/B

PA*/B*

概率

1-0.138

1-0.1

1-0.5

 

、解决方案:

使用语言:python

原理贝叶斯概率

思路:小孩不说谎后,使用贝叶斯概率公式,计算小孩每次真话后的可信度,记录小孩可信度首次超过0.8时的计算次数,即为结果。

步骤:

$1.设小孩当前的可信度P(B)为0.138,次数为0;

$2.使用贝叶斯概率公式

P(B/A*)=P(A*/B)*P(B)/(P(A*/B)*P(B)+P(A*/B*)*P(B*))

   求小孩不说谎后的可信度;次数加一,小孩当前的可信度为P(B)=P(B/A*);

$3.如果P(B)>=0.8,记录次数,结束;否则,执行$2.

四、结果如下:

(1)  1.1列出了小孩初始可信度为0.8时,小孩说谎5次,每次说谎后的可信度;   

说谎次数

1

2

3

4

5

可信度P(B)

0.4444

0.1379

0.0310

0.0064

0.0013

1.1

(2)  1.2表示小孩连续说谎2次后,可信度为0.138时,小孩连续不说谎十次,每次不说谎后的可信度;

说谎次数

1

2

3

4

5

可信度P(B)

0.2237

0.3415

0.4828

0.6294

0.7516

说谎次数

6

7

8

9

10

可信度P(B)

0.8448

0.9074

0.9464

0.9695

0.9828

1.2

(3)  1.1左图显示了小孩说谎后的可信度的变化情况,右图显示了连续不说谎10次的可信度的变化情况;x轴表示不说谎次数,y轴表示可信度。

   [转载]贝叶斯概率公式应用一——狼来了问题

1.1

结论:从表1.2可以看出,小孩改邪归正后,连续不说谎6次后的可信度可以达到0.8448,首次超过0.8。

python代码

 

import numpy as np;
import matplotlib.pyplot as plt;

def confidence_p_b_a(p_b,p_a_b,n):
#计算小孩说n次谎话,每次说谎后的可信度;
res=[];
i=1;
while i<=n:
p_a = np.multiply(p_b, p_a_b);
sum = np.sum(p_a);
p = p_a[0] / sum;
res.append(p)
#更新先验概率;
p_b=([p,1-p]);
i+=1;
return res;

def confidence_and_times(p_b,p_a1_b,n,pl):
#计算小孩说n次不说谎话,每次不说谎后的可信度;
res1=[];
i=1;
while i<=n:
p_a = np.multiply(p_b, p_a1_b);
sum = np.sum(p_a);
p = p_a[0] / sum;
#times记录最后一次可信度小于pl的不说谎的次数;
if p< pl:
times=i;
res1.append(p)
#更新先验概率;
p_b=([p,1-p]);
i+=1;
return res1,times;

p_b=([0.8,0.2]);
p_a_b=([0.1,0.5]);

ax1=plt.subplot(121);
res=confidence_p_b_a(p_b,p_a_b,10);
plt.plot(np.arange(1,len(res)+1,1),res,'*-g')
plt.xlabel(u'说谎次数',fontproperties='SimHei');
plt.ylabel(u'可信度',fontproperties='SimHei');
ax1.set_title(u'小孩说谎后的可信度',fontproperties='SimHei');
print(res)

p_b2=([0.138,1-0.138]);
p_a1_b2=([1-0.1,1-0.5]);
[res1,times]=confidence_and_times(p_b2,p_a1_b2,10,0.8);
print('小孩',times+1,'次不说谎后的可信度首次超过0.8,可信度为:',res1[times]);
print(res1)

ax2=plt.subplot(122);
plt.plot(np.arange(1,len(res1)+1,1),res1,'*-b');
plt.plot(times+1,res1[times],'or');
plt.annotate(u'小孩可信度高于0.8',xy=(times+1,res1[times]),xytext=(times+1-0.2,res1[times]-0.2),arrowprops=
dict(facecolor='red',shrink=0.1,width=1),fontproperties='SimHei');
plt.xlabel(u'不说谎次数',fontproperties='SimHei');
plt.ylabel(u'可信度',fontproperties='SimHei');
ax2.set_title(u'小孩不说谎后的可信度',fontproperties='SimHei');
#plt.legend(prop={'family':'SimHei','size':15})#显示中文;
plt.show();

0

  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有