【程序员眼中的统计学(6.2)】原创实现二项分布算法以及应用

 二项分布算法

1 算法的基本描述,包括:定义、符号解释、具体的计算方法。

1.1 算法描述

在进行一系列相互独立实验,每次既有成功,又有失败的可能,且单次实验成功概率相等。在一系列试验中求成功的次数。这种情况下适用于本算法。

本算法中在n次伯努利试验中:试验n次得到r次成功的概率、二项分布的期望、二项分布方差的具体实现。

1.2 定义

在相互独立事件中,每道题答对概率为p,答错概率为q。在n个问题中答对r个问题的概率为:  这类问题称之为二项分布。表达式为:X~B(n,p)

1.3 符号解释

n:表示总试验次数

X:表示n次独立试验获取成功的次数
p:表示独立试验成功的概率
q:表示独立试验失败的概率

1.4 计算方法

假设成功概率为p,失败概率为q,n次伯努利试验中,试验次数为r的前提下满足:

1、第r次试验第一次成功:    

2、期望:

3、方差: 

回到顶部

2 算法的应用场景。

具体地,以书中或研究中的实际场景为例,描述算法的使用方法,包括:在该场景下算法的定义、算法中包含的符号的具体含义解释,以及具体的计算方法。

2.1 该场景下算法描述

案例描述:一次竞猜游戏中共有5个问题,每一题答对的概率为0.25,假设每一次答题都是独立事件。

2.2 该场景下算法定义

案例定义:答题者单次独立成功概率为0.25,失败概率为0.75,知道总共5道题目,即可求出相关答对次数。

2.3 该场景下算法中符号解释

n:表示总试验次数,n=5。

X:表示n次独立试验获取成功的次数,X=r(第r次)。
p:表示独立试验成功的概率,p=0.25。
q:表示独立试验失败的概率, q=1-p=0.75。

2.4 该场景下算法计算方法

案例计算:假设成功概率为p=0.25,失败概率为q=1-p,n次伯努利试验中,总共5道题目的前提下满足:

1、答对两道题的概率:  

2、一题答不对的概率:   

4、期望:   

5、方差: 

回到顶部

3  算法的优点和缺点的描述

算法适用的场景及不适用的场景的描述,算法适用的数据类型描述。

3.1 本算法优点

优点:在试验次数一定,求成功次数时,几何分布显示不适合的情况下,给予这类问题二项分布能更好的解决。

3.2 本算法缺点

缺点:但是面对试验次数不固定,发生事件概率的情况下,显然几何分布与二项分布都不能解决,这里也体现出泊松分布的优势。

3.3 本算法适应场景

n次试验在相同条件下进行,各个观察单位的结果独立,且只能具有相互对立的一种结果,目的:第N次试验中成功多少次。

3.4 本算法不适应场景

在非独立试验情况,或者独立试验情况下获取第一次成功的概率,不适用二项分布。

3.5 本算法适用的数据类型

本算法适用于double数据类型,默认保留两位小数,可以自行设定保留位数。

回到顶部

4 算法的输入数据、中间结果以及输出结果的图形化展示方法。

4.1 本算法输入数据

  * @param   n   int,表示总的独立事件

  * @param   r   int,表示发生r次 

  * @param   p   double,表示成功的概率

4.2 本算法中间结果

方法RSucess中:

 * @param   q    double,表示失败的概率即1-p

 * @param   ncr  double,表示成功的组合次数

4.3 本算法输出结果

@return PX double型保留两位小数,需要n次试验r成功的概率

@return EX double型保留两位小数,二项分布的期望

@return VX double型保留两位小数,二项分布的方差

4.4 本算法图形化展示

    

回到顶部

5 可能导致算法计算产生异常的状态描述

可行的解决方法。该部分内容一方面描述在具体的计算过程中可能导致计算结果错误或产生误差的情况,另一方面描述在程序中,什么情况下会导致何种类型的异常。

5.1 本算法可能异常或误差

异常1:输入数据不合法,如:要求输入double数据,输入字母。

异常2:输入数据特别大,超越计算能力

误差1:计算组合结果数据保留位数,截取字符,存在一定细微误差

误差2:保留小数位数造成不精确

5.2 本算法异常或误差处理

异常1:解决,输入不合法给予提示。

异常2:解决,进行异常捕获

误差1:解决,尽量中间计算过程不保留小数位,减小误差影响

误差2:解决,进行小数点位数自定义保留封装,根据具体精度进行设置。

回到顶部

