当前位置: 首页 > article >正文

【鼠鼠学AI代码合集#7】概率

机器学习与概率——理解预测的核心

1. 机器学习的本质:基于数据做预测

机器学习的核心目标是基于已有的数据来进行预测和推断。在不同领域,机器学习的应用场景广泛,但背后的逻辑都是基于概率模型来估计某种事件发生的可能性。以下是几个典型应用场景:

  • 临床医学: 根据患者的临床病史预测未来一段时间内心脏病发作的概率。
  • 工业监测: 通过分析飞机发动机的读数,判断其是否正常运行。
  • 推荐系统: 评估用户购买某种商品的概率,进而做个性化推荐。
  • 强化学习: 通过智能体在环境中采取不同行为,来评估某个策略的回报概率。

这些任务的共同点在于都涉及概率的估计,而这就是为什么机器学习通常依赖概率论的工具和方法。

2. 概率在机器学习中的作用

概率是描述不确定性的一种语言。通过概率论,我们可以量化模型在给定数据下的预测可信度。理解概率的基础知识是构建有效机器学习模型的必要前提。

基础概率示例
  1. 图像分类问题:识别猫和狗
    当我们处理图像识别任务时,如区分猫和狗,模型需要根据图像的特征估计每个类别的概率。图像的分辨率会直接影响分类难度:

    • 高分辨率(如160×160像素)时,人和机器都容易区分。
    • 低分辨率(如10×10像素)时,模型的预测会充满不确定性。

    这时可以使用概率来表达模型的信心。举例来说:

    • 如果模型非常肯定图像是一只猫,可以设定 P(y=“猫”) = 1
    • 如果模型完全没有信息支持某个类别,可以均匀分配概率,即 P(y=“猫”) = P(y=“狗”) = 0.5
    • 如果模型比较倾向于猫,但还不确定,可以设定 0.5 < P(y=“猫”) < 1
  2. 随机事件:天气预测
    在天气预测中,假设给定夏季的监测数据,我们可能会估计北京明天降雨的概率为 50%。这种情况下,降雨本身是一个随机事件,无法用二选一的方式描述。因此,概率更像是一种对未来事件的不确定性评估。

两种不确定性的区别:
  • 图像分类(确定性类别): 图像不是猫就是狗,类别是确定的(只是我们不确定),因此概率用于表示我们对某个类别的置信度。
  • 天气预测(随机事件): 天气是未来的随机事件,不存在明确的确定性,而概率是对事件发生可能性的表达。
3. 为什么学习概率?

概率学是理解机器学习模型的基础。无论是从构建分类模型、预测模型,还是设计智能体的策略,都需要概率知识来量化和处理不确定性。因此,在机器学习的学习过程中,掌握概率论的基础知识至关重要。

4. 机器学习中的实际应用
  • 分类任务: 根据输入特征预测不同类别的概率,如判断邮件是垃圾邮件的概率。
  • 回归任务: 预测连续变量的分布,如房价的概率分布。
  • 强化学习: 评估在某种策略下获得高回报的概率,从而指导智能体的行动。

2基本概率论

1. 基本概念:概率与大数定律

概率是衡量一个事件发生的可能性的数学量化指标。我们可以通过概率分布来描述所有可能结果的概率总和为 1 的分配。概率论中有一个重要的性质,称为大数定律,它揭示了当实验次数足够多时,实际观测到的相对频率会逐渐逼近真实概率。

  • 大数定律: 随着实验次数增加,事件的相对频率会逐渐接近其真实概率。

示例:掷骰子
如果我们掷一个公平的六面骰子,它的六个结果 {1, 2, 3, 4, 5, 6} 发生的概率是相同的,每个结果的概率为 1/6 ≈ 0.167。为了验证这个结论,我们可以通过多次掷骰子来估计每个结果出现的相对频率。根据大数定律,随着掷骰次数的增加,每个点数的相对频率将会收敛于 1/6。

2. 多项分布与抽样

在概率论中,多项分布(Multinomial Distribution) 是用于处理离散事件的分布形式。多项分布描述了在 n 次独立试验中,每个事件发生的次数分配情况。它的参数包括:

  • 试验次数 n(如掷骰子的次数)
  • 事件的概率向量 p(如骰子每个面出现的概率)

抽样(Sampling): 抽样是从概率分布中抽取样本的过程。它可以被看作是生成一个随机序列,目的是了解某个分布的特征。

  • 使用 torch.distributions.multinomial.Multinomial 函数可以实现多项分布的抽样。

示例代码:

import torch
from torch.distributions import multinomial

# 定义一个公平骰子的概率分布
fair_probs = torch.ones([6]) / 6

