第三章:概率论与统计学——应对不确定性
3.1 概率论的重要性
核心思想:人工智能面对的是一个充满不确定性的现实环境。
- 图像识别:某张图片有80%的可能性为猫
- 推荐系统:用户对某个商品表现出兴趣的概率为60%
- 自然语言处理:下一个可能出现的词是“的”(概率30%)或“是”(概率25%)
3.2 概率基础知识
3.2.1 条件概率:贝叶斯理论的核心基础
什么是概率?
直观理解:概率用于衡量某一事件发生的可能性,数值介于0到1之间。
- 0:表示该事件不可能发生
- 1:表示该事件必然发生
- 0.5:表示事件发生的可能性为一半
条件概率的概念
定义:P(A|B) 表示在事件 B 已经发生的前提下,事件 A 发生的概率。
生活中的实例
- P(下雨 | 阴天):阴天时下雨的可能性
- P(生病 | 淋雨):淋雨后生病的概率
实际应用场景
垃圾邮件识别:
P(垃圾邮件 | 包含"免费") = 0.9
解释:若一封邮件中出现“免费”一词,则其为垃圾邮件的概率高达90%。需要注意的是,这并不意味着所有邮件中有90%是垃圾邮件,而是指在包含“免费”的邮件中,90%属于垃圾邮件。
条件概率公式
P(A|B) = P(A和B同时发生) / P(B)
理解方式:在事件 B 发生的所有情况中,A 同时发生的占比即为条件概率 P(A|B)。
垃圾邮件检测案例分析(基于贝叶斯定理)
已知条件如下:
- 30% 的邮件为垃圾邮件
- 70% 的邮件为正常邮件
- 垃圾邮件中有 90% 包含“免费”一词
- 正常邮件中仅有 10% 包含“免费”
问题:如果一封邮件包含“免费”,它是垃圾邮件的概率是多少?
============================================================
垃圾邮件检测示例(贝叶斯定理)
============================================================
先验概率:
P(垃圾邮件) = 30.0%
P(正常邮件) = 70.0%
条件概率:
P(包含'免费'|垃圾邮件) = 90.0%
P(包含'免费'|正常邮件) = 10.0%
全概率:
P(包含'免费') = 0.9×0.3 + 0.1×0.7
= 0.340 = 34.0%
贝叶斯定理:
P(垃圾邮件|包含'免费') = P(包含'免费'|垃圾邮件) × P(垃圾邮件) / P(包含'免费')
= 0.9 × 0.3 / 0.340
= 0.794 = 79.4%
结论:
如果邮件包含'免费',是垃圾邮件的概率: 79.4%
这比先验概率30.0%显著提高,说明“免费”是一个强烈的垃圾邮件信号
3.2.2 贝叶斯定理:从数据中学习
贝叶斯定理是概率论中极为关键的工具,它提供了一种系统的方法,利用观测到的数据来更新我们对某一事件发生可能性的认知。这一过程体现了“从经验中学习”的核心思想。
关键概念解析
先验概率(Prior):
指在未观察具体数据前,基于已有知识或假设对某事件发生的初始判断。
举例来说,若历史数据显示30%的邮件为垃圾邮件,则我们可以设定任意一封新邮件是垃圾邮件的先验概率为30%。
后验概率(Posterior):
是在获得新的证据或数据之后,对原信念进行修正所得到的更新概率。
例如,在收到一封包含“免费”字样的邮件后,结合关键词特征重新评估其为垃圾邮件的概率可能上升至79.4%。
贝叶斯定理的作用:
该定理使我们能够将先验知识与实际观测相结合,动态调整判断。比如,从原本认为“有30%可能是垃圾邮件”,经过分析文本内容后更新为“高达79.4%的可能性是垃圾邮件”。
贝叶斯公式详解
贝叶斯定理的标准表达式如下:
P(A|B) = P(B|A) × P(A) / P(B)
其中各部分含义如下:
- P(A|B):后验概率,表示在事件B已发生的条件下,事件A发生的概率——这是我们希望求解的目标。
- P(B|A):似然函数(Likelihood),描述的是当A成立时,出现B这一观测结果的可能性。
- P(A):先验概率,即在没有看到B之前,我们认为A发生的概率。
- P(B):证据项(Evidence),也称归一化常数,确保所有条件概率之和等于1。
记忆技巧可参考下图所示的形象化模型:
后验 = (似然 × 先验) / 证据
更深入的理解:
- 先验 P(A):反映我们在获取当前数据前的知识基础或主观预期。
- 似然 P(B|A):衡量数据在某种假设下的合理性,即如果A为真,那么观察到B有多“自然”。
- 证据 P(B):作为标准化因子,保证最终计算出的后验概率满足概率公理。
- 后验 P(A|B):融合了先验信息和实证数据后的最新认知状态。
该方法以18世纪英国数学家托马斯·贝叶斯命名,他首次提出了通过新证据不断修正信念的思想框架。
在人工智能中的典型应用
朴素贝叶斯分类器:
广泛应用于文本分类任务,如垃圾邮件识别。其“朴素”之处在于假设各个特征之间相互独立,虽然现实中未必完全成立,但在许多场景下仍表现出色且计算高效。
贝叶斯神经网络:
不同于传统神经网络输出单一预测值,贝叶斯神经网络输出的是一个概率分布,不仅能给出预测结果,还能量化不确定性。模型参数本身被视为随机变量,具有相应的分布形式。
参数估计:
在建模过程中,使用贝叶斯方法可以从数据中推断模型参数,同时融合专家先验知识,实现数据驱动与领域知识的有机结合。
贝叶斯思维的核心流程:
- 先验:基于已有经验形成初步假设;
- 数据:收集并分析实际观测结果;
- 后验:综合前两者得出更新后的判断。
这正是机器学习中“从数据中学习”这一理念的数学体现。
3.3 概率分布
3.3.1 正态分布:误差建模的基础
什么是概率分布?
概率分布用于刻画一个随机变量可能取哪些值,以及每个值出现的可能性大小。它是统计推断和机器学习建模的重要基础。
正态分布简介:
又称高斯分布,是统计学中最重要、最常用的连续型概率分布之一,原因包括:
- 自然界中大量现象近似服从正态分布(如身高、测量误差等);
- 中心极限定理指出:多个独立随机变量之和趋向于正态分布;
- 在AI建模中,通常假设模型的预测误差服从正态分布。
正态分布的主要特征:
- 钟形曲线:中间高、两端逐渐下降,呈对称形态;
- 对称性:关于均值对称分布;
- 两个关键参数:
- μ(mu):决定分布中心位置,即均值;
- σ(sigma):控制分布宽度,即标准差。
为何在回归问题中常用正态分布假设?
以房价预测为例:
真实房价 = 模型预测值 + 随机误差
我们通常设误差 ε ~ N(0, σ),即均值为0、方差为σ的正态分布。这意味着:
- 大多数预测误差较小,集中在零附近;
- 极端偏差出现的概率极低;
- 长期来看,预测无系统性偏移(期望为0);
- σ 反映了预测结果的波动程度或不确定性。
为什么选择正态分布作为误差模型?
数学上的便利性:
- 两个正态分布的和仍是正态分布;
- 最大似然估计存在闭式解,便于优化;
- 利于理论推导和统计检验。
现实中的合理性:
- 实际测量误差往往呈现正态特性;
- 自然界的随机扰动多符合此规律;
- 根据中心极限定理,只要误差由众多微小独立因素叠加而成,其总体分布就近似正态。
此外,最小二乘法之所以被广泛采用,正是因为当误差服从正态分布时,最小化平方损失等价于最大化似然函数——这是其坚实的理论依据。
import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
# 正态分布示例
mu, sigma = 0, 1 # 均值0,标准差1
x = np.linspace(-4, 4, 100)
y = stats.norm.pdf(x, mu, sigma)
plt.figure(figsize=(10, 6))
plt.plot(x, y, label=f'Normal distribution N({mu}, {sigma}?)')
plt.fill_between(x, y, alpha=0.3)
plt.xlabel('value')
plt.ylabel('probability density')
plt.title('Normal distribution')
plt.legend()
plt.grid(True)
plt.show()
# 生成随机样本
samples = np.random.normal(mu, sigma, 1000)
print(f"样本均值: {samples.mean():.3f}")
print(f"样本标准差: {samples.std():.3f}")
3.3.2 二项分布:分类问题的概率建模工具
什么是二项分布?
二项分布用于描述在n次独立重复试验中,每次成功概率为p的情况下,恰好取得k次成功的概率分布。
生活中的应用场景:
- 抛硬币:连续抛掷10次,正面朝上次数为k的概率;
- 投篮命中:共投10次,命中k次的概率;
- 分类准确率:在n个测试样本中,正确分类k个的概率。
主要参数说明:
- n:试验总次数;
- p:单次试验的成功概率;
- k:实际成功次数,取值范围为0到n之间的整数。
在二分类问题中的应用:
在机器学习中,尤其是评估分类器性能时,二项分布可用于建模预测正确的次数分布。例如,若某个分类器在100个样本上的准确率为80%,我们可以用二项分布来分析它真正表现是否显著优于随机猜测。
每个样本只能属于类别0或类别1,即分类结果是二元的。
假设模型预测正确的概率为 p,那么在 n 个独立样本中恰好有 k 个被正确预测的概率遵循二项分布规律。
import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
# 模拟抛硬币实验:二项分布示例
n = 10 # 抛掷次数
p = 0.5 # 单次出现正面的概率
k_values = range(n + 1)
probabilities = [stats.binom.pmf(k, n, p) for k in k_values]
plt.figure(figsize=(10, 6))
plt.bar(k_values, probabilities)
plt.xlabel('number of heads')
plt.ylabel('probability') # 成功次数对应的概率
plt.title(f'Binomial distribution (n={n}, p={p})')
plt.grid(True)
plt.show()
P(A|B) = P(A和B同时发生) / P(B)
3.4 统计推断
3.4.1 最大似然估计(MLE):基于数据的参数估计方法
什么是参数估计?
在机器学习任务中,通常需要从观测数据中推断出模型的关键参数。例如:
- 在线性回归中,需估计权重 w 和偏置 b
- 在概率建模中,需确定分布的具体参数值
最大似然估计(MLE)的核心思想
选择一组参数值,使得当前观测到的数据出现的可能性最大。
直观理解举例
假设你进行了10次硬币抛掷,观察到7次正面朝上。
- 若硬币公平(p=0.5),则出现7次正面的概率较低
- 若正面概率为0.7,则该结果更有可能发生
因此,MLE会选择让“7次正面”这一事件发生的概率达到最大的 p 值作为估计结果。
“似然”与“概率”的区别
- 概率:已知参数,求某事件发生的可能性
- 似然:已知事件结果,反推哪个参数值更可能生成此结果
实际案例:估计硬币正面朝上的概率
def maximum_likelihood_estimation():
"""
最大似然估计示例:估计硬币正面的概率
"""
print("=" * 60)
print("最大似然估计(MLE)示例")
print("=" * 60)
# 实际观测数据:10次抛硬币的结果(1表示正面,0表示反面)
observations = [1, 1, 0, 1, 1, 0, 1, 1, 1, 0]
n = len(observations) # 总试验次数
k = sum(observations) # 正面出现次数
print(f"观测数据: {observations}")
print(f"正面次数: {k}/{n}")
# MLE 的估计公式:p = k / n
# 对于二项分布,使似然函数取得最大值的 p 即为样本频率
p_mle = k / n
print(f"\nMLE估计:")
print(f" 正面概率 p = k/n = {k}/{n} = {p_mle:.2f}")
# 验证不同 p 值下的似然大小
print(f"\n验证:不同p值的似然(概率)")
print(f" (似然越大,说明这个p值越能解释当前数据)")
from scipy import stats
for p in [0.5, 0.6, 0.7, 0.8]:
likelihood = stats.binom.pmf(k, n, p)
print(f" p={p:.1f}: 似然={likelihood:.4f}")
print(f"\n结论:")
print(f" 当 p={p_mle:.2f} 时,似然值最大,故MLE估计结果为 {p_mle:.2f}")
return p_mle
maximum_likelihood_estimation()
P(A|B) = P(B|A) × P(A) / P(B)
MLE的优点
- 直观合理:选择最可能产生观测数据的参数
- 数学形式简洁:易于推导和计算
- 大样本性质良好:当样本量足够大时,MLE通常是无偏且收敛的
MLE的缺点
- 容易过拟合:完全依赖训练数据,未引入任何先验约束
- 小样本下不稳定:当数据量少时,估计结果可能偏差较大
3.4.2 最大后验估计(MAP):融合先验知识的参数估计
什么是MAP?
最大后验估计(Maximum A Posteriori, MAP)是对MLE的扩展,它不仅考虑观测数据,还结合了参数的先验分布信息。
MLE 与 MAP 的对比
| 方法 | 考虑因素 | 典型公式 |
|---|---|---|
| MLE | 仅依赖数据 | p = k / n |
| MAP | 数据 + 先验知识 | p = (k + α) / (n + α + β) |
为什么引入MAP?
考虑一个极端情况:连续抛掷一枚硬币3次,结果全部为正面。
- MLE估计:p = 3/3 = 1.0,意味着永远出正面
- 这是否合理? 不太合理,因为我们普遍认为大多数硬币接近公平
- MAP的作用:引入“硬币通常是公平的”这一常识性先验,避免估计结果过于极端
先验知识的影响程度
- 弱先验:对估计影响较小,主要由数据决定结果
- 强先验:即使数据偏离预期,也会将估计值向先验方向“拉回”
与MLE的本质区别
MAP不仅仅依据观测数据进行判断,而是综合了先验信念与当前证据,从而得到更为稳健的参数估计。
后验 = (似然 × 先验) / 证据
def maximum_a_posteriori_estimation():
# 观测数据
observations = [1, 1, 0, 1, 1, 0, 1, 1, 1, 0]
n = len(observations)
k = sum(observations)
# 先验设定:假设硬币偏向公平,使用Beta分布作为先验
alpha_prior = 2 # 先验参数,反映对正面出现概率的初始信念
beta_prior = 2
# 最大后验估计(MAP):结合观测数据与先验知识
# 使用公式 (k + alpha) / (n + alpha + beta)
p_map = (k + alpha_prior) / (n + alpha_prior + beta_prior)
# 极大似然估计(MLE):仅基于观测数据
p_mle = k / n
print(f"MLE估计: {p_mle:.2f}")
print(f"MAP估计(考虑先验): {p_map:.2f}")
print("MAP估计更接近0.5,因为先验认为硬币是公平的")
maximum_a_posteriori_estimation()
3.5 多元正态分布:高维空间中的概率建模工具
多元正态分布简介
作为一维正态分布在多维情况下的自然扩展,多元正态分布是人工智能领域中最为基础且广泛应用的概率模型之一。它能够有效描述多个连续变量联合变化的统计规律。
数学表达形式
对于一个n维随机向量 x,其概率密度函数定义如下:
p(x) = (1/(2π)^(n/2) |Σ|^(1/2)) × exp(-1/2 (x-μ)^T Σ^(-1) (x-μ))
其中:
- μ:表示均值向量,维度为n,代表每个变量的期望值;
- Σ:协方差矩阵,大小为n×n,对称且正定,刻画了各变量之间的方差和协方差关系。
直观理解不同维度下的表现形态
- 一维情形:呈现经典的钟形曲线;
- 二维情形:形成类似椭圆形状的“山丘”状曲面;
- 高维情形:可视为在高维空间中拉伸或压缩的椭球体。
在AI领域的典型应用场景
- 高斯混合模型(GMM):
通过组合多个多元正态分布来拟合复杂的数据分布结构,常用于聚类分析与概率密度估计任务。
- 变分自编码器(VAE):
假设潜在空间中的隐变量服从多元正态分布,从而实现对数据的有效生成与重构。
- 贝叶斯神经网络:
将网络权重参数建模为服从多元正态分布的随机变量,有助于量化预测过程中的不确定性。
import numpy as np
from scipy.stats import multivariate_normal
import matplotlib.pyplot as plt
# 设定分布参数
mu = np.array([0, 0]) # 均值向量
Sigma = np.array([[1, 0.5], # 协方差矩阵
[0.5, 1]])
# 创建分布对象并采样
mvn = multivariate_normal(mean=mu, cov=Sigma)
samples = mvn.rvs(size=1000)
# 可视化结果
plt.figure(figsize=(10, 5))
# 左图:样本点散点图
plt.subplot(1, 2, 1)
plt.scatter(samples[:, 0], samples[:, 1], alpha=0.5)
plt.xlabel('x1')
plt.ylabel('x2')
plt.title('Multivariate normal distribution sample')
plt.grid(True)
# 右图:概率密度等高线图
x = np.linspace(-3, 3, 100)
y = np.linspace(-3, 3, 100)
X, Y = np.meshgrid(x, y)
pos = np.dstack((X, Y))
Z = mvn.pdf(pos)
plt.subplot(1, 2, 2)
plt.contour(X, Y, Z)
plt.xlabel('x1')
plt.ylabel('x2')
plt.title('Probability density contour')
plt.grid(True)
plt.tight_layout()
plt.show()
3.5.1 协方差矩阵:揭示变量间的依赖结构
协方差矩阵的基本概念
协方差矩阵用于度量一组随机变量之间两两的相关性,是多元统计分析的核心工具之一。
形式化定义
设n维随机向量 x = [x, x, …, x],则其协方差矩阵 Σ 的元素由下式给出:
Σ_ij = Cov(x_i, x_j) = E[(x_i - μ_i)(x_j - μ_j)]
主要性质
- 对称性:Σ_ij = Σ_ji,即矩阵关于主对角线对称;
- 对角线元素:Σ_ii 表示第 i 个变量的方差 Var(x_i),反映该变量自身的波动程度;
- 非对角线元素:Σ_ij(i≠j)表示变量 x_i 与 x_j 的协方差 Cov(x_i, x_j),体现它们之间的线性关联趋势;
- 半正定性:对任意实向量 v,均有 v^T Σ v ≥ 0;若所有变量线性无关,则为严格正定(v ≠ 0 时 v^T Σ v > 0)。
直观解释
- 对角线项 Σ_ii:
- 数值较大 → 变量变化幅度大,离散性强;
- 数值较小 → 变量集中于均值附近,稳定性高。
- 非对角线项 Σ_ij(i≠j):
- 正值 → 正相关:一个变量增大时,另一个也倾向于增大;
- 负值 → 负相关:一个变量上升,另一个趋于下降;
- 接近零 → 几乎无线性相关性。
相关系数与协方差矩阵解析
在统计学和人工智能领域,协方差矩阵是衡量变量间关系的核心工具。它不仅反映各个特征的方差,还能揭示不同变量之间的协变趋势。
协方差解释:
- 正数:表示正相关,即一个变量增大时,另一个变量也倾向于增大。
- 负数:代表负相关,意味着一个变量上升时,另一个有下降的趋势。
- 接近0:说明两个变量之间几乎无线性相关性,可视为独立变化。
为了更直观地比较不同量纲下的关联程度,引入了相关系数的概念:
ρ_ij = Σ_ij / (√Σ_ii × √Σ_jj),其取值范围为[-1, 1]。该指标消除了单位影响,更适合用于跨维度的数据分析。
协方差矩阵的应用场景(AI方向)
主成分分析(PCA):
通过对数据的协方差矩阵进行特征值分解,提取出主要变化方向,实现降维处理,保留最重要的信息结构。
多元正态分布建模:
协方差矩阵决定了多维高斯分布的形状、伸展方向以及各维度间的依赖关系。
特征选择策略:
- 高协方差特征对可能意味着冗余信息,可用于剔除重复特征;
- 低协方差则表明特征相对独立,具有独特表达能力,适合保留用于模型训练。
import numpy as np
# 计算协方差矩阵
def compute_covariance_matrix(data):
"""
计算数据的协方差矩阵
参数:
- data: (n_samples, n_features) 形状的数据矩阵
返回:
- cov_matrix: (n_features, n_features) 协方差矩阵
"""
# 中心化数据
data_centered = data - data.mean(axis=0)
# 计算协方差矩阵
n = data.shape[0]
cov_matrix = (data_centered.T @ data_centered) / (n - 1)
return cov_matrix
KL(q(θ) || p(θ|D)) = ∫ q(θ) log(q(θ)/p(θ|D)) dθ
以下是一个生成正相关变量并计算其协方差矩阵的示例:
# 示例:计算两个相关变量的协方差矩阵
np.random.seed(42)
# 生成相关数据
x = np.random.randn(1000)
y = 2 * x + np.random.randn(1000) * 0.5 # y与x正相关
data = np.column_stack([x, y])
cov_matrix = compute_covariance_matrix(data)
print(f"协方差矩阵:\n{cov_matrix}")
print(f"\n解释:")
print(f" Var(x) = {cov_matrix[0, 0]:.3f}")
print(f" Var(y) = {cov_matrix[1, 1]:.3f}")
print(f" Cov(x,y) = {cov_matrix[0, 1]:.3f} (正相关)")
print(f" 相关系数 = {cov_matrix[0, 1] / np.sqrt(cov_matrix[0, 0] * cov_matrix[1, 1]):.3f}")
变分推断基础:近似后验分布的方法
什么是变分推断?
变分推断(Variational Inference, VI)是一种用于近似复杂贝叶斯后验分布的技术,特别适用于无法直接计算真实后验的情形。
核心思想:
使用一个形式简单且易于处理的概率分布 q(θ),来逼近真实的后验分布 p(θ|D)。具体步骤包括:
- 选定参数化的分布族(如正态分布);
- 通过优化方法调整 q(θ) 的参数,使其尽可能贴近目标后验分布。
数学原理:
关键在于最小化 q(θ) 与真实后验 p(θ|D) 之间的KL散度:
ELBO = E_q[log p(D|θ)] - KL(q(θ) || p(θ))
这一过程等价于最大化“证据下界”(Evidence Lower Bound, ELBO),从而避免直接计算难以处理的边缘概率。
在人工智能中的典型应用
变分自编码器(VAE):
利用变分推断学习潜在空间中隐变量的分布,广泛应用于图像生成、数据重建等任务。
贝叶斯神经网络:
将权重视为随机变量,采用变分方法估计其后验分布,有助于量化预测不确定性,提升模型鲁棒性。
主题模型(如LDA):
Latent Dirichlet Allocation 使用变分推断进行文档主题推断,在自然语言处理中有重要地位。
# 变分推断的简单示例
def variational_inference_example():
"""
用变分推断近似后验分布
假设:观测到数据D,想推断参数θ的后验分布
后验分布 p(θ|D) 难以计算,用正态分布 q(θ) 近似
"""
# 简化的例子:用正态分布近似后验
# 在实际应用中,需要优化变分参数
# 变分分布:q(θ) ~ N(μ_q, σ_q?)
mu_q = 2.0 # 变分均值
sigma_q = 0.5 # 变分标准差
# 生成近似样本
from scipy.stats import norm
q_samples = norm.rvs(loc=mu_q, scale=sigma_q, size=1000)
print(f"变分分布 q(θ) ~ N({mu_q}, {sigma_q}?)")
print(f"近似后验分布的均值: {q_samples.mean():.3f}")
print(f"近似后验分布的标准差: {q_samples.std():.3f}")
# 实际流程应包含:
# 1. 定义变分分布族
# 2. 最大化ELBO以优化参数(μ_q, σ_q)
# 3. 使用梯度下降或其他优化算法
variational_inference_example()
实战案例:朴素贝叶斯分类器实现
基于scikit-learn库构建一个基本的高斯朴素贝叶斯分类器,并结合人工数据集完成训练与评估流程。
from sklearn.naive_bayes import GaussianNB
from sklearn.model_selection import train_test_split
from sklearn.datasets import make_classification
# 生成模拟分类数据
X, y = make_classification(n_samples=1000, n_features=2, n_redundant=0,
n_informative=2, n_clusters_per_class=1, random_state=42)
# 划分训练集与测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 创建并训练模型
model = GaussianNB()
model.fit(X_train, y_train)
# 输出准确率
accuracy = model.score(X_test, y_test)
print(f"朴素贝叶斯分类器准确率: {accuracy:.3f}")
from sklearn.metrics import accuracy_score
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
# 生成分类数据集用于示例
X, y = make_classification(n_samples=1000, n_features=20, n_classes=2, random_state=42)
# 将数据划分为训练集和测试集,测试集占比20%
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建并训练高斯朴素贝叶斯模型
nb = GaussianNB()
nb.fit(X_train, y_train)
# 在测试集上进行预测
y_pred = nb.predict(X_test)
# 计算预测准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"朴素贝叶斯分类器准确率: {accuracy:.2%}")
# 展示前5个样本的类别预测概率
probabilities = nb.predict_proba(X_test[:5])
print(f"\n前5个样本的预测概率:")
for i, prob in enumerate(probabilities):
print(f"样本 {i}: 类别0={prob[0]:.3f}, 类别1={prob[1]:.3f}")


雷达卡


京公网安备 11010802022788号







