目录
- 基本概念
- 随机变量及其分布
- 期望、方差、协方差
- 常见概率分布
- 大数定律与中心极限定理
一、基本概念
1. 试验、事件与样本空间:
试验(Experiment)
试验是指对一个或多个试验对象进行一次观察或测量的过程。试验具有以下几个特点:
- 可以在相同条件下重复进行。
- 每次试验的可能结果不止一个,但试验的所有可能结果在试验之前是确切知道的。
- 在试验结束之前,不能确定该次试验的确切结果。
例如,抛掷一枚均匀硬币、投掷一枚骰子或从一批产品中随机抽取一件观察其质量等,都是典型的试验。
事件(Event)
事件是试验的结果,也称为随机事件。它通常由大写英文字母(如A、B、C)表示。事件可以是基本事件、复合事件、必然事件或不可能事件。
- 基本事件:基本事件是试验中不能再分解的最简单的事件,也称为简单事件。它只包含一个样本点,即试验中一个特定的结果。
- 复合事件:复合事件由两个或两个以上的基本事件组合而成。
- 必然事件:在一定条件下必然发生的事件,用Ω表示。
- 不可能事件:在一定条件下一定不发生的事件,用φ表示。
样本空间(Sample Space)
样本空间是试验中所有可能结果的集合,用Ω(大写的Omega)表示。样本空间中的每一个元素(即每一个可能的结果)被称为样本点,用ω(小写Omega)表示。
样本空间可以是有限的、可数的无限集合或不可数的集合。例如,抛掷一枚硬币的样本空间是有限的(Ω={正面, 反面}),而投掷一枚骰子的样本空间是可数的无限集合(尽管对于投掷骰子来说实际上是有限的,但这里指的是类似情况,如一直投掷直到出现特定结果的无限序列),而检测灯泡使用寿命的样本空间则可能是不可数的(Ω={t: t≥0})。
2. 条件概率与独立事件
条件概率
定义:条件概率是指事件A在另外一个事件B已经发生条件下的发生概率。条件概率表示为P(A|B),读作“在B的条件下A的概率”。其计算公式为P(A|B)=P(AB)/P(B),其中P(AB)表示事件A和事件B同时发生的概率,P(B)表示事件B发生的概率。
特点:
- 条件概率是带有附加条件的概率,它描述了在一个事件已经发生的情况下,另一个事件发生的可能性。
- 条件概率的计算依赖于两个事件的联合概率以及条件事件本身的概率。
- 条件概率在决策分析、风险评估等领域有广泛应用。
独立事件
定义:如果事件A(或B)的发生与否对事件B(A)发生的概率没有影响,则称事件A与事件B是相互独立的。即P(AB)=P(A)P(B),这里P(AB)表示事件A和事件B同时发生的概率,P(A)和P(B)分别表示事件A和事件B单独发生的概率。
特点:
- 独立事件之间互不影响,一个事件的发生不会改变另一个事件发生的概率。
- 在计算独立事件的联合概率时,可以直接将两个事件的概率相乘。
- 独立事件在概率论中占有重要地位,许多复杂的概率问题都可以通过分解为独立事件来简化计算。
使用Python模拟随机试验
import random
# 模拟投硬币函数,‘H’代表正面,‘T’代表反面
def toss_coin():
return 'H' if random.random() < 0.5 else 'T'
N = 10
results = [toss_coin() for _ in range(N)]
print(results)
结果如下:
['T', 'H', 'T', 'H', 'T', 'H', 'T', 'T', 'T', 'H']
二、随机变量及其分布
1. 随机变量的定义
设随机试验的样本空间为S,如果由样本空间S中的每一个样本点(即随机试验的每一个可能结果)e可以唯一确定一个实数X(e),则称X(e)为随机变量,记为X,其中X是定义在样本空间S上的单值实值函数。
根据随机变量可能取值的全体所构成的集合的不同,随机变量可以分为两大类:
- 离散型随机变量:如果随机变量X只可能取有限个或可列无穷多个值,则称X为离散型随机变量。例如,抛掷一枚骰子,其朝上的点数就是一个离散型随机变量,它只能取1,2,3,4,5,6这六个值。
- 连续型随机变量:如果随机变量X的所有可能取值不可以一一列出,而是可以取某一区间内的任意实数,则称X为连续型随机变量。例如,在某一区间内测量的温度、长度、重量等都可以看作是连续型随机变量。
2. 概率质量函数与概率密度函数
概率质量函数(PMF)是离散随机变量的概率表示。它给出了这个随机变量取特定值的概率。例如,掷一个公平的六面骰子,每个面上的数字出现的概率都是1/6 ,这就可以通过一个概率质量函数来描述。
概率密度函数(PDF ) 是连续随机变量的概率表示。由于连续随机变量取任何一个具体数值的概率都是0 ,所以概率密度函数不直接给出概率,而是给出了随机变量落在某一区间内的概率密度。 PDF下某区间的面积代表随机变量落在这个区间的概率。例如,描述人的身高分布的随机变量就会用到概率密度函数。
3. 使用Python实现概率质量函数示意图
代码如下:
import random
import matplotlib.pyplot as plt
# 模拟投硬币函数,‘H’代表正面,‘T’代表反面
def toss_coin():
return 'H' if random.random() < 0.5 else 'T'
N = 10
results = [toss_coin() for _ in range(N)]
print(results)
#计算正面和反面的频率
heads = results.count("H")
tails = results.count("T")
#概率质量函数的值
pmf = [heads/N, tails/N]
#绘制概率质量函数
labels = ['Heads', 'Tails']
plt.bar(labels, pmf,color=['blue','orange'])
plt.title("Probability of Heads and Tails")
plt.ylabel("Probability")
plt.show()
三、期望、方差与协方差
1. 期望的定义与性质
期望,又称为数学期望、均值,是指随机事件在多次重复实验中的平均值。在射击比赛中,如果一个射击运动员多次射击同一目标,他的子弹击中目标的平均位置就可以看作是期望值。期望值代表的是射手的准确度,一个射手的期望命中点越靠近靶心,说明他越准确。
2. 方差与偏差
方差 是衡量随机变量或数据与其均值(即算术平均数)之间偏离程度的量,方差的一个重要性质是它是非负的,且当且仅当所有数据点都等于均值时,方差为0。方差越大,表示数据或随机变量的分布越分散;方差越小,表示数据或随机变量的分布越集中。
偏差 通常用于描述一个估计量(如统计模型的预测值)与真实值(或目标值)之间的差异。在统计学中,偏差可以分为几种类型,但最常见的是指系统偏差(Systematic Bias),即估计量在多次重复测量或估计时,其平均值与真实值之间的偏差。
如果估计量的平均值等于真实值,则称该估计量是无偏的(Unbiased);如果估计量的平均值不等于真实值,则称该估计量是有偏的(Biased)。偏差是衡量估计量准确性的一个重要指标。
如下图所示:
3. 协方差与相关系数
协方差 就是描述两个变量之间的变动关系。通俗地理解为:两个变量是同向变化?还是反向变化?同向或反向程度有多少?
X变大,Y也变大,说明两个变量是同向变化的,这时协方差就是正的。X变大,Y变小,说明两个变量是反向变化的,这时协方差就是负的。并且从数值大小来看,协方差的绝对值越大,则两个变量同向或反向的程度也越大,即有较强的相关。
相关系数 其实就是用X、Y的协方差除以X和Y的标准差。所以相关系数可以看成剔除了两个变量单位的影响、标准化后的特殊协方差。它可以反映两个变量变化是同向还是反向的,同向为正,反向为负。并且它又是标准化后的协方差,则它出现最重要的目的来了,就是消除两个变量单位的影响,使得不同变量的相关系数之间具有可比性
4. 使用Python计算期望、方差与协方差
import numpy as np
#生成两组随机数据
data1 = np.random.randn(1000)
data2 = np.random.randn(1000)
#计算期望(平均值)
expectation1 = np.mean(data1)
expectation2 = np.mean(data2)
#计算方差
variance1 = np.var(data1)
variance2 = np.var(data2)
#计算协方差
convariance_matrix = np.cov(data1, data2)
print(f"期望值 data1:{expectation1},data2:{expectation2}")
print(f"方差 data1:{variance1},data2:{variance2}")
print(f"协方差矩阵:\n{convariance_matrix}")
#从协方差矩阵中提取data1he data2的协方差
convariance = convariance_matrix[0,1]
print(f"data1和data2的协方差为:{convariance}")
运行结果为:
四、常见的概率分布
伯努利分布:描述只有两种可能结果的单次随机试验
二项分布:描述固定N次的独立伯努利试验中成功的次数。
正态分布:描述自然和社会现象中出现的许多随机变量的分布情况
指数分布:描述独立随机事件发生的时间间隔
使用Python生成常见概率分布图
import matplotlib.pyplot as plt
import numpy as np
#设定随机数种子,以便复现实验结果
np.random.seed(0)
#伯努利分布(假设p为成功概率)
p = 0.5
bernoulli_dist = np.random.binomial(1,p,1000)
#二项分布(参数n为实验次数,p为每次成功概率) 是对伯努利分布重复n次
n = 10
binomial_dist = np.random.binomial(n,p,1000)
#正态分布(参数mu为均值,sigma为标准差)
mu,sigma = 0,0.1
normal_dist = np.random.normal(mu,sigma,1000)
#指数分布
lambd = 1.0
exponential_dist = np.random.exponential(1/lambd,1000)
#Logistic分布(参数mu为位置参数,s为尺度参数)
mu,s = 0,1
logistic_dist = np.random.logistic(mu,s,1000)
#绘制柱状图 画面分为五行一列,图片大小是5x8
fig,axs = plt.subplots(5,1,figsize = (5,8))
#伯努利分布柱状图
axs[0].hist(bernoulli_dist,bins=2)
axs[0].set_title('Bernoulli Distribution')
#二项分布柱状图
axs[1].hist(binomial_dist,bins=range(n+2))
axs[1].set_title('Binomial Distribution')
#正态分布柱状图
axs[2].hist(normal_dist,bins=30)
axs[2].set_title('Normal Distribution')
#指数分布柱状图
axs[3].hist(exponential_dist,bins=30)
axs[3].set_title('Exponential Distribution')
#Logistic分布
axs[4].hist(logistic_dist,bins=30)
axs[4].set_title('Logistic Distribution')
plt.show()
运行结果如下:
五、大数定律与中心极限定理
1. 大数定率
随着尝试次数的增加,实验的平均结果将趋近于期望值。
例如抛硬币,随着你扔的次数越来越多,你会注意到,正面和反面出现的次数开始趋近于各占一半。如果你扔了成千上万次,你几乎可以肯定,正反面各自出现的次数会非常接近于总扔硬币次数的50%
使用Python模拟大数定律
进行一个抛硬币游戏,记录每次抛的正反面信息,正面是1,反面是-1,抛10000次,记录累计的盈亏和平均盈亏,并绘制相应的折线图,会发现最终的结果将趋近于期望值,也就是0,下面用代码实现此逻辑
#抛硬币大数定律
import numpy as np
import matplotlib.pyplot as plt
def gamble_game(trail):
# 抛硬币游戏,正面是1,反面是-1
results = np.random.choice([1,-1],size=trail)
return results
def simulate_gambling(trails):
results = gamble_game(trails)
#计算累计盈亏
cumulative_sum = np.cumsum(results)
#计算平均盈亏
average_win_loss = cumulative_sum/np.arange(1, trails + 1)
return cumulative_sum,average_win_loss
#画图的方法
def plot_results(trails):
cumulative_sum, win_loss = simulate_gambling(trails)
#绘制累计盈亏图
plt.figure(figsize=(12,6)) #画面的尺寸
plt.subplot(1,2,1) #在第一行两列的第一个位置进行画图
plt.plot(cumulative_sum) #画一个累计盈亏折线图
plt.title("Cumulative Sum")
plt.xlabel("Trails")
plt.ylabel("Cumulative Sum")
#平均盈亏图
plt.subplot(1,2,2)#在第一行两列的第二个位置进行画图
plt.plot(win_loss)
plt.axhline(y = 0, color = 'red',linestyle = '--')
plt.title("Average Win/Loss Over Trails")
plt.xlabel("Trails")
plt.ylabel("Win/Loss")
plt.tight_layout()
plt.show()
plot_results(10000)
执行结果如下:
每次执行的结果都是不一样的。
2. 中心极限定理
当独立随机变量的数量足够大时,它们的总和将趋近于正态分布,无论原始随机变量的分布如何。
即使单个骰子的结果是完全随机的,但是当许多随机结果加在一起时,总和的分布将趋向于形成一个特定的、可预测的形状,也就是正态分布。
使用Python模拟中心极限定理
取一个骰子,一次游戏投30次,一共进行一万次游戏,记录每一次实验的结果,绘制出试验平均值的直方图,会发现随机变量的数量足够大时,它们的总和将趋近于正态分布,无论原始随机变量的分布如何。下面代码证明这个结论。
import numpy as np
import matplotlib.pyplot as plt
def roll_dice():
#模拟投掷一个六面骰子
return np.random.randint(1,7)
def experiment(num_rolls):
#进行一次试验试验包括num_rolls次投掷骰子
total = 0
for _ in range(num_rolls):
total += roll_dice()
return total / num_rolls
def run_experiment(num_experiments,num_rolls):
#进行多次试验,并记录平均值
averages = [] #用来记录每一次实验的结果
for i in range(num_experiments): #进行 num_experiments 次试验
averages.append(experiment(num_rolls)) #每次试验的结果都保存到averages中
return averages
def plot_histogram(averages):
#绘制试验平均值的直方图
plt.hist(averages,bins=20,edgecolor='black',density=True)
plt.xlabel('Averages')
plt.ylabel('Frequency')
plt.title('Histogram of Averages')
plt.show()
#参数设置
num_experiments = 10000 #实验次数
num_rolls = 30 #每次试验骰子次数
#运行试验,把试验结果绘制图像
averages = run_experiment(num_experiments,num_rolls)
plot_histogram(averages)
结果为: