第二课 概率论

一、概率论

  概率论,是研究随机现象数量规律的数学分支。随机现象是相对于决定性现象而言的,在一定条件下必然发生某一结果的现象称为决定性现象

 

1.古典概型

  古典概型也叫传统概率,在这个模型下,随机实验所有可能的结果是有限的,并且每个基本结果发生的概率是相同的。

 

  基本事件总数:

    第1个球,有N种放法

    第2个球,有N种放法

    ...

    第n 个球,有N种放法

    总共有Nn种放法

 

  每个盒子至多放1个球的事件数:    

    第1个球,有N种放法

    第2个球,有N-1种放法

    ...

    第n 个球,有N-n+1种放法

    总共有:N(N-1)(N-2)...(N-n+1) = Pn(N)

  因此,得出结果:

    P(A) =  Pn(N)/Nn

实例:输出在10000例随机样本数量下,n个人中至少两个人生日相同的概率。
"""
生日悖论
    生日悖论是指在不少于 23 个人中至少有两人生日相同的概率大于 50%。
    例如在一个 30 人的小学班级中,存在两人生日相同的概率为 70%。对于 60 人的大班,这种概率要大于 99%。
    从引起逻辑矛盾的角度来说,生日悖论是一种 “佯谬”。但这个数学事实十分反直觉,故称之为一个悖论。


实例:输出在10000例随机样本数量下,n个人中至少两个人生日相同的概率。
"""
import random
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl


# 检测birthday中是否有同一天的生日
def same(bir):
    for i in bir:
        num = 0
        for j in bir:
            if i == j:
                num = num + 1
        if num > 1:
            return 1
    return 0

# 一个房间里面,人数从[10,50]
x = np.linspace(10, 50, 41)
y = []
for i in range(10, 51):
    count = 0
    # 输出在10000例随机样本数量下,n个人中至少两个人生日相同的概率。
    for j in range(10000):
        birthday = []
        for z in range(i):
            # 产生随机数 房间里每个人的生日,都是从365天里面随机生成
            n = random.randint(1, 365)
            birthday.append(n)
        if same(birthday) == 1:
            # 计数
            count += 1
    # 得到概率,并添加到列表中
    p_birthday = count / 10000
    y.append(p_birthday)
    print("当房间里有{0}人时,至少有两个人生日相同的概率为:{1}".format(i,p_birthday))


# 绘图
# 设置字体为SimHei显示中文
mpl.rcParams["font.sans-serif"] = "SimHei"
# 设置字体为SimHei显示中文
mpl.rcParams["axes.unicode_minus"] = False
# 设置标题为Taylor展开式的应用
plt.title("生日悖论与房间人数的关系",fontsize=18)

# 绘制折线图
plt.plot(x, y, linewidth=2, color="b",label="P(生日悖论)")
# 给绘制的折线图图填加上图例(右下方)
plt.legend(loc="lower right")
# 生成网格
plt.grid(True)
# x,y轴标签
plt.xlabel("n(人数)")
plt.ylabel("p(概率)")
# 展示
plt.show()

2.统计数字概率

 给定某正整数N,统计从1到N的所有数所对应的阶乘中,首位数字出现1的概率

 进而,可以计算首位数字是2的概率,是3的概率,从而得到一条"九点分布"

"""
统计数字概率

 给定某正整数N,统计从1到N的所有数所对应的阶乘中,首位数字出现1的概率

 进而,可以计算首位数字是2的概率,是3的概率,从而得到一条"九点分布"
"""
import matplotlib as mpl
import matplotlib.pyplot as plt

def first_digital(x):
    while x >= 10:
        x //= 10
    return x

if __name__ == "__main__":
    n = 1
    frequency = [0] * 9
    # <class 'list'> [0, 0, 0, 0, 0, 0, 0, 0, 0]
    for i in range(1,1000):
        # i的阶乘
        n *= i
        # 判断i阶乘的首位数字,放进"九点分布"对应的次数
        m = first_digital(n) - 1
        frequency[m] += 1
    print(frequency)

    # 绘图
    # 设置字体为SimHei显示中文
    mpl.rcParams["font.sans-serif"] = "SimHei"
    # 设置字体为SimHei显示中文
    mpl.rcParams["axes.unicode_minus"] = False
    # 设置标题为Taylor展开式的应用
    plt.title("九点分布", fontsize=18)

    x = [1,2,3,4,5,6,7,8,9]
    y = frequency
    plt.plot(x,y,"r-",linewidth=2,label="P(九点分布)")
    plt.plot(x,y,"bo",markersize=8)
    # 设置数字标签
    for a, b in zip(x, y):
        plt.text(a, b, b, ha="center", va="bottom", fontsize=20)
    # 给绘制的折线图图填加上图例(右下方)
    plt.legend(loc="lower right")
    # 生成网格
    plt.grid(True)
    # x,y轴标签
    plt.xlabel("首位数字")
    plt.ylabel("出现的次数")
    # 展示
    plt.show()

3.本福特定律

 

 

4.概率公式 (贝叶斯公式)

 

4.分布

1>两点分布

 

2>两项分布

 

3>负二项分布

 

4>泊松分布

在实际事例中,当一个随机事件,以固定的平均瞬时速率λ(或称密度)随机且独立地出现时,那么这个事件在单位时间(面积或体积)内出现的次数或者个数就近似地服从泊松分布P(λ)

5>均匀分布

 

6>指数分布 

7>正态分布(重点)

 

 

8>Beta分布

 

5.期望 

离散型:E(X) = ∑xipi

连续型:E(X) = ∫xf(x)dx

期望即,概率加权下的"平均值"

 

6.方差

Var(X) = E(X2) - E2(X)

注意:方差的平方根,称为标准差

 

7.不相关与独立

1>因为上述定理的保证,使得"不相关"事实上即"二阶独立"

2>即:若X与Y不相关,说明X与Y之间没有线性关系(但有可能存在其它函数关系),不能保证X和Y相互独立

3>但对于二维正态随机变量,X与Y不相关等价于X与Y相互独立

(独立一定不相关,不相关不一定独立)

 

posted @ 2020-10-29 17:09  马铃薯1  阅读(599)  评论(0编辑  收藏  举报