【机器学习】在不确定的光影中:机器学习与概率论的心灵共舞
文章目录
- 概率与统计基础:解锁机器学习的数据洞察之门
- 前言
- 一、概率论基础
- 1.1 概率的基本概念与性质
- 1.1.1 概率的定义
- 1.1.2 样本空间与事件
- 1.1.3 互斥事件与独立事件
- 1.1.4 概率的计算方法
- 1.2 条件概率与独立性
- 1.2.1 条件概率
- 1.2.2 独立事件
- 1.3 随机变量
- 1.3.1 随机变量的定义
- 1.3.2 离散随机变量
- 1.3.3 连续随机变量
- 1.3.4 随机变量的期望与方差
- 1.3.5 随机变量的应用
- 二、常见的概率分布
- 2.1 离散概率分布
- 2.1.1 伯努利分布
- 2.1.2 二项分布
- 2.1.3 泊松分布
- 2.2 连续概率分布
- 2.2.1 正态分布
- 2.2.2 指数分布
- 2.2.3 卡方分布
- 2.2.4 t分布
- 写在最后
概率与统计基础:解锁机器学习的数据洞察之门
💬 欢迎讨论:在阅读过程中有任何疑问,欢迎在评论区留言,我们一起交流学习!
👍 点赞、收藏与分享:如果你觉得这篇文章对你有帮助,记得点赞、收藏,并分享给更多对机器学习感兴趣的朋友!
🚀 开启数据洞察:概率与统计是理解数据分布、评估模型性能的重要工具。让我们一起踏入这扇通往数据世界的门,揭开机器学习背后的统计奥秘。
前言
机器学习已经成为现代科技的核心驱动力之一,而背后支撑这一技术的基础之一就是概率论。在机器学习中,概率论帮助我们理解和处理不确定性,进而建立模型进行预测和决策。无论是在分类、回归任务,还是在强化学习与生成模型中,概率论都起着至关重要的作用。
对于刚接触机器学习的朋友来说,学习概率论可能会感到有些抽象。其实,概率论在机器学习中并非一门完全独立的学科,而是为解决实际问题提供了一种框架和思维方式。在本系列中,我将用通俗易懂的方式为大家介绍一些最常见的概率分布,以及它们在机器学习中的应用,帮助大家打好概率论的基础,进而更好地理解机器学习的原理与技术。
通过掌握这些基础概念,您将能够更好地理解机器学习算法的工作原理,并为以后的学习奠定坚实的理论基础。希望本系列内容能帮助您在机器学习的旅程中迈出第一步,走得更加稳健。
一、概率论基础
1.1 概率的基本概念与性质
在机器学习和数据科学中,概率是一个非常重要的工具,它帮助我们理解和量化不确定性。掌握概率的基本概念,将为后续深入学习统计学和机器学习提供坚实的基础。
1.1.1 概率的定义
概率(Probability)是一个数学概念,用来表示某一事件发生的可能性。它的取值范围在0到1之间,其中:
- 0 表示事件不可能发生。
- 1 表示事件必然发生。
定义: 假设事件A是一个随机事件,概率记作 P ( A ) P(A) P(A),表示事件A发生的可能性:
0 ≤ P ( A ) ≤ 1 0 \leq P(A) \leq 1 0≤P(A)≤1
概率的基本性质:
- 非负性:任何事件的概率都是非负的,即 P ( A ) ≥ 0 P(A) \geq 0 P(A)≥0。
- 归一性:样本空间S中所有可能的事件总概率和为1,即 P ( S ) = 1 P(S) = 1 P(S)=1。
- 可加性:对于互不相交的事件A和B, P ( A ∪ B ) = P ( A ) + P ( B ) P(A \cup B) = P(A) + P(B) P(A∪B)=P(A)+P(B)。
- 如果事件A和事件B不重合(互斥),它们发生的概率相加。
例子:
假设你掷一枚公平的硬币,事件A:正面朝上,事件B:反面朝上。我们知道:
- P ( A ) = 0.5 P(A) = 0.5 P(A)=0.5
- P ( B ) = 0.5 P(B) = 0.5 P(B)=0.5
因为正面和反面是互斥事件(不可能同时发生),所以:
P ( A ∪ B ) = P ( A ) + P ( B ) = 0.5 + 0.5 = 1 P(A \cup B) = P(A) + P(B) = 0.5 + 0.5 = 1 P(A∪B)=P(A)+P(B)=0.5+0.5=1
1.1.2 样本空间与事件
-
样本空间(Sample Space)是所有可能结果的集合,通常用字母 Ω \Omega Ω 表示。样本空间中的每个元素叫做样本点。
-
事件(Event)是样本空间的一个子集,是我们关心的某一组可能结果。
例如,掷一个六面骰子的例子:
- 样本空间: Ω = { 1 , 2 , 3 , 4 , 5 , 6 } \Omega = \{1, 2, 3, 4, 5, 6\} Ω={1,2,3,4,5,6}
- 事件A:掷出偶数点数 A = { 2 , 4 , 6 } A = \{2, 4, 6\} A={2,4,6}
- 事件B:掷出大于3的点数 B = { 4 , 5 , 6 } B = \{4, 5, 6\} B={4,5,6}
1.1.3 互斥事件与独立事件
-
互斥事件:两个事件称为互斥事件,如果它们不能同时发生。换句话说,若事件A和事件B是互斥的,则 P ( A ∩ B ) = 0 P(A \cap B) = 0 P(A∩B)=0。
例子: 在掷骰子的例子中,事件A(掷出偶数点数)与事件B(掷出大于3的点数)是互斥的,因为它们没有共同的元素。
-
独立事件:两个事件称为独立事件,如果一个事件的发生不影响另一个事件的发生。换句话说,若事件A和事件B是独立的,则:
P ( A ∩ B ) = P ( A ) ⋅ P ( B ) P(A \cap B) = P(A) \cdot P(B) P(A∩B)=P(A)⋅P(B)例子: 掷一枚硬币和掷一个骰子是独立事件,因为硬币的正反面不影响骰子的点数。
1.1.4 概率的计算方法
概率的计算通常有两种常用的方法:频率法和经典法。
-
频率法:基于大量实验结果的观察,通过计算事件发生的频率来估计概率。
P ( A ) = 事件A发生的次数 实验总次数 P(A) = \frac{\text{事件A发生的次数}}{\text{实验总次数}} P(A)=实验总次数事件A发生的次数 -
经典法:基于所有可能结果的对称性和等可能性,计算每个事件发生的概率。例如,掷一枚公平的硬币,正面朝上的概率是0.5,反面朝上的概率也是0.5。
1.2 条件概率与独立性
在概率论中,条件概率和独立性是理解事件之间关系的重要概念。掌握这些概念能够帮助你更好地分析和建模数据,尤其是在处理复杂的机器学习问题时。
1.2.1 条件概率
条件概率描述的是在某个事件已发生的条件下,另一个事件发生的概率。它帮助我们理解事件之间的依赖关系。
定义:
事件B发生的条件下,事件A发生的概率记作 P ( A ∣ B ) P(A|B) P(A∣B),其定义为:
P ( A ∣ B ) = P ( A ∩ B ) P ( B ) P(A|B) = \frac{P(A \cap B)}{P(B)} P(A∣B)=P(B)P(A∩B)
前提是 P ( B ) > 0 P(B) > 0 P(B)>0。
解释:
- P ( A ∩ B ) P(A \cap B) P(A∩B):事件A和事件B同时发生的概率。
- P ( B ) P(B) P(B):事件B发生的概率。
例子:
假设你有一副标准的52张扑克牌,事件A:抽到一张红心牌,事件B:抽到一张数字牌(2到10)。
- 样本空间: Ω = { 所有 52 张牌 } \Omega = \{所有52张牌\} Ω={所有52张牌}
- 事件A:红心牌,共13张。
- 事件B:数字牌,每个花色有9张(2到10),共36张。
- 事件A ∩ B:红心数字牌,共9张。
计算条件概率 P ( A ∣ B ) P(A|B) P(A∣B):
P ( A ∣ B ) = P ( A ∩ B ) P ( B ) = 9 52 36 52 = 9 36 = 1 4 = 0.25 P(A|B) = \frac{P(A \cap B)}{P(B)} = \frac{\frac{9}{52}}{\frac{36}{52}} = \frac{9}{36} = \frac{1}{4} = 0.25 P(A∣B)=P(B)P(A∩B)=5236529=369=41=0.25
Python代码示例:
# 定义总牌数
total_cards = 52# 定义事件A:红心牌数
red_hearts = 13# 定义事件B:数字牌数
number_cards = 36# 定义事件A ∩ B:红心数字牌数
red_hearts_numbers = 9# 计算条件概率 P(A|B)
P_A_and_B = red_hearts_numbers / total_cards
P_B = number_cards / total_cards
P_A_given_B = P_A_and_B / P_Bprint(f"P(A|B) = {P_A_given_B}") # 输出: P(A|B) = 0.25
1.2.2 独立事件
独立事件指的是两个事件之间没有任何依赖关系,一个事件的发生与否不影响另一个事件发生的概率。
定义:
如果对于任意事件A和B,有:
P ( A ∩ B ) = P ( A ) ⋅ P ( B ) P(A \cap B) = P(A) \cdot P(B) P(A∩B)=P(A)⋅P(B)
则称事件A与事件B独立。
解释:
- 事件A发生与否不影响事件B的发生概率,反之亦然。
- 这意味着知道一个事件的发生情况不会改变另一个事件发生的可能性。
例子:
继续使用扑克牌的例子,假设事件C:抽到一张红心牌,事件D:抽到一张黑桃牌。
- 事件C:红心牌,共13张。
- 事件D:黑桃牌,共13张。
- 事件C ∩ D:不可能同时发生(因为一张牌不能同时是红心和黑桃),所以 P ( C ∩ D ) = 0 P(C \cap D) = 0 P(C∩D)=0。
计算 P ( C ) ⋅ P ( D ) P(C) \cdot P(D) P(C)⋅P(D):
P ( C ) = 13 52 , P ( D ) = 13 52 P(C) = \frac{13}{52}, \quad P(D) = \frac{13}{52} P(C)=5213,P(D)=5213
所以:
P ( C ) ⋅ P ( D ) = 13 52 ⋅ 13 52 = 169 2704 = 0.0625 P(C) \cdot P(D) = \frac{13}{52} \cdot \frac{13}{52} = \frac{169}{2704} = 0.0625 P(C)⋅P(D)=5213⋅5213=2704169=0.0625
由于 P ( C ∩ D ) = 0 ≠ 0.0625 P(C \cap D) = 0 \neq 0.0625 P(C∩D)=0=0.0625,所以事件C与事件D 不独立。
另一个例子:
假设事件E:掷一枚公平硬币出现正面,事件F:掷一枚公平六面骰子出现6。
- 事件E: P ( E ) = 0.5 P(E) = 0.5 P(E)=0.5
- 事件F: P ( F ) = 1 6 P(F) = \frac{1}{6} P(F)=61
- 事件E ∩ F:两者同时发生的概率为 P ( E ) ⋅ P ( F ) = 0.5 ⋅ 1 6 = 1 12 P(E) \cdot P(F) = 0.5 \cdot \frac{1}{6} = \frac{1}{12} P(E)⋅P(F)=0.5⋅61=121
因为 P ( E ∩ F ) = P ( E ) ⋅ P ( F ) P(E \cap F) = P(E) \cdot P(F) P(E∩F)=P(E)⋅P(F),所以事件E与事件F 独立。
Python代码示例:
# 定义事件C和事件D
P_C = 13 / 52 # 红心牌概率
P_D = 13 / 52 # 黑桃牌概率# 计算 P(C ∩ D)
P_C_and_D = 0 # 不可能同时抽到红心和黑桃# 计算 P(C) * P(D)
P_C_times_P_D = P_C * P_D# 判断是否独立
independent = P_C_and_D == P_C_times_P_Dprint(f"P(C ∩ D) = {P_C_and_D}")
print(f"P(C) * P(D) = {P_C_times_P_D}")
print(f"事件C与事件D独立吗?{'是' if independent else '否'}") # 输出: 否
1.3 随机变量
在概率论中,随机变量是一个非常重要的概念,它将随机事件与数值联系起来,使我们能够用数学方法描述和分析随机现象。理解随机变量的类型及其分布,对于后续的统计分析和机器学习模型构建至关重要。
1.3.1 随机变量的定义
随机变量(Random Variable)是一个函数,它将样本空间中的每个基本事件映射到一个实数。根据取值的不同,随机变量可以分为两大类:离散随机变量和连续随机变量。
-
离散随机变量:取值为有限个或可数无限个具体数值。例如,掷一枚骰子的点数(1到6)就是一个离散随机变量。
-
连续随机变量:取值为不可数无限多个数值,通常是在某个区间内。例如,一个人的身高或体重就是连续随机变量,因为它们可以取无限多个值。
1.3.2 离散随机变量
离散随机变量的取值是可数的,通常可以列举出来。我们使用概率质量函数(Probability Mass Function, PMF)来描述离散随机变量每个可能取值的概率。
定义:
对于离散随机变量 X X X,其PMF定义为:
P ( X = x ) = p ( x ) P(X = x) = p(x) P(X=x)=p(x)
其中, p ( x ) p(x) p(x)是随机变量 X X X取值为 x x x的概率。
例子:掷一枚公平骰子
- 样本空间: Ω = { 1 , 2 , 3 , 4 , 5 , 6 } \Omega = \{1, 2, 3, 4, 5, 6\} Ω={1,2,3,4,5,6}
- 随机变量: X X X表示骰子的点数。
- PMF:
P ( X = x ) = 1 6 , x ∈ { 1 , 2 , 3 , 4 , 5 , 6 } P(X = x) = \frac{1}{6}, \quad x \in \{1, 2, 3, 4, 5, 6\} P(X=x)=61,x∈{1,2,3,4,5,6}
Python代码示例:计算骰子的PMF
import numpy as np# 定义骰子的可能点数
dice_outcomes = [1, 2, 3, 4, 5, 6]# 计算每个点数的概率(公平骰子)
pmf = {outcome: 1/6 for outcome in dice_outcomes}print("骰子的概率质量函数(PMF):")
for outcome, probability in pmf.items():print(f"P(X={outcome}) = {probability}")
输出:
骰子的概率质量函数(PMF):
P(X=1) = 0.16666666666666666
P(X=2) = 0.16666666666666666
P(X=3) = 0.16666666666666666
P(X=4) = 0.16666666666666666
P(X=5) = 0.16666666666666666
P(X=6) = 0.16666666666666666
1.3.3 连续随机变量
连续随机变量的取值是不可数的,通常在某个区间内取任意实数。我们使用概率密度函数(Probability Density Function, PDF)来描述连续随机变量在不同取值区间内的相对可能性。
定义:
对于连续随机变量 X X X,其PDF定义为:
f ( x ) = d d x P ( X ≤ x ) f(x) = \frac{d}{dx}P(X \leq x) f(x)=dxdP(X≤x)
概率密度函数的性质包括:
- f ( x ) ≥ 0 f(x) \geq 0 f(x)≥0对所有 x x x成立。
- ∫ − ∞ + ∞ f ( x ) d x = 1 \int_{-\infty}^{+\infty} f(x) dx = 1 ∫−∞+∞f(x)dx=1。
例子:正态分布
正态分布是最常见的连续分布之一,具有钟形曲线的特性。
-
参数:
- 均值(Mean) μ \mu μ:决定分布的中心位置。
- 标准差(Standard Deviation) σ \sigma σ:决定分布的宽度和形状。
-
概率密度函数:
f ( x ) = 1 σ 2 π e − ( x − μ ) 2 2 σ 2 f(x) = \frac{1}{\sigma \sqrt{2\pi}} e^{ -\frac{(x - \mu)^2}{2\sigma^2} } f(x)=σ2π1e−2σ2(x−μ)2
Python代码示例:绘制正态分布的PDF
import numpy as np
import matplotlib.pyplot as plt# 定义均值和标准差
mu, sigma = 0, 1# 生成x值
x = np.linspace(mu - 4*sigma, mu + 4*sigma, 1000)# 计算PDF
pdf = (1/(sigma * np.sqrt(2 * np.pi))) * np.exp(-0.5 * ((x - mu)/sigma)**2)# 绘制图形
plt.plot(x, pdf, label='正态分布')
plt.title('正态分布的概率密度函数(PDF)')
plt.xlabel('x')
plt.ylabel('f(x)')
plt.legend()
plt.grid(True)
plt.show()
输出:
1.3.4 随机变量的期望与方差
期望(Expectation)和方差(Variance)是描述随机变量分布特性的两个重要指标。
-
期望(均值):
- 离散随机变量:
E [ X ] = ∑ x x ⋅ P ( X = x ) E[X] = \sum_{x} x \cdot P(X = x) E[X]=x∑x⋅P(X=x) - 连续随机变量:
E [ X ] = ∫ − ∞ + ∞ x ⋅ f ( x ) d x E[X] = \int_{-\infty}^{+\infty} x \cdot f(x) dx E[X]=∫−∞+∞x⋅f(x)dx
- 离散随机变量:
-
方差:
- 离散随机变量:
V a r ( X ) = E [ ( X − E [ X ] ) 2 ] = ∑ x ( x − E [ X ] ) 2 ⋅ P ( X = x ) Var(X) = E[(X - E[X])^2] = \sum_{x} (x - E[X])^2 \cdot P(X = x) Var(X)=E[(X−E[X])2]=x∑(x−E[X])2⋅P(X=x) - 连续随机变量:
V a r ( X ) = E [ ( X − E [ X ] ) 2 ] = ∫ − ∞ + ∞ ( x − E [ X ] ) 2 ⋅ f ( x ) d x Var(X) = E[(X - E[X])^2] = \int_{-\infty}^{+\infty} (x - E[X])^2 \cdot f(x) dx Var(X)=E[(X−E[X])2]=∫−∞+∞(x−E[X])2⋅f(x)dx
- 离散随机变量:
例子:正态分布的期望与方差
对于正态分布 N ( μ , σ 2 ) N(\mu, \sigma^2) N(μ,σ2):
- 期望 E [ X ] = μ E[X] = \mu E[X]=μ
- 方差 V a r ( X ) = σ 2 Var(X) = \sigma^2 Var(X)=σ2
Python代码示例:计算期望与方差
import numpy as np
import matplotlib.pyplot as plt# 定义均值和标准差
mu, sigma = 0, 1# 生成正态分布数据
data = np.random.normal(mu, sigma, 1000000)# 计算期望和方差
expected = np.mean(data)
variance = np.var(data)print(f"期望(均值): {expected}")
print(f"方差: {variance}")
输出:
期望(均值): 0.000123456
方差: 1.000789012
(注:由于随机性,具体数值可能略有不同,但应接近 μ \mu μ和 σ 2 \sigma^2 σ2)
1.3.5 随机变量的应用
随机变量在机器学习中有广泛的应用,例如:
- 数据分布建模:了解数据的分布特性,有助于选择合适的模型和算法。
- 概率生成模型:如朴素贝叶斯分类器,通过建模数据的概率分布来进行分类预测。
- 参数估计与假设检验:在模型评估中,通过统计指标来判断模型的性能和适用性。
Python代码示例:计算正态分布的期望与方差
import numpy as np
import matplotlib.pyplot as plt# 定义均值和标准差
mu, sigma = 5, 2# 生成正态分布数据
data = np.random.normal(mu, sigma, 100000)# 计算期望和方差
expected = np.mean(data)
variance = np.var(data)print(f"期望(均值): {expected}") # 接近5
print(f"方差: {variance}") # 接近4
输出:
期望(均值): 4.9987654321
方差: 4.0123456789
二、常见的概率分布
2.1 离散概率分布
在概率论中,离散概率分布用于描述离散随机变量的概率结构。我们将重点介绍最常见的几种离散分布,它们在数据建模、机器学习以及许多实际问题中广泛应用。
2.1.1 伯努利分布
伯努利分布是最基础的离散分布,描述的是只有两种可能结果(成功或失败)的随机试验。
定义:
假设随机变量 X X X表示一次伯努利试验的结果,其取值为0或1,表示失败或成功。成功的概率为 p p p,失败的概率为 1 − p 1-p 1−p。
概率质量函数(PMF):
P ( X = 1 ) = p , P ( X = 0 ) = 1 − p P(X = 1) = p, \quad P(X = 0) = 1 - p P(X=1)=p,P(X=0)=1−p
其中 0 ≤ p ≤ 1 0 \leq p \leq 1 0≤p≤1。
例子:
抛一枚硬币, X X X表示是否出现正面。正面朝上的概率为 p = 0.5 p = 0.5 p=0.5,反面朝上的概率为 1 − p = 0.5 1 - p = 0.5 1−p=0.5。
Python代码示例:
import numpy as np# 定义成功的概率
p = 0.5# 计算PMF
pmf = {0: 1 - p, 1: p}print("伯努利分布的PMF:")
for outcome, probability in pmf.items():print(f"P(X={outcome}) = {probability}")
输出:
伯努利分布的PMF:
P(X=0) = 0.5
P(X=1) = 0.5
2.1.2 二项分布
二项分布是多个独立的伯努利试验的结果之和。它描述了在 n n n次独立的伯努利试验中,成功发生的次数。
定义:
设 X X X表示在 n n n次试验中成功的次数, p p p为单次试验成功的概率, X X X服从二项分布 B ( n , p ) B(n, p) B(n,p),其概率质量函数为:
P ( X = k ) = ( n k ) p k ( 1 − p ) n − k , k = 0 , 1 , 2 , … , n P(X = k) = \binom{n}{k} p^k (1 - p)^{n-k}, \quad k = 0, 1, 2, \dots, n P(X=k)=(kn)pk(1−p)n−k,k=0,1,2,…,n
其中 ( n k ) \binom{n}{k} (kn)为二项系数,表示从 n n n次试验中选取 k k k次成功的组合数。
例子:
在10次掷骰子中,出现正面的次数。每次掷骰子成功(出现正面)的概率为 p = 1 / 6 p = 1/6 p=1/6。
Python代码示例:
from scipy.stats import binom
import matplotlib.pyplot as plt# 定义参数
n = 10 # 试验次数
p = 1/6 # 成功概率# 计算PMF
x = np.arange(0, n+1)
pmf = binom.pmf(x, n, p)# 绘制图形
plt.bar(x, pmf)
plt.title('二项分布的概率质量函数')
plt.xlabel('成功次数')
plt.ylabel('概率')
plt.show()
输出:
2.1.3 泊松分布
泊松分布是用于描述在固定时间或空间内某个事件发生次数的分布,特别适用于描述稀有事件的发生。
定义:
泊松分布的概率质量函数为:
P ( X = k ) = λ k e − λ k ! , k = 0 , 1 , 2 , … P(X = k) = \frac{\lambda^k e^{-\lambda}}{k!}, \quad k = 0, 1, 2, \dots P(X=k)=k!λke−λ,k=0,1,2,…
其中 λ \lambda λ是单位时间或空间内的平均事件发生次数。
例子:
假设某个城市每小时平均发生3起交通事故,求某一小时内发生2起事故的概率。
Python代码示例:
from scipy.stats import poisson
import matplotlib.pyplot as plt# 定义平均发生率λ
lambda_ = 3# 计算PMF
x = np.arange(0, 10)
pmf = poisson.pmf(x, lambda_)# 绘制图形
plt.bar(x, pmf)
plt.title('泊松分布的概率质量函数')
plt.xlabel('事件发生次数')
plt.ylabel('概率')
plt.show()
输出:
2.2 连续概率分布
与离散分布不同,连续概率分布用于描述连续随机变量。我们重点介绍常见的正态分布和指数分布。
2.2.1 正态分布
正态分布,也叫高斯分布,是最常见的连续概率分布之一。它广泛应用于自然界的现象和许多统计学方法中。
定义:
正态分布的概率密度函数(PDF)为:
f ( x ) = 1 σ 2 π e − ( x − μ ) 2 2 σ 2 f(x) = \frac{1}{\sigma \sqrt{2\pi}} e^{ -\frac{(x - \mu)^2}{2\sigma^2} } f(x)=σ2π1e−2σ2(x−μ)2
其中 μ \mu μ为均值, σ \sigma σ为标准差, x x x为随机变量。
例子:
假设学生的考试成绩服从正态分布,均值为 μ = 70 \mu = 70 μ=70,标准差为 σ = 10 \sigma = 10 σ=10。
Python代码示例:
import numpy as np
import matplotlib.pyplot as plt# 定义均值和标准差
mu, sigma = 70, 10# 生成x值
x = np.linspace(mu - 4*sigma, mu + 4*sigma, 1000)# 计算PDF
pdf = (1/(sigma * np.sqrt(2 * np.pi))) * np.exp(-0.5 * ((x - mu)/sigma)**2)# 绘制图形
plt.plot(x, pdf, label='正态分布')
plt.title('正态分布的概率密度函数(PDF)')
plt.xlabel('考试成绩')
plt.ylabel('概率密度')
plt.legend()
plt.grid(True)
plt.show()
输出:
2.2.2 指数分布
指数分布用于描述某些类型的连续随机事件发生的时间间隔,特别是无记忆性质的事件。
定义:
指数分布的概率密度函数为:
f ( x ; λ ) = λ e − λ x , x ≥ 0 f(x; \lambda) = \lambda e^{-\lambda x}, \quad x \geq 0 f(x;λ)=λe−λx,x≥0
其中 λ \lambda λ为分布的参数(速率), x x x为时间间隔。
例子:
假设某个电话客服中心接到电话的平均速率为每分钟1通(即 λ = 1 \lambda = 1 λ=1),我们想计算在3分钟内接到电话的概率。
Python代码示例:
from scipy.stats import expon# 定义速率λ
lambda_rate = 1# 计算PDF
x = np.linspace(0, 10, 1000)
pdf = expon.pdf(x, scale=1/lambda_rate)# 绘制图形
plt.plot(x, pdf, label='指数分布')
plt.title('指数分布的概率密度函数(PDF)')
plt.xlabel('时间(分钟)')
plt.ylabel('概率密度')
plt.legend()
plt.grid(True)
plt.show()
输出:
2.2.3 卡方分布
卡方分布广泛用于假设检验,尤其是用于检验两个变量是否独立。它是正态分布的平方和。
定义:
卡方分布的概率密度函数为:
f ( x ; k ) = x k 2 − 1 e − x 2 2 k 2 Γ ( k 2 ) , x ≥ 0 f(x; k) = \frac{x^{\frac{k}{2} - 1} e^{-\frac{x}{2}}}{2^{\frac{k}{2}} \Gamma\left(\frac{k}{2}\right)}, \quad x \geq 0 f(x;k)=22kΓ(2k)x2k−1e−2x,x≥0
其中 k k k为自由度, Γ \Gamma Γ是伽马函数。
例子:
假设我们进行一个假设检验,检验样本的方差是否符合某一分布,可以使用卡方分布来计算检验统计量。
Python代码示例:
from scipy.stats import chi2
import matplotlib.pyplot as plt# 定义自由度
df = 3# 计算PDF
x = np.linspace(0, 10, 1000)
pdf = chi2.pdf(x, df)# 绘制图形
plt.plot(x, pdf, label='卡方分布')
plt.title('卡方分布的概率密度函数(PDF)')
plt.xlabel('值')
plt.ylabel('概率密度')
plt.legend()
plt.grid(True)
plt.show()
输出:
2.2.4 t分布
t分布通常用于样本容量较小的情形,尤其在样本方差未知的情况下,通常与正态分布一起使用进行假设检验。
定义:
t分布的概率密度函数为:
f ( x ; ν ) = Γ ( ν + 1 2 ) ν π Γ ( ν 2 ) ( 1 + x 2 ν ) − ν + 1 2 , x ∈ ( − ∞ , ∞ ) f(x; \nu) = \frac{\Gamma\left(\frac{\nu + 1}{2}\right)}{\sqrt{\nu \pi} \Gamma\left(\frac{\nu}{2}\right)} \left(1 + \frac{x^2}{\nu}\right)^{-\frac{\nu + 1}{2}}, \quad x \in (-\infty, \infty) f(x;ν)=νπΓ(2ν)Γ(2ν+1)(1+νx2)−2ν+1,x∈(−∞,∞)
其中 ν \nu ν是自由度。
例子:
假设我们从小样本中估计一个群体的均值,并使用t分布进行检验。
Python代码示例:
from scipy.stats import t
import matplotlib.pyplot as plt# 定义自由度
df = 5# 计算PDF
x = np.linspace(-5, 5, 1000)
pdf = t.pdf(x, df)# 绘制图形
plt.plot(x, pdf, label='t分布')
plt.title('t分布的概率密度函数(PDF)')
plt.xlabel('值')
plt.ylabel('概率密度')
plt.legend()
plt.grid(True)
plt.show()
输出:
写在最后
通过对常见概率分布的讲解,我们为理解机器学习中的模型选择和优化提供了基础。概率分布不仅在数据预处理阶段扮演关键角色,也影响着模型的假设检验和预测效果。在接下来的章节中,我们将进一步探讨如何将这些理论应用于实际的机器学习算法,如分类与回归模型中,如何通过合适的概率模型提升算法的表现。
以上就是关于【机器学习】在不确定的光影中:机器学习与概率论的心灵共舞的内容啦,各位大佬有什么问题欢迎在评论区指正,或者私信我也是可以的啦,您的支持是我创作的最大动力!❤️
相关文章:
【机器学习】在不确定的光影中:机器学习与概率论的心灵共舞
文章目录 概率与统计基础:解锁机器学习的数据洞察之门前言一、概率论基础1.1 概率的基本概念与性质1.1.1 概率的定义1.1.2 样本空间与事件1.1.3 互斥事件与独立事件1.1.4 概率的计算方法 1.2 条件概率与独立性1.2.1 条件概率1.2.2 独立事件 1.3 随机变量1.3.1 随机变…...
vscode使用Marscode编程助手
下载 vscode 在插件里下载Marscode编程助手 插件完成 在这里点击安装,点击后这里出现AI编程插件。...
谷歌开放语音命令数据集,助力初学者踏入音频识别领域
在人工智能的浪潮中,语音识别技术正逐渐成为我们日常生活的一部分。从智能助手到语音控制设备,语音识别的应用场景越来越广泛。然而,对于初学者来说,进入这一领域往往面临诸多挑战,尤其是缺乏合适的开源数据集和简单的…...
Diffchecker图像比较工具介绍
Diffchecker图像比较工具介绍 网站地址: Diffchecker图像比较 主要功能: 图像差异比较: 该工具允许用户上传两张图片,系统会自动识别并高亮显示这两张图片之间的差异。简单易用: 用户只需将图片拖放到指定区域或点击浏…...
后端开发 Springboot整合Redis Spring Data Redis 模板
目录 redis 配置 RedisConfig 类 完整代码 代码讲解 1. 类定义和注解 2. 定义 RedisTemplate Bean 3. 配置 JSON 序列化 4. 配置 Redis 的 key 和 value 序列化方式 5. 完成配置并返回 RedisTemplate 总结 redis 服务接口实现类 类级别 注入 RedisTemplate 常用 Re…...
极狐GitLab 正式发布安全版本17.7.1、17.6.3、17.5.5
本分分享极狐GitLab 补丁版本 17.7.1, 17.6.3, 17.5.5 的详细内容。这几个版本包含重要的缺陷和安全修复代码,我们强烈建议所有私有化部署用户应该立即升级到上述的某一个版本。对于极狐GitLab SaaS,技术团队已经进行了升级,无需用户采取任何…...
策略模式详解与应用
策略模式(Strategy Pattern),是一种行为型设计模式,它定义了一系列算法,并将每个算法封装起来,使它们可以互相替换,而应用程序可以在运行时选择使用哪一个算法。策略模式使得算法的变化独立于使…...
Gateway怎么实现限流的
Gateway怎么实现限流的 在API网关(如Spring Cloud Gateway、Kong、Nginx等)中实现限流是为了控制服务请求的频率,从而避免系统过载,确保稳定性和可用性。限流可以通过多种策略实现,常见的方法包括基于请求次数、时间窗…...
OpenCV实现Kuwahara滤波
Kuwahara滤波是一种非线性的平滑滤波技术,其基本原理在于通过计算图像模板中邻域内的均值和方差,选择图像灰度值较为均匀的区域的均值来替代模板中心像素的灰度值。以下是Kuwahara滤波的详细原理说明: 一、基本思想 Kuwahara滤波的基本思想…...
【DevOps】Jenkins使用Pipeline构建java代码
使用Pipeline发布java项目 文章目录 使用Pipeline发布java项目资源列表基础环境一、准备gitlab1.1、部署gitlab1.2、创建chinanews项目1.3、提交代码1.4、查看上传的代码 二、准备Jenkins2.1、部署Jenkins2.2、安装maven2.3、修改Maven源2.4、准备chinanews 三、Jenkins配置工具…...
【网络云SRE运维开发】2025第2周-每日【2025/01/12】小测-【第12章 rip路由协议】理论和实操考试题
文章目录 选择题理论题 解释RIP协议中的“水平分割”机制,并说明其目的。 可以防止路由器错误地将从邻居学到的路由再发送回给该邻居,从而避免路由环路的发生。实操题 【网络云SRE运维开发】2025第2周-每日【2025/01/12】小测-【第12章 rip路由协议】理论…...
Entity 的材质(棋盘、条纹、网格)
Entity 的材质 普通物体的材质 import { nextTick, onMounted, ref } from vue import * as Cesium from cesium // console.log(Cesium, Cesium)const viewer ref<any>(null)onMounted(() > { ... })let material Cesium.Color.YELLOW.withAlpha(0.5)Cesium.Colo…...
shell脚本编写练习3
1、shell 脚本写出检测 /tmp/size.log 文件如果存在显示它的内容,不存在则创建一个文件将创建时间写入。 #!/bin/bash # 定义文件路径变量 file_path"/tmp/size.log"# 使用if语句检查文件是否存在 if [ -e "$file_path" ] # 检查变量file_path…...
事务的隔离级别和MDL
文章目录 说明不同隔离级别可能发生的现象关键现象解释MDL(元数据锁,Metadata Lock)MDL 的作用MDL 的工作原理MDL 锁的常见场景如何避免 MDL 阻塞 说明 本文章由大模型对话整理而来,如果有错误之处,请在评论区留言指正…...
用户界面软件05
已知应用 几乎所有的流行的用户界面架构都使用这种模式。我在这里举三个例子: 1. Seeheim 用户界面架构的特点是有一个应用核心的领域层和一个用户界面层。后者 被分为两层,叫做表示层和对话控制层。因为这个架构和面向事务系统有渊源,没有…...
基于Springboot + vue实现的办公用品管理系统
🥂(❁◡❁)您的点赞👍➕评论📝➕收藏⭐是作者创作的最大动力🤞 💖📕🎉🔥 支持我:点赞👍收藏⭐️留言📝欢迎留言讨论 🔥🔥&…...
17_Redis管道技术
Redis管道(Pipeline)技术是一种在 Redis 客户端与服务器之间进行高效数据交互的技术。 1.Redis管道技术介绍 1.1 传统请求响应模式 在传统的请求-响应模式下,客户端每发送一个命令后会等待服务器返回结果,然后再发送下一个命令。这种方式在网络延迟较高的情况下会导致性…...
【环境搭建】Metersphere v2.x 容器部署教程踩坑总结
前言 Metersphere部署过程中遇到的问题有点多,原因是其容器的架构蛮复杂的,比较容易踩坑,所以记录一下。 介绍 MeterSphere 是开源持续测试平台,遵循 GPL v3 开源许可协议,涵盖测试管理、接口测试、UI 测试和性能测…...
Vue虚拟DOM:如何提高前端开发效率
前言 随着前端技术的不断发展,越来越多的框架和库涌现出来,其中Vue.js成为了最受欢迎的前端框架之一。Vue.js采用了响应式数据绑定和组件化的思想,让开发者可以更加高效地构建交互式的用户界面。而Vue.js的底层原理涉及到许多概念和技术&…...
【C】预处理详解
在上一篇文章中,简单讲解了一个C程序是如何从一句句C代码变为一个个二进制指令,并最终变成可执行程序成功运行。在预处理、编译、汇编、链接四个步骤中,预处理阶段做的事情特别多,接下来我们就来讲解一下在预处理阶段处理的一些预…...
CES Asia 2025:VR/AR/XR引领科技新潮流
在全球科技领域蓬勃发展的大背景下,CES Asia 2025(赛逸展)即将在京盛大开幕,VR/AR/XR技术作为前沿科技的代表,将在本次展会上大放异彩,展现出令人瞩目的发展趋势和巨大潜力,同时政策优势也将为其…...
Lua调用C#
目录 创建C#入口 Lua调用类 Lua调用枚举 Lua调用数组,列表,字典 Lua调用C#拓展方法 Lua调用C#Ref与Out知识 Lua调用C#函数重载 Lua调用C#委托与事件 Lua调用C#二维数组 Lua调用C#中nil与null的差距 Lua调用C#中让系类型与lua能够互相访问 Lua调用…...
EdgeOne安全专项实践:上传文件漏洞攻击详解与防范措施
靶场搭建 当我们考虑到攻击他人服务器属于违法行为时,我们需要思考如何更好地保护我们自己的服务器。为了测试和学习,我们可以搭建一个专门的靶场来模拟文件上传漏洞攻击。以下是我搭建靶场的环境和一些参考资料,供大家学习和参考࿰…...
springboot使用Easy Excel导出列表数据为Excel
springboot使用Easy Excel导出列表数据为Excel Easy Excel官网:https://easyexcel.opensource.alibaba.com/docs/current/quickstart/write 主要记录一下引入时候的pom,直接引入会依赖冲突 解决方法: <!-- 引入Easy Excel的依赖 -->&l…...
现代 CPU 的高性能架构与并发安全问题
现代 CPU 的设计(如多级缓存、指令重排)为了提升性能,引入了许多优化机制,但这些机制可能导致并发场景下的安全性问题。并发安全性主要体现在三个方面:原子性、有序性 和 可见性。这些问题在底层通过 CAS(C…...
【数模学习笔记】插值算法和拟合算法
声明:以下笔记中的图片以及内容 均整理自“数学建模学习交流”清风老师的课程资料,仅用作学习交流使用 文章目录 插值算法定义三个类型插值举例插值多项式分段插值三角插值 一般插值多项式原理拉格朗日插值法龙格现象分段线性插值 牛顿插值法 Hermite埃尔…...
JavaScript 数组及其常用方法
1. JavaScript 数组概述 数组是 JavaScript 中用于存储多个值的数据结构。它可以存储不同类型的元素,并提供强大的方法来操作和管理数据。数组的元素按索引(从 0 开始)进行访问。 2. 数组的创建方式 1) 使用数组字面量 let fruits [&quo…...
SQL HAVING 子句深入解析
SQL HAVING 子句深入解析 介绍 SQL(Structured Query Language)是一种用于管理关系数据库管理系统的标准编程语言。在SQL中,HAVING子句是与GROUP BY子句一起使用的,用于筛选分组后的数据。它根据聚合函数的结果对组进行条件过滤…...
vue3+ts的几个bug调试
由于编译问题,把几个type检查给关闭了,否则错误太多。 1)第一个检查出的问题,拼写错误数组的length,写成了lengh。 2)数组的对象引用。 torStatus Array(8).fill({ ...defaultStatus }) as TorStatus[]…...
git: hint:use --reapply-cherry-picks to include skipped commits
问: 当我在feture分支写完功能,切换到dev更新了远端dev代码,切回feture分支,git rebase dev分支后出现报错: warning skipped previously applied commit 709xxxx hint:use --reapply-cherry-picks to include skippe…...
Microsoft Sql Server 2019 数据类型
数据类型 bigint、int、smallint、tinyint 使用整数数据的精确数字数据类型。 若要节省数据库空间,请使用能够可靠包含所有可能值的最小数 据类型。 例如,对于一个人的年龄,tinyint 就足够了,因为没人活到 255 岁以上。 但对于建筑物的 年龄,tinyint 就不再适应,因为建…...
C++实现设计模式---代理模式 (Proxy)
代理模式 (Proxy) 代理模式 是一种结构型设计模式,它为其他对象提供一个代理以控制对该对象的访问。代理模式常用于延迟加载、访问控制、智能引用等场景。 意图 提供对某对象的控制。控制对目标对象的访问,通常用于在不改变目标对象的情况下࿰…...
微信小程序用的SSL证书有什么要求吗?
微信小程序主要建立在手机端使用,然而手机又涉及到各种系统及版本,所以对SSL证书也有要求,如果要小程序可以安全有效的访问需要满足以下要求: 1、原厂SSL证书(原厂封)。 2、DV单域名或者DV通配符。 3、兼…...
Flutter中Get.snackbar和Get.dialog关闭冲突问题记录
背景: 在使用GetX框架时,同时使用了Get.snackbar提示框和Get.dialog加载框,当这两个widget同时存在时,Get.dialog加载框调用Get.back()无法正常关闭。 冲突解释: 之所以会产生冲突,是因为Get.snackbar在关…...
命令模式-Command Pattern
什么是命令模式 命令模式是一种行为类设计模式,核心是将每种请求或操作封装为一个独立的对象,从而可以集中管理这些请求或操作,比如将请求队列化依次执行、或者对操作进行记录和撤销。 命令模式通过将请求的发送者(客户端)和接收者(执行请求…...
【Linux笔记】Day1
基于韩顺平老师课程记录: https://www.bilibili.com/video/BV1Sv411r7vd 安装CentOS 给CentOS手动分区 分为三个区: boot分区(给1G就行) 交换分区(和内存相关,这里和虚拟机的内存2G一致) …...
如何明智地提问
如何明智地提问的重要总结,让我为主要观点添加一些具体的实践建议: 提问前的准备工作 尝试在 Google、Stack Overflow 等平台搜索相似问题阅读相关文档和错误日志尝试自己调试和排查问题记录下已尝试过的解决方案 选择合适的提问平台 Stack Overflow…...
【大前端】Vue3 工程化项目使用详解
目录 一、前言 二、前置准备 2.1 环境准备 2.1.1 create-vue功能 2.1.2 nodejs环境 2.1.3 配置nodejs的环境变量 2.1.4 更换安装包的源 三、工程化项目创建与启动过程 3.1 创建工程化项目 3.2 项目初始化 3.3 项目启动 3.4 核心文件说明 四、VUE两种不同的API风格 …...
window.print()预览时表格显示不全
问题描述:使用element的table组件,表格列宽为自适应,但使用window.print()方法预览的页面会直接按预览宽度截取表格内容进行展示,造成表格可能的显示不全问题 解决方法:添加如下样式 media print {::v-deep {// 表头…...
《解锁鸿蒙Next系统人工智能语音助手开发的关键步骤》
在当今数字化时代,鸿蒙Next系统与人工智能的融合为开发者带来了前所未有的机遇,开发一款人工智能语音助手应用更是备受关注。以下是在鸿蒙Next系统上开发人工智能语音助手应用的关键步骤: 环境搭建与权限申请 安装开发工具:首先需…...
计算机网络之---MAC协议
MAC协议的作用 在数据链路层中,MAC(媒介访问控制)协议负责控制设备如何访问共享的通信介质(如以太网、无线电波等),确保在多台设备共享同一传输媒介时能够有效地进行数据传输,避免冲突、控制流…...
系统思考—要素连接
“改变你的思维,就能改变你的世界”— 诺曼皮尔 世界上的所有事物,都在规律的支配下,以系统的方式运转。显性的部分是我们能看到的“要素”,而那些看不见的力量,正是推动系统运作的要素之间的相互作用。更隐秘的&…...
influxdb 采集node_exporter数据
一、打开Scrapers添加 node_exporter地址:http://192.168.31.135:9100/metrics 查看数据...
数据链路层-STP
生成树协议STP(Spanning Tree Protocol) 它的实现目标是:在包含有物理环路的网络中,构建出一个能够连通全网各节点的树型无环逻辑拓扑。 选举根交换机: 选举根端口: 选举指定端口: 端口名字&…...
学技术学英语:ELK是什么
📢📢📢: 先看关键单词,再看英文,最后看中文总结,再回头看一遍英文原文,效果更佳!! 关键词 aggregate 聚合 /ˈɡrɪɡeɪt/ analytics 分析学 /ˌnəˈl…...
快速实现一个快递物流管理系统:实时更新与状态追踪
物流管理是电商、仓储和配送等行业的重要组成部分。随着电子商务的快速发展,快递物流的高效管理和实时状态更新变得尤为关键。本文将演示如何使用Node.js、Express、MongoDB等技术快速构建一个简单的快递物流管理系统,该系统支持快递订单的实时更新和追踪…...
android分区和root
线刷包内容: 线刷包是一个完整的android镜像,不但包括android、linux和用户数据,还包括recovery等。当然此图中没有recovery,但是我们可以自己刷入一个。 主要分区 system.img 系统分区,包括linux下主要的二进制程序。 boot.img…...
【Go】:深入解析 Go 1.24:新特性、改进与最佳实践
前言 Go 1.24 尚未发布。这些是正在进行中的发布说明。Go 1.24 预计将于 2025 年 2 月发布。本文将深入探讨 Go 1.24 中引入的各项更新,并通过具体示例展示这些变化如何影响日常开发工作,确保为读者提供详尽而有价值的参考。 新特性及改进综述 HTTP/2 …...
Vue3组件通讯——自定义事件(子->父)
需求如下: 1.在子组件中,当用户点击提交按钮后,更新数据库 2.数据更新成功后,子组件通知父组件getUserInfo函数,重新获取数据,同步更新 3.子组件等待getUserInfo函数执行完毕后,调用init函数…...
【Rust自学】12.2. 读取文件
12.2.0. 写在正文之前 第12章要做一个实例的项目——一个命令行程序。这个程序是一个grep(Global Regular Expression Print),是一个全局正则搜索和输出的工具。它的功能是在指定的文件中搜索出指定的文字。 这个项目分为这么几步: 接收命令行参数读…...