6 算法的代码参考。

该点只需给出对应的类和方法的基本描述,即给出类名,并列出具体调用的方法。

6.1 类和方法基本描述

类源码:见源程序:Distributes. src. DistTools. BinoDist

本算法中在n次伯努利试验中:试验n次r次成功的概率、二项分布的期望、二项分布方差的具体实现。

6.2 类和方法调用接口

见源程序:Distributes. src. DistTools. BinoDist

BinoDist.java 下包含如下方法:

RSuccess(int n,int r,double p,double q)  //试验n次独立试验,r次成功的概率

Expectation(int n,double p)               //二项分布的期望

Variance(int n,double p,double q)          //二项分布方差

调用封装方法:

NumFormat.java  下如下方法:

DecFormat(int n,double num)         //对num数值保留位数n的自行设置

factorial(int num)                   //对num数值求阶乘

回到顶部

7 二项分布类代码实现以及相关详细注释

类的注释如下:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

<span style="color: #000000;">package DistTools;

 

 

/**

 *

 * @(#)GeoDist.java

 * @Description:描述:本算法中在n次伯努利试验中:试验n次得到r次成功的概率、二项分布的期望、二项分布方差的具体实现。

 * @Definitions:定义:在相互独立事件中,每道题答对概率为p,答错概率为q。在n个问题中答对r个问题的概率为:P(X=r)=C_n_r*P^r*q^(n-r)这类问题称之为二项分布。表达式为:X~B(n,p)            

 * @Explanation:符号解释:n:表示总试验次数;X:表示n次独立试验获取成功的次数;p:表示独立试验成功的概率;q:表示独立试验失败的概率

 * @Comments:条件:在进行一系列相互独立实验,每次既有成功,又有失败的可能,且单次实验成功概率相等。在一系列试验中求成功的次数。这种情况下适用于本算法。

 * @优点:在试验次数一定,求成功次数时,几何分布显示不适合的情况下,给予这类问题二项分布能更好的解决

 * @缺点:但是面对试验次数不固定,发生事件概率的情况下,显然几何分布与二项分布都不能解决,这里也体现出泊松分布的优势。

 * @适用场景:n次试验在相同条件下进行,各个观察单位的结果独立,且只能具有相互对立的一种结果,目的:第N次试验中成功多少次。

 * @不适用场景:在非独立试验情况,或者独立试验情况下获取第一次成功的概率,不适用二项分布。

 * @输入/出参数:见具体方法

 * @异常/误差:

 *          异常1:输入数据不合法,如:要求输入double数据,输入字母。

 *          异常2:输入数据特别大,超越计算能力

 *          误差1:计算组合结果数据保留位数,截取字符,存在一定细微误差

 *          误差2:保留小数位数造成不精确

 *       解决:

 *          异常1:输入不合法给予提示。

 *          异常2:进行异常捕获

 *          误差1:尽量中间计算过程不保留小数位,减小误差影响。

 *          误差2:进行小数点位数自定义保留封装,根据具体精度进行设置。

 * @Create Date:  2015年8月3日20:29:13

 * @since   JDK1.6  s

 * @author Bai ningchao

 */

</span>

方法一:第一次成功概率的方法注释以及实现

注释:

 /**
  * 在n次伯努利试验中,在n次独立的伯努利试验发生r次的概率为 
  * P(X=r)=C_n_r*p^{r}*q^{n-r}且C_n_r=n!/(r!*(n-r)!)
  * @param n int,表示总的独立事件
  * @param r int,表示发生r次
  * @param p double型保留一位小数,表示成功的概率
  * @return PX double型保留两位小数,5道题目答对两道题的概率
  */

 代码:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

<br><span style="color: #000000;">        public static double RSucess(int n,int r,double p)

    {

        double PX=0;

        double q=1-p;  //表示失败的概率即1-p

        try

        {

            //根据C_n_r=n!/r!*(n-r)!求n个事件中r次的组合

            double ncr=NumFormat.factorial(n)/(NumFormat.factorial(r)*NumFormat.factorial(n-r));

            PX=ncr*(Math.pow(p, r))*(Math.pow(q, (double)(n-r)));//根据公式P(X=r)=C_n_r*p^{r}*q^{n-r}求解二项分布的概率

            PX=NumFormat.DecFormat(4,PX); 

            System.out.println(">> 5道题目答对两道题的概率:" + PX);

        }

        catch(Exception e)

        {

            System.out.println(">> 错误信息描述:"+e.getMessage());

        }

        return PX;

    }