# 抽取1次样本
single_sample = multinomial.Multinomial(1, fair_probs).sample()
print(single_sample)  # 输出:tensor([0., 0., 1., 0., 0., 0.]),表示第3个事件出现了1次

# 抽取10次样本
multiple_samples = multinomial.Multinomial(10, fair_probs).sample()
print(multiple_samples)  # 例如:tensor([5., 3., 2., 0., 0., 0.]),表示第1个事件出现5次,依次类推
3. 模拟与实验

为了验证多项分布的理论,我们可以进行大量模拟实验。以下是一个具体的实验步骤:

  1. 生成数据: 模拟多次掷骰子(如1000次),记录每个点数出现的频率。
  2. 估计概率: 通过计算每个点数的相对频率,得到每个点数的估计概率。

代码示例:

import torch
from torch.distributions import multinomial

# 定义一个公平骰子的概率分布
fair_probs = torch.ones([6]) / 6
# 1000次投掷骰子
counts = multinomial.Multinomial(1000, fair_probs).sample()
estimated_probabilities = counts / 1000
print(estimated_probabilities)  # 例如:tensor([0.155, 0.182, 0.177, 0.171, 0.160, 0.155])

上面代码中,我们通过1000次掷骰子估计每个面出现的概率。由于数据是从一个公平骰子的分布生成的,因此每个面出现的概率大约接近 0.167。

4. 实验频率的收敛性

为了进一步研究概率的收敛性,我们可以进行多组实验(例如500组,每组10次抽样),并观察相对频率如何随实验次数增加而趋于真实值。

代码实现:

import torch
from torch.distributions import multinomial

# 定义一个公平骰子的概率分布
fair_probs = torch.ones([6]) / 6

# 500组实验,每组10次投掷
counts = multinomial.Multinomial(10, fair_probs).sample((500,))
cum_counts = counts.cumsum(dim=0)  # 计算累计次数
estimates = cum_counts / cum_counts.sum(dim=1, keepdims=True)  # 计算相对频率

# 绘制收敛图
import matplotlib.pyplot as plt
for i in range(6):
    plt.plot(estimates[:, i].numpy(), label=f"P(die={i+1})")
plt.axhline(y=0.167, color='black', linestyle='dashed')  # 真实概率值
plt.xlabel('Groups of experiments')
plt.ylabel('Estimated probability')
plt.legend()
plt.show()

在这里插入图片描述

  • 图中含义: 实线表示6个面每组实验后的估计概率。随着实验次数的增加,各条曲线逐渐收敛到理论值 1/6,表明估计值越来越接近真实概率。
5. 总结与应用

通过模拟实验,我们验证了大数定律的正确性:在随机实验中,随着实验次数的增加,事件的相对频率会越来越接近理论概率。多项分布为我们提供了处理离散概率分布的工具,并可以广泛应用于机器学习的分类、预测、推荐系统等问题中。

  • 应用场景:
    • 通过多项分布预测分类模型中不同类别的概率。
    • 在强化学习中,通过采样来评估不同策略的收益分布。
    • 用于推荐系统中估计用户偏好的概率分布。

理解这些基本概率知识,将为进一步的概率模型(如贝叶斯模型、隐马尔可夫模型)和复杂机器学习模型(如深度学习中的概率推断)打下坚实基础

概率论公理笔记

1. 样本空间(Sample Space)与事件(Event)

在概率论中,我们首先要定义样本空间和事件。

  • 样本空间(S):样本空间是所有可能结果的集合。在一个掷骰子的实验中,样本空间为 {1, 2, 3, 4, 5, 6}

  • 事件(Event):事件是样本空间中结果的一个子集。任何结果集合都可以视为一个事件。

    例如:

    • 单个结果事件: “掷出5” 可以表示为事件 {5}
    • 多个结果事件: “掷出奇数” 可以表示为 {1, 3, 5}

    当实验的结果出现在某个事件集合中时,我们称该事件发生了。例如,如果实际结果是 3,因为 3 属于 {1, 3, 5},我们说“看到奇数”的事件发生了。

2. 概率(Probability)

概率是用来度量事件发生可能性的函数。我们通常将事件 A 的概率表示为 P(A)。概率函数在样本空间中定义,并且映射规则需要满足一系列条件。根据概率论的公理体系(由科尔莫戈罗夫于1933年提出),一个合法的概率函数应当满足以下三个公理。

3. 概率论的三大公理

