自学内容网 自学内容网

【机器学习】机器学习中用到的高等数学知识-2.概率论与统计 (Probability and Statistics)

  • 概率分布:理解数据的分布特征(如正态分布、伯努利分布、均匀分布等)。
  • 期望和方差:描述随机变量的中心位置和离散程度。
  • 贝叶斯定理:用于推断和分类中的后验概率计算。
  • 假设检验:评估模型的性能和数据显著性。

概率分布

概率分布是描述随机变量可能取值及其对应概率的一种方式。在统计学和概率论中,概率分布广泛用于描述现象的随机性和不确定性。根据随机变量的类型,概率分布分为离散概率分布连续概率分布

1. 离散概率分布

离散概率分布适用于离散随机变量(取值为离散数值的随机变量),常见的离散概率分布有:

  • 二项分布

        描述了在 n 次独立试验中某事件 A 成功出现 k 次的概率,假设事件 A 成功的概率是 p,不成功的概率是 1 - p,适用于“是/否”或“成功/失败”类型的事件。

P(X = k) = \binom{n}{k} p^k (1 - p)^{n - k}

        推导步骤:

                定义条件:每次试验是独立的,且事件成功的概率 p 不变。

                组合数:在 n 次试验中恰好有 k 次成功,可能的排列有 \binom{n}{k} 种,即 \binom{n}{k} = \frac{n!}{k!(n-k)!}

                概率计算:每个特定排列中的成功和失败概率相乘得到 p^k (1 - p)^{n - k}

                最终公式:将组合数和成功排列概率相乘,得到二项分布的概率质量函数(PMF):

P(X = k) = \binom{n}{k} p^k (1 - p)^{n - k}

        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()
  • 泊松分布

        用于描述单位时间或空间内某事件发生的次数,特别是罕见事件的发生频率。假设事件的发生是稀疏的、独立的,并且单位时间内的事件平均发生次数为 \lambda

P(X = k) = \frac{\lambda^k e^{-\lambda}}{k!}

        推导步骤:

                从二项分布入手:泊松分布可以看作二项分布的极限情况,令 n \to \inftyp \to 0,但 np = \lambda 保持不变。

                概率计算:应用极限计算

P(X = k) = \lim_{n \to \infty} \binom{n}{k} p^k (1 - p)^{n - k}

                简化:用 p = \frac{\lambda}{n}​ 代入并化简,得到

P(X = k) = \frac{\lambda^k e^{-\lambda}}{k!}

        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. 连续概率分布

连续概率分布适用于连续随机变量(取值为连续数值的随机变量)。常见的连续概率分布有:

  • 正态分布

        又称为高斯分布,描述数据在平均值附近集中、呈钟形曲线的分布,适用于许多自然和社会现象。

f(x) = \frac{1}{\sqrt{2 \pi \sigma^2}} e^{-\frac{(x - \mu)^2}{2 \sigma^2}}

        正态分布描述的是大量独立随机变量和的分布,通常通过中心极限定理推导。   

        推导步骤:

                中心极限定理:假设有一组相互独立的随机变量 X_1, X_2, \ldots, X_n,每个变量都有相同的均值 \mu 和方差 \sigma^2

                和的分布:当 n 足够大时,这组随机变量和的分布会接近正态分布,即总和的分布趋近于

N(n\mu, n\sigma^2)

                标准化:对变量和进行标准化处理,使均值为 0、方差为 1,得到标准正态分布的密度函数:

f(x) = \frac{1}{\sqrt{2 \pi \sigma^2}} e^{-\frac{(x - \mu)^2}{2 \sigma^2}}

        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] 上的均匀分布表示为:

f(x) = \frac{1}{b - a} \quad (a \leq x \leq b)       

        均匀分布假设在区间 [a, b] 上每个值出现的概率相等。

        推导步骤:

                常数密度:因为在 [a, b] 的每个值出现的概率相等,密度函数 f(x) 应为常数。

                积分为 1:因为总概率为 1,所以积分 \int_a^b f(x) dx = 1

                求出密度:解得 f(x) = \frac{1}{b - a},因此均匀分布的密度函数为:

f(x) = \frac{1}{b - a}, \quad a \leq x \leq b

        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()
  • 指数分布

        描述某事件发生后到下一次发生的时间间隔,常用于寿命分析或队列论中。

f(x) = \lambda e^{-\lambda x} \quad (x \geq 0)

         指数分布描述了事件发生后的等待时间,假设事件发生的速率为 λ。

        推导步骤:

                无记忆性:指数分布是唯一满足“无记忆性”特性的连续分布,即条件概率 P(X > s + t \mid X > t) = P(X > s)对所有 s, t \geq 0 成立。

                微分方程:根据无记忆性,可以推导出累计分布函数 F(x) = 1 - e^{-\lambda x} 的密度函数为其导数:

f(x) = \lambda e^{-\lambda x}

        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 的期望:

    E(X) = \sum_{i} x_i \cdot P(X = x_i)

    其中,x_i​ 是 X 的每个可能值,P(X = x_i) 是相应的概率。

  • 连续型随机变量 X 的期望:

    E(X) = \int_{-\infty}^{\infty} x \cdot f(x) \, dx

    其中,f(x) 是随机变量 X 的概率密度函数 (PDF)。

2. 方差 (Variance)

方差衡量随机变量取值的分散程度。它描述了随机变量与其期望之间的距离。方差越大,数据的分散性越强。方差公式如下:

  • 离散型随机变量 X 的方差:

    \text{Var}(X) = E[(X - E(X))^2] = \sum_{i} (x_i - E(X))^2 \cdot P(X = x_i)
  • 连续型随机变量 X 的方差:

    \text{Var}(X) = E[(X - E(X))^2] = \int_{-\infty}^{\infty} (x - E(X))^2 \cdot f(x) \, dx

直观理解

  • 期望:可以看作是“中心值”,即随机变量在其概率分布下的加权平均。
  • 方差:描述随机变量的“离散程度”,即变量值偏离期望的程度。

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) = \frac{P(B | A) \cdot P(A)}{P(B)}

其中:

  • 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)。

贝叶斯定理的推导

条件概率的定义可以得出贝叶斯定理。根据条件概率的定义,我们有:

  1. P(A | B) = \frac{P(A \cap B)}{P(B)}
  2. P(B | A) = \frac{P(A \cap B)}{P(A)}

将上面两个式子中关于 P(A \cap B) 的等式进行相等处理,得到:

P(A | B) \cdot P(B) = P(B | A) \cdot P(A)

两边同时除以 P(B),得出贝叶斯定理的公式:

P(A | B) = \frac{P(B | A) \cdot P(A)}{P(B)}

贝叶斯定理的应用示例

贝叶斯定理广泛应用于医学诊断、天气预测、机器学习、自然语言处理等领域。例如,假设我们想知道在有症状 B 的情况下患病 A 的概率,并且已知:

  • P(A) = 0.01:患病的先验概率。
  • P(B | A) = 0.8:患病时出现症状的概率。
  • P(B) = 0.1:出现症状的总体概率。

通过贝叶斯定理可得:

P(A | B) = \frac{P(B | A) \cdot P(A)}{P(B)} = \frac{0.8 \times 0.01}{0.1} = 0.08

因此,在有症状 B 的条件下,患病的概率为 8%。

为了直观展示贝叶斯定理,我们可以用 Python 实现一个简单的计算,并通过图表展示后验概率如何在不同条件下变化。

在示例中,我们设定:

  • 事件 A:某人患病。
  • 事件 B:检测结果呈阳性。

假设我们有以下参数:

  • P(A):患病的先验概率。
  • P(B | A):患病的情况下测试阳性的概率(测试的灵敏度)。
  • P(B | \neg 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)是统计学中用于验证数据是否支持某一假设的一种方法。它的核心在于提出一个假设(称为 零假设 H_0​)并通过数据进行检验,看是否有足够证据拒绝它,从而支持一个对立的假设(称为 备择假设 H_1​)。

假设检验的步骤

  1. 提出假设:假设检验首先提出两个假设:

    • 零假设(H_0​):通常表示没有效应或差异,例如样本均值等于总体均值。
    • 备择假设(H_1​):表示我们要验证的结论,例如样本均值不同于总体均值。
  2. 选择显著性水平(α):显著性水平是检验犯 I 型错误(即错误地拒绝 H_0​)的概率,通常选择 0.05 或 0.01。

  3. 计算检验统计量:依据所选的检验方法(如 z 检验、t 检验等),计算样本数据的检验统计量。

  4. 确定临界值或 p 值

    • 临界值:基于显著性水平确定的统计量边界,如果检验统计量落入临界区域,则拒绝 H_0​。
    • p 值:数据在零假设成立条件下的极端程度,若 p ≤ α,则拒绝 H_0​。
  5. 做出决策:根据统计量和显著性水平,决定是否拒绝 H_0​。如果拒绝 H_0​,则支持 H_1​;否则,不足以拒绝 H_0​。

假设检验的类型

  1. 单样本检验:检验单一样本是否符合某个总体参数(如均值)。

    • 例:某产品的平均寿命是否达到 1000 小时。
  2. 双样本检验:比较两个样本的参数是否相等。

    • 例:两种药物的效果是否有差异。
  3. 方差分析(ANOVA):用于比较多个样本的均值是否相等。

    • 例:三个班级的平均成绩是否有显著差异。
  4. 卡方检验:用于检验分类数据的独立性或拟合度。

    • 例:调查男女消费者对某品牌的偏好是否独立。

假设检验的示例(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博客


原文地址:https://blog.csdn.net/IT_ORACLE/article/details/143728709

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!