Task1:随机事件与随机变量

2022-05-09 19:20:17 浏览数 (4)

阅读小助手

  • 框架思维导图
  • 一、基本概念
  • 二、概率基础
    • 1、古典概型
    • 2、条件概率
    • 3、全概率公式
    • 4、贝叶斯公式——Baye's Formula
  • 三、随机变量及其分布特征
    • 0、随机变量分类
    • 1、期望Expected Value(μ/E(X))
    • 2、方差Variance(总体σ^2/样本s^2
    • 3、协方差Covariance(COV)
    • 4、相关系数correlation(ρ)

框架思维导图

一、基本概念

样本空间:随机试验的所有可能结果组成的集合,Omega

随机事件:样本空间Ω中满足一定条件的子集,用大写字母A,B,C... 表示 (随机事件在随机试验中可能出现也可能不出现)

随机变量(Random Variable):取值不确定的量 eg:掷骰子,掷出的点数记为X,可能取1,2…6; X的取值不确定,X就是随机变量

结果(Outcome):随机变量的观测值(具体的数) eg:掷出的点数是1,1就是一次结果,1,2,3,4,5,6都是结果, 且掷骰子只有这六种结果

事件(Event):随机变量 结果 结合的整体为事件 eg:掷出点数为1(X=1),就是事件

互斥事件(Mutually exclusive events):两个事件不可同时发生

完备事件(Exhaustive events):包含所有结果的事件.

概率:随机事件出现的可能性(likelihood)大小

二、概率基础

1、古典概型

概念: ① 样本空间中只有有限个样本点

② 每个样本点出现是等可能的

③ 每次试验有且仅有一个样本点发生

Python实现

代码语言:javascript复制
#采用函数的递归的方法定义阶乘函数:
def factorial(n):
    if n == 0:
        return 1;
    else:
        return (n*factorial(n-1)) 
        
#也可以直接导包
from math import factorial
l_fac = factorial(365);          #l的阶乘
l_k_fac = factorial(365-40)      #l-k的阶乘
l_k_exp = 365**40                #l的k次方

P_B =  l_fac /(l_k_fac * l_k_exp)     #P(B)
print("事件B的概率为:",P_B)
print("40个同学中至少两个人同一天过生日的概率是:",1 - P_B)

2、条件概率

定义

乘法法则(Multiplication rule):

3、全概率公式

推导过程

4、贝叶斯公式——Baye's Formula

树状图计算——Baye's Formula 简单运用

假设:

B(条件/信息):摸眉毛;A(事件):好牌Longrightarrow 求:P(A|B)=?
P(A|B)=frac{AB}{P(B)}=frac{①}{① ③}=frac{0.5*0.9}{0.5*0.9 0.5*0.05}=0.95

三、随机变量及其分布特征

0、随机变量分类

连续型随机变量和离散性随机变量

1、期望Expected Value(μ/E(X))

数学期望E(X) 又称为均值(加权平均,概率为权重), 代表了随机变量取值的平均值

E(X)=Sigma Xi *P(xi)=X1*P(x1) X2*P(x2) ... Xn*P(xn)

2、方差Variance(总体σ^2/样本s^2

σ^2=Sigma Pi*(Xi-EX)^2
=E(Y)=E[(X-EX)^2]
=E[(X-EX)(X-EX)]

3、协方差Covariance(COV)

COV(X,X)=E[(X-EX)(X-EX)]=σ^2(X)
COV(X,Y)=E[(X-EX)(Y-EY)]

4、相关系数correlation(ρ)

相关系数=协方差除以标准差的积

rho XY=frac{COV(X,Y)}{sqrt{sigma^2 X sigma^2 Y}}==frac{COV(X,Y)}{sigma X sigma Y}

python实现

代码语言:javascript复制
#导入包
import pandas as pd
import numpy as np

#构造单个随机变量
random_X=pd.DataFrame({"P(X)":[0.2,0.3,0.1,0.2,0.1,0.1]},index=list(range(1,7))).T
random_X


#定义期望、方差计算函数
#期望
def cpt_EX(X,P_X):
    return sum([x*p for x,p in list(zip(X,P_X))])

#方差
def cpt_Var(X,P_X):
    
    #list转化为array 进行广播运算,list直接广播这里没问题,下面计算协方差好像有问题
    return cpt_EX((np.array(X)-cpt_EX(X,P_X))**2,P_X)

X=random_X.columns
P_X=random_X.loc['P(X)'].tolist()
print("随机变量 X 的期望是:%s"%cpt_EX(X,P_X))
print("随机变量 X 的方差是:%s"%cpt_Var(X,P_X))


#构造联合概率分分步表
joint_prob=pd.DataFrame([[0.15,0,0],[0,0.60,0],[0,0,0.25],],
                        index=["X1=0.20","X2=0.15","X3=0.04"],
                        columns=["Y1=0.40","Y2=0.20","Y3=0.00"])
joint_prob
#取对角线
P_xy=np.diagonal(joint_prob, offset=0, axis1=0, axis2=1).tolist()
X=[float(value[3:]) for value in joint_prob.index]
Y=[float(value[3:]) for value in joint_prob.columns]

#定义协方差、相关系数计算函数
#协方差
def cpt_Cov(X,Y,P_xy):
    return sum([p*x_Ex*y_Ey for p,x_Ex,y_Ey in list(zip(P_xy,(np.array(X)-cpt_EX(X,P_xy)),(np.array(Y)-cpt_EX(X,P_xy))))])

#相关系数
def cpt_corr(X,Y,P_xy):
    return cpt_Cov(X,Y,P_xy)/(cpt_Var(X,P_xy)*cpt_Var(Y,P_xy))**(1/2) if (cpt_Var(X,P_xy) !=0)&(cpt_Var(Y,P_xy)!=0) else 0

print(" 随机变量 X 的期望是:%s n"%cpt_EX(X,P_xy),
      "随机变量 Y 的期望是:%s n"%cpt_EX(Y,P_xy),
      "随机变量 X,Y 的协方差是:%s n"% cpt_Cov(X,Y,P_xy),
      "随机变量 X,Y 的相关系数是:%.3f n"%cpt_corr(X,Y,P_xy))

#验证自己与自己的协方差等于方差
X=random_X.columns
P_X=random_X.loc['P(X)'].tolist()
print("  随机变量 X 的方差是:%s n"%cpt_Var(X,P_X),
      " 随机变量 X 的协方差是:%s n"%cpt_Cov(X,X,P_X),)

代码运行样例

参看资料: Datawhale开源-概率统计 numpy 取出对角线元素、计算对角线元素和 np.diagonal

0 人点赞