对于样本空间 S 中的任意事件 A,概率 P(A) 需满足以下三条基本公理:

  1. 非负性(Non-negativity):
    对于任意事件 A,其概率 P(A) 不会是负数,即:

    [
    P(A) \geq 0
    ]

    解释:概率表示某个事件发生的可能性,因此它必须是非负数。

  2. 标准化(Normalization):
    整个样本空间的概率为 1,即:

    [
    P(S) = 1
    ]

    解释:样本空间 S 包含所有可能发生的结果,因此样本空间的总概率为 1,表示某个结果一定会发生。

  3. 可列可加性(Countable Additivity):
    如果我们有一组互斥事件 A_1, A_2, A_3, ...(即任意两个事件 A_iA_j 都不会同时发生),那么这些事件中至少一个事件发生的概率等于它们各自发生概率的总和:

    [
    P\left(\bigcup_{i=1}^{\infty} A_i\right) = \sum_{i=1}^{\infty} P(A_i)
    ]

    解释:互斥事件的概率可以简单相加,因为这些事件不会重叠。

举例:
如果 A 表示“掷出1或2”,B 表示“掷出3或4”,并且 AB 是互斥事件(因为掷骰子一次只能得到一个结果),那么 P(A∪B) = P(A) + P(B)

4. 推论与性质

利用上述公理,可以推导出一些常用的概率性质:

  • 空集(∅)的概率为 0:
    空集表示不可能发生的事件,因此它的概率为 0。
    [
    P(\emptyset) = 0
    ]

  • 事件的补集:
    对于事件 A,它的补集 A^c(表示事件 A 不发生的情形)的概率为:
    [
    P(A^c) = 1 - P(A)
    ]

    解释:事件 A 发生和 A 不发生(补集)是两种互斥的情况,总概率为 1。

  • 有限互斥事件的可加性:
    如果 AB 是互斥事件(即 A ∩ B = ∅),那么:
    [
    P(A ∪ B) = P(A) + P(B)
    ]

    示例:
    如果 A 表示“掷出奇数” {1, 3, 5}B 表示“掷出偶数” {2, 4, 6}AB 是互斥事件,因此:
    [
    P(A ∪ B) = P(A) + P(B) = 1
    ]

5. 互斥事件与独立事件的区别

在概率论中,“互斥事件”和“独立事件”是两个不同的概念:

  • 互斥事件(Mutually Exclusive Events): 如果 AB 是互斥的(即 A ∩ B = ∅),则它们不会同时发生。
    例如:在一次掷骰子中,事件 A = “掷出1” 和 B = “掷出2” 是互斥的。

  • 独立事件(Independent Events): 如果事件 AB 是独立的,则 A 是否发生对 B 是否发生没有影响。
    例如:连续掷两次骰子,第一个骰子掷出的结果与第二个骰子掷出的结果相互独立。

    数学上,独立事件满足:
    [
    P(A ∩ B) = P(A) \times P(B)
    ]

6. 概率公理体系的意义

科尔莫戈罗夫的概率公理体系为概率论奠定了严谨的数学基础。通过这些公理,我们可以严格地证明各种概率性质,而不需要依赖直观的随机性解释。这种方法使得概率论在各种复杂的应用场景中(如金融建模、统计推断、机器学习)具有广泛的适用性。

总结:

  • 概率公理是描述事件发生可能性的一套数学规则。
  • 通过这些公理,我们能够为概率问题建立严密的逻辑推理框架。
  • 在复杂的随机系统中,如多元随机变量、马尔可夫链等,概率公理仍然适用,是所有概率推理的基石。

理解这些基本公理,将为更高级的概率推断(如条件概率、贝叶斯推理)和模型设计(如隐马尔可夫模型、马尔可夫决策过程)奠定坚实的理论基础。


http://www.kler.cn/news/335097.html

相关文章:

  • Ubuntu换源
  • [Leetcode LCR188.][Medium]-买卖芯片的最佳时机-dp/状态压缩
  • 文件后缀名不见了怎么办?
  • 【微服务】服务调用 - OpenFeign(day6)
  • linux启用 IPv4 转发
  • 物理学基础精解【56】
  • 每日一练:最长湍流子数组
  • Lustre v6 介绍
  • 力扣10.6
  • AI赋能,旅游新纪元,看旅游大厂携程的AI实践
  • D28【python 接口自动化学习】- python基础之输入输出与文件操作
  • OracleJDBC 连接地址URL写法
  • RxSwift系列(二)操作符
  • C#中的事件、代理与任务:深入剖析发布者 - 订阅者模式中的关键元素
  • Leetcode 1498. 满足条件的子序列数目
  • 13:URL输入到页面渲染过程
  • LeetCode Hot100 | Day1 | 二叉树:二叉树的直径
  • Nginx技术深度解析与实战应用
  • 通信工程学习:什么是RARP反向地址解析协议
  • 【笔记】信度检验