</span>

 

方法二:二项分布的期望方法注释以及实现

注释:

 /**
  * 在n次伯努利试验中,二项分布的期望公式:E(X)=np 
  * @param n int型,表示试验的次数
  * @param p double型保留一位小数,表示成功的概率
  * @return EX double型保留两位小数,二项分布的期望
  */

代码:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

<span style="color: #000000;">  public static double Expectation(int n,double p)

    {

        double EX=0;

        try

        {

            EX= Double.valueOf(n)*p;//根据二项分布的期望公式E(X)=np 求期望

            EX=NumFormat.DecFormat(4,EX); 

            System.out.println(">> 二项分布期望:" + EX);

        }

        catch(Exception e)

        {

            System.out.println(">> 错误信息描述:"+e.getMessage());

        }

        return EX;

    }

</span>

 

方法三:二项分布的方差方法注释以及实现

注释:

 /**
  * 在n次伯努利试验中,二项分布的方差公式:Var(X)=npq
  * @param n int型,表示试验的次数
  * @param p double型保留一位小数,表示成功的概率
  * @param q double型保留一位小数,表示失败的概率即1-p
  * @return VX double型保留两位小数,二项分布的方差
  */

代码:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

<span style="color: #000000;">  public static double Variance(int n,double p)

    {

        double VX=0;

        double q=1-p;  //表示失败的概率即1-p

        try

        {

            VX= Double.valueOf(n)*p*q;//根据二项分布的方差公式Var(X)=npq 求方差

            VX=NumFormat.DecFormat(4,VX); 

            System.out.println(">> 二项分布的方差:" + VX);

        }

        catch(Exception e)

        {

            System.out.println(">> 错误信息描述:"+e.getMessage());

        }

        return VX;

    }

</span>

主函数: 


1

2

3

4

5

6

7

8

9

10

11

12

<span style="color: #000000;">  public static void main(String[] args) throws Exception {

         

          //PX是返回5道题目答对两道题的概率       0.2637     

          BinoDist.RSucess(5, 2, 0.25);   //参数1:总共题目个数n,参数2:答对题目个数r,参数3:独立事件成功的概率p

         

          //EX是二项分布的期望 1.25

          BinoDist.Expectation(5, 0.25);  //实参1:独立事件成功的概率p

          

          //VX是二项分布的方差  0.9375

          BinoDist.Variance(5, 0.25);   //实参1:独立事件成功的概率p

    }

</span>

 

时间: 2024-08-31 06:38:16

【程序员眼中的统计学(6.2)】原创实现二项分布算法以及应用的相关文章

【程序员眼中的统计学(12)】相关与回归:我的线条如何? (转)

阅读目录 目录 1 算法的基本描述 2 算法的应用场景. 3算法的优点和缺点 4 算法的输入数据.中间结果以及输出结果 5 算法的代码参考 6 共享 相关与回归:我的线条如何? 作者 白宁超 2015年10月25日22:16:07 摘要:程序员眼中的统计学系列是作者和团队共同学习笔记的整理.首先提到统计学,很多人认为是经济学或者数学的专利,与计算机并没有交集.诚然在传统学科中,其在以上学科发挥作用很大.然而随着科学技术的发展和机器智能的普及,统计学在机器智能中的作用越来越重要.本系列统计学的学习

【程序员眼中的统计学(6)】几何分布、二项分布及泊松分布:坚持离散

几何分布.二项分布及泊松分布:坚持离散 1 回顾题引 1 问题? 小明滑雪: 每次(独立事件)试滑成功的概率0.2,不成功的概率0.8.则 成功 失败 0.2 0.8 1.试滑两次成功的概率?2.试滑一次或两次猜中的概率?3.试滑10000次,首次成功的概率?4.试滑第10000次以上成功的概率? 2 概率树: 3 解答: 1.概率树求概率 设X最终试滑成功次数,则:P(X=1)=P(第1次试滑成功)=0.2 [注:试滑一次成功的概率]P(X=2)=P(第1次试滑失败AND第2试滑成功)=0.2

【程序员眼中的统计学(6.1)】原创实现几何分布算法以及应用

 几何分布算法 1 算法的基本描述,包括:定义.符号解释.具体的计算方法. 1.1 算法描述 在进行一系列相互独立实验,每次既有成功,又有失败的可能,且单次实验成功概率相等.为了取得第一次成功需要进行多少次实验.这种情况下适用于本算法. 本算法中在n次伯努利试验中:试验r次得到第一次成功的概率.试验r次以上才第一次成功的概率.试验r次或者不到r次才第一次成功.几何分布的期望.几何分布方差的具体实现. 1.2 定义 如果p代表成功概率,则1-p即q代表失败概率使用以下 公式叫做概率的几何分布. 1

【程序员眼中的统计学(7)】正态分布的运用:正态之美

正态分布的运用:正态之美 1正态分布描述 正态分布是最重要的一种概率分布.正态分布概念是由德国的数学家和天文学家Moivre(棣莫弗)于1733年受次提出的,但由于德国数学家Gauss(高斯)率先将其应用于天文学家研究,故正态分布又叫高斯分布.正态分布起源于误差分析,早期的天文学家通过长期对一些天体的观测收集到了大量数据,并利用这些数据天体运动的物理模型,其中第谷与开 普勒在建模中提出了一条原则-"模型选择的最终标准是其与观测数据的符合程度",这个"符合程度"实质上

【程序员眼中的统计学(4)】离散概率分布的运用:善用期望

离散概率分布的运用:善用期望  1 离散概率分布 1  定义 设离散型随机变量X所有可能得取值 Xi (i=1,2,3--.n),且事件{X=xi }的概率为P{X=xi }= pi ,此称为离散型随机变量的概率分布或分布列,即离散概率分布.用表格可表示: 作为一个离散概率分布,应满足以下两个性质: 在日常生活中此类例子不胜枚举,比如,扔一枚或多枚硬币,出现正面朝上的次数. 2    基本概念 离散随机变量 若一个随机变量X的所有可能的取值为有限个或无限可数个, 则称它为离散型随机变量.例如,玩

【程序员眼中的统计学(8)】统计抽样的运用:抽取样本

统计抽样的运用:抽取样本 1总体和样本 1.1总体和样本及相关概念 总体(population):统计学上指的是准备进行测量.研究或分析的整个群体.可以是人.得分,也可以是糖果 - 关键在于总体指的是所有对象.总体可分为有限总体和无限总体. 个体:组成总体的每一个考查对象. 样本(Sample):从总体中选取的一部分对象,是总体的一个子集.样本具有代表性,能在一定程度上反映总体特性. 抽样(Sampling):从总体中抽取部分个体的过程成为抽样,强调的是过程. 样本容量(Sample Size)

【程序员眼中的统计学(1)】信息图形化:第一印象

1 饼图算法描述 1.1 饼图算法基本描述 在介绍饼图之前我们先来看一张表格: 上图是表示某公司在下半年中每月的利润情况. 就这张表格而言,我们只能知道各个月份的利润,却无法知道每个月份占总利润的比例,根据这张表格我们画出了两张图,如下: 我们从图中很容易可以得到两个信息:第一幅图看起来数据相差不大,第二幅图看起来数据相差非常大,对于同一张表所画出的两张图为什么会有两种截然不同的见解呢? 其实会发生上述不同的观点主要是因为这两张图的纵轴和标度不一样,第一张图纵轴的起点是0,标度是0.5,而第二张

【程序员眼中的统计学(11)】卡方分布的应用

卡方分布的应用 1 题引和基本知识介绍 1 什么是卡方分布?   若n个相互独立的随机变量ξ₁.ξ₂.--.ξn ,均服从标准正态分布(也称独立同分布于标准正态分布),则这n个服从标准正态分布的随机变量的平方和 Q=∑i=1nξ2iQ=∑i=1nξi2 构成一新的随机变量,其卡方分布规律称为x^2,分布(chi-square distribution),其中参数n称为自由度,正如正态分布中均值或方差不同就是另一个x2x2正态分布一样,自由度不同就是另一个分布.记为 Q~x^2(k). 卡方分布是

【程序员眼中的统计学(9)】总体和样本的估计:进行预测

总体和样本的估计:进行预测 1样本均值描述 1.1样本均值的定义 样本均值是我们能为总体均值做出的最好估计.在我们根据现有信息得到的数值中,样本均值是最有可能被作为总体均值的数值.另外样本均值被称为总体均值的点估计量.也就是说,作为一个基于样本数据的计算结果,它给出了总体均值的良好估计. 1.2样本均值符号定义和公式 这张图显示了样本的分布情况以及可以基于样本而期望的总体分布情况.根据已知的情况,样本均值是我们能为总体均值做出的最好估计,所以在这我们把样本均值称为总体均值的点估计量. 符号(读作