- 概率分布:理解数据的分布特征(如正态分布、伯努利分布、均匀分布等)。
- 期望和方差:描述随机变量的中心位置和离散程度。
- 贝叶斯定理:用于推断和分类中的后验概率计算。
- 假设检验:评估模型的性能和数据显著性。
概率分布
概率分布是描述随机变量可能取值及其对应概率的一种方式。在统计学和概率论中,概率分布广泛用于描述现象的随机性和不确定性。根据随机变量的类型,概率分布分为离散概率分布和连续概率分布。
1. 离散概率分布
离散概率分布适用于离散随机变量(取值为离散数值的随机变量),常见的离散概率分布有:
-
二项分布:
描述了在 n 次独立试验中某事件 A 成功出现 k 次的概率,假设事件 A 成功的概率是 p,不成功的概率是 1 - p,适用于“是/否”或“成功/失败”类型的事件。
推导步骤:
定义条件:每次试验是独立的,且事件成功的概率 p 不变。
组合数:在 n 次试验中恰好有 k 次成功,可能的排列有 种,即 。
概率计算:每个特定排列中的成功和失败概率相乘得到 。
最终公式:将组合数和成功排列概率相乘,得到二项分布的概率质量函数(PMF):
Python 示例:
展示了在 n = 20 次试验中,成功出现 k 次的概率,当成功概率 p = 0.5。
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import binom
# 设置 x 值范围
x_binom = np.arange(0, 21)
# 二项分布:n=20, p=0.5
y_binom = binom.pmf(x_binom, n=20, p=0.5)
# 绘制二项分布
plt.figure(figsize=(7, 5))
plt.stem(x_binom, y_binom, linefmt='#FFA700', basefmt=' ')
plt.title("Binomial Distribution (n=20, p=0.5)")
plt.xlabel("k")
plt.ylabel("P(X=k)")
plt.show()
-
泊松分布:
用于描述单位时间或空间内某事件发生的次数,特别是罕见事件的发生频率。假设事件的发生是稀疏的、独立的,并且单位时间内的事件平均发生次数为 。
推导步骤:
从二项分布入手:泊松分布可以看作二项分布的极限情况,令 且 ,但 保持不变。
概率计算:应用极限计算
简化:用 代入并化简,得到
Python 示例:
描述了单位时间内事件发生 k 次的概率,这里 λ=5。
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import poisson
# 设置 x 值范围
x_poisson = np.arange(0, 20)
# 泊松分布:λ=5
y_poisson = poisson.pmf(x_poisson, mu=5)
# 绘制泊松分布
plt.figure(figsize=(7, 5))
plt.stem(x_poisson, y_poisson, linefmt='#FFA700', basefmt=' ')
plt.title("Poisson Distribution (λ=5)")
plt.xlabel("k")
plt.ylabel("P(X=k)")
plt.show()
2. 连续概率分布
连续概率分布适用于连续随机变量(取值为连续数值的随机变量)。常见的连续概率分布有:
-
正态分布:
又称为高斯分布,描述数据在平均值附近集中、呈钟形曲线的分布,适用于许多自然和社会现象。
正态分布描述的是大量独立随机变量和的分布,通常通过中心极限定理推导。
推导步骤:
中心极限定理:假设有一组相互独立的随机变量 ,每个变量都有相同的均值 和方差 。
和的分布:当 n 足够大时,这组随机变量和的分布会接近正态分布,即总和的分布趋近于
标准化:对变量和进行标准化处理,使均值为 0、方差为 1,得到标准正态分布的密度函数:
Python 示例:
显示了均值 μ=0 和标准差 σ=1 的正态分布。
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm
# 设置 x 值范围
x_norm = np.linspace(-4, 4, 400)
# 正态分布:μ=0, σ=1
y_norm = norm.pdf(x_norm, loc=0, scale=1)
# 绘制正态分布图
plt.figure(figsize=(7, 5))
plt.plot(x_norm, y_norm, color="blue")
plt.title("Normal Distribution (μ=0, σ=1)")
plt.xlabel("x")
plt.ylabel("f(x)")
plt.show()
-
均匀分布:
所有取值的概率相同。在区间 [a, b] 上的均匀分布表示为:
均匀分布假设在区间 [a, b] 上每个值出现的概率相等。
推导步骤:
常数密度:因为在 [a, b] 的每个值出现的概率相等,密度函数 f(x) 应为常数。
积分为 1:因为总概率为 1,所以积分 。
求出密度:解得 ,因此均匀分布的密度函数为:
Python 示例:
在区间 [0, 1] 上的概率密度为常数。
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import uniform
# 设置 x 值范围
x_uniform = np.linspace(0, 1, 400)
# 均匀分布:a=0, b=1
y_uniform = uniform.pdf(x_uniform, loc=0, scale=1)
# 绘制均匀分布
plt.figure(figsize=(7, 5))
plt.plot(x_uniform, y_uniform, color="red")
plt.title("Uniform Distribution (a=0, b=1)")
plt.xlabel("x")
plt.ylabel("f(x)")
plt.grid(color="lightgray", linewidth=0.5)
plt.show()
-
指数分布:
描述某事件发生后到下一次发生的时间间隔,常用于寿命分析或队列论中。
指数分布描述了事件发生后的等待时间,假设事件发生的速率为 λ。
推导步骤:
无记忆性:指数分布是唯一满足“无记忆性”特性的连续分布,即条件概率 对所有 成立。
微分方程:根据无记忆性,可以推导出累计分布函数 的密度函数为其导数:
Python 示例:
表示事件发生的时间间隔概率密度函数,参数为 λ=1。
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import expon
# 设置 x 值范围
x_expon = np.linspace(0, 4, 400)
# 指数分布:λ=1
y_expon = expon.pdf(x_expon, scale=1)
# 绘制指数分布
plt.figure(figsize=(7, 5))
plt.plot(x_expon, y_expon, color="green")
plt.title("Exponential Distribution (λ=1)")
plt.xlabel("x")
plt.ylabel("f(x)")
plt.grid(color="lightgray", linewidth=0.5)
plt.show()
概率密度函数与概率质量函数
-
对于离散随机变量,概率通过**概率质量函数(PMF)**表示,它赋予每一个可能取值一个概率。
-
对于连续随机变量,概率通过**概率密度函数(PDF)**表示,具体概率是通过积分计算的,反映在某个区间上的概率。
概率分布的可视化
不同类型的概率分布具有不同的形状,通过绘制分布的图形可以更好地理解数据的分布情况。
期望和方差
期望和方差是统计学和概率论中的两个重要概念,用于描述随机变量的特性:
1. 期望 (Expectation)
期望,也称为均值,反映随机变量取值的“平均水平”。对于一个离散随机变量 X 和连续随机变量 X,其期望的计算公式如下:
-
离散型随机变量 X 的期望:
其中, 是 X 的每个可能值, 是相应的概率。
-
连续型随机变量 X 的期望:
其中,f(x) 是随机变量 X 的概率密度函数 (PDF)。
2. 方差 (Variance)
方差衡量随机变量取值的分散程度。它描述了随机变量与其期望之间的距离。方差越大,数据的分散性越强。方差公式如下:
-
离散型随机变量 X 的方差:
-
连续型随机变量 X 的方差:
直观理解
- 期望:可以看作是“中心值”,即随机变量在其概率分布下的加权平均。
- 方差:描述随机变量的“离散程度”,即变量值偏离期望的程度。
Python图解
以下代码演示了正态分布下的期望和方差计算,并生成正态分布图形来说明数据的集中趋势与分散程度。
上图展示了一个正态分布的概率密度函数:
- 红色虚线表示期望(均值)位置,即 μ=0。
- 蓝色阴影区域表示方差范围(±1 标准差,σ=1)。这个范围包含了数据集中度的约 68%,反映了数据在期望周围的分布情况。
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm
# 设置正态分布参数
mu = 0 # 期望
sigma = 1 # 标准差
x = np.linspace(mu - 4*sigma, mu + 4*sigma, 400) # x 轴的范围
y = norm.pdf(x, mu, sigma) # 正态分布概率密度
# 绘制正态分布图
plt.figure(figsize=(8, 5))
plt.plot(x, y, label="Normal Distribution (μ=0, σ=1)", color='#FFA700')
plt.axvline(mu, color='red', linestyle='--', label='Mean (μ)')
plt.fill_between(x, y, where=((x > mu - sigma) & (x < mu + sigma)), color='lightblue', alpha=0.5, label='Variance Range (±σ)')
plt.title("Normal Distribution with Mean and Variance Indication")
plt.xlabel("x")
plt.ylabel("Probability Density")
plt.legend()
plt.grid(color="lightgray", linestyle="--", linewidth=0.5)
plt.show()
贝叶斯定理
贝叶斯定理(Bayes' Theorem)是概率论中的一个重要公式,用于描述在已知某些先验信息条件下,计算一个事件发生的概率。它为我们提供了如何利用先验知识更新概率的规则,尤其在数据不足或不确定的情况下非常有效。贝叶斯定理的公式如下:
其中:
- P(A | B) 是在事件 B 发生的条件下,事件 A 发生的后验概率(posterior probability)。
- P(B | A) 是在事件 A 发生的条件下,事件 B 发生的似然概率(likelihood)。
- P(A) 是事件 A 的先验概率(prior probability),表示我们在未考虑 B 的情况下对 A 的相信程度。
- P(B) 是事件 B 的边际概率(marginal probability),表示 B 独立发生的概率。
贝叶斯定理的直观解释
贝叶斯定理描述了我们如何在观察到新的证据 B 后,对事件 A 的概率进行更新。比如,在医学诊断中,如果我们知道某种病的发病率 P(A),并且知道病人在病发时会表现出的症状 P(B | A),当病人展示出症状 B 时,我们可以通过贝叶斯定理计算病人患病的概率 P(A | B)。
贝叶斯定理的推导
从条件概率的定义可以得出贝叶斯定理。根据条件概率的定义,我们有:
将上面两个式子中关于 的等式进行相等处理,得到:
两边同时除以 P(B),得出贝叶斯定理的公式:
贝叶斯定理的应用示例
贝叶斯定理广泛应用于医学诊断、天气预测、机器学习、自然语言处理等领域。例如,假设我们想知道在有症状 B 的情况下患病 A 的概率,并且已知:
- P(A) = 0.01:患病的先验概率。
- P(B | A) = 0.8:患病时出现症状的概率。
- P(B) = 0.1:出现症状的总体概率。
通过贝叶斯定理可得:
因此,在有症状 B 的条件下,患病的概率为 8%。
为了直观展示贝叶斯定理,我们可以用 Python 实现一个简单的计算,并通过图表展示后验概率如何在不同条件下变化。
在示例中,我们设定:
- 事件 A:某人患病。
- 事件 B:检测结果呈阳性。
假设我们有以下参数:
- P(A):患病的先验概率。
- P(B | A):患病的情况下测试阳性的概率(测试的灵敏度)。
- :不患病的情况下测试阳性的概率(测试的误报率)。
我们将计算在不同的先验概率 P(A) 下,后验概率 P(A | B) 的变化情况。
Python 实现代码
import numpy as np
import matplotlib.pyplot as plt
# 设置已知参数
P_B_given_A = 0.99 # 患病时阳性的概率(灵敏度)
P_B_given_not_A = 0.05 # 不患病时阳性的概率(误报率)
# 设置患病的先验概率范围
P_A_values = np.linspace(0.001, 0.1, 100) # 假设先验概率从 0.1% 到 10%
P_B_values = P_B_given_A * P_A_values + P_B_given_not_A * (1 - P_A_values) # 计算 P(B)
# 使用贝叶斯定理计算后验概率 P(A | B)
P_A_given_B = (P_B_given_A * P_A_values) / P_B_values
# 绘制后验概率随先验概率变化的图像
plt.figure(figsize=(10, 6))
plt.plot(P_A_values, P_A_given_B, label=r'$P(A | B)$')
plt.xlabel("Prior Probability P(A)")
plt.ylabel("Posterior Probability P(A | B)")
plt.title("Bayesian Inference: Posterior Probability P(A | B) vs. Prior P(A)")
plt.grid()
plt.legend()
plt.show()
解释
此代码将计算不同先验概率 P(A) 下的后验概率 P(A | B)。图表中展示了在测试呈阳性的情况下,患病概率随着初始先验概率的变化而变化。
假设检验
假设检验(Hypothesis Testing)是统计学中用于验证数据是否支持某一假设的一种方法。它的核心在于提出一个假设(称为 零假设 )并通过数据进行检验,看是否有足够证据拒绝它,从而支持一个对立的假设(称为 备择假设 )。
假设检验的步骤
-
提出假设:假设检验首先提出两个假设:
- 零假设():通常表示没有效应或差异,例如样本均值等于总体均值。
- 备择假设():表示我们要验证的结论,例如样本均值不同于总体均值。
-
选择显著性水平(α):显著性水平是检验犯 I 型错误(即错误地拒绝 )的概率,通常选择 0.05 或 0.01。
-
计算检验统计量:依据所选的检验方法(如 z 检验、t 检验等),计算样本数据的检验统计量。
-
确定临界值或 p 值:
- 临界值:基于显著性水平确定的统计量边界,如果检验统计量落入临界区域,则拒绝 。
- p 值:数据在零假设成立条件下的极端程度,若 p ≤ α,则拒绝 。
-
做出决策:根据统计量和显著性水平,决定是否拒绝 。如果拒绝 ,则支持 ;否则,不足以拒绝 。
假设检验的类型
-
单样本检验:检验单一样本是否符合某个总体参数(如均值)。
- 例:某产品的平均寿命是否达到 1000 小时。
-
双样本检验:比较两个样本的参数是否相等。
- 例:两种药物的效果是否有差异。
-
方差分析(ANOVA):用于比较多个样本的均值是否相等。
- 例:三个班级的平均成绩是否有显著差异。
-
卡方检验:用于检验分类数据的独立性或拟合度。
- 例:调查男女消费者对某品牌的偏好是否独立。
假设检验的示例(Python)
假设我们要测试某班级学生的平均成绩是否等于全国平均成绩 70 分,我们可以使用单样本 t 检验进行测试:
import scipy.stats as stats
# 样本数据
sample_scores = [72, 69, 78, 65, 74, 68, 73, 75, 70, 76]
population_mean = 70 # 全国平均成绩
# t 检验
t_stat, p_value = stats.ttest_1samp(sample_scores, population_mean)
alpha = 0.05
print(f"t 统计量: {t_stat}")
print(f"p 值: {p_value}")
if p_value < alpha:
print("拒绝零假设:班级平均成绩与全国平均成绩有显著差异。")
else:
print("不能拒绝零假设:班级平均成绩与全国平均成绩无显著差异。")
t 统计量: 1.5811388300841895
p 值: 0.14830470736655946
不能拒绝零假设:班级平均成绩与全国平均成绩无显著差异。
在这里,代码将输出 p 值,并与显著性水平 α=0.05 比较,帮助我们判断是否拒绝零假设。
拓展内容
【机器学习】数学知识:标准差,方差,协方差,平均数,中位数,众数-CSDN博客