18 贝叶斯分类之模型评估与改进
系列进度
贝叶斯学习入门 · 第 18 / 24 篇
整理说明
这篇内容怎么整理
郭震 · 2026-06-04
阅读路线
先按这条路线读
先抓住主线,再回到代码、配置和图文细节,读起来会更稳。
贝叶斯学习的重点是把已有判断和新证据合在一起,并明确表达不确定性。阅读时可以按「模型评估 -> 评估指标 -> 交叉验证 -> 混淆矩阵」建立结构,再回到正文里的代码、案例或指标做验证。
读完后,用一个真实小任务复查:输入是什么,处理环节在哪里,输出是否可验收;失败时先查「模型评估」,再查「评估指标」。
在上一篇中,我们探讨了“朴素贝叶斯分类器”的基本概念和实现方法。朴素贝叶斯分类器是一种基于贝叶斯定理的简单而有效的分类方法,尽管它在许多实际应用中表现良好,但模型的评估与改进却是确保其性能的关键步骤。本文将专注于如何评估和改进贝叶斯分类模型的表现。
模型评估
评估指标
评估和改进贝叶斯分类器时,先看混淆矩阵、类别先验、特征独立性、概率校准、错误样本和新特征。
在机器学习中,我们通常使用以下一些指标来评估模型的性能:
-
准确率(Accuracy): 正确预测的样本占总样本的比例。计算公式如下:
其中:
- (True Positive):真正例(正确地预测为正类的样本数)
- (True Negative):真负例(正确地预测为负类的样本数)
- (False Positive):假正例(错误地预测为正类的样本数)
- (False Negative):假负例(错误地预测为负类的样本数)
精确率(Precision): 正确预测的正例占所有预测为正例的比例。
召回率(Recall): 正确预测的正例占所有真实正例的比例。
F1-score: 精确率和召回率的调和平均数,是对模型性能综合考虑的一个指标。
交叉验证
使用交叉验证可以更可靠地评估模型的性能。常用的K折交叉验证将数据集分成K个子集,然后进行K次训练和测试,每次使用一个子集作为测试集,其他作为训练集。
from sklearn.model_selection import cross_val_score
from sklearn.naive_bayes import GaussianNB
from sklearn.datasets import load_iris
# 加载数据
data = load_iris()
X = data.data
y = data.target
# 创建模型
model = GaussianNB()
# 交叉验证
scores = cross_val_score(model, X, y, cv=5)
print(f'Cross-validation scores: {scores}')
print(f'Mean accuracy: {scores.mean()}')
混淆矩阵
混淆矩阵是可视化模型预测结果的一种方法,可以帮助我们更直观地了解模型的性能。
from sklearn.metrics import confusion_matrix
import seaborn as sns
import matplotlib.pyplot as plt
# 训练模型
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
# 生成混淆矩阵
cm = confusion_matrix(y_test, y_pred)
# 可视化混淆矩阵
sns.heatmap(cm, annot=True, fmt='d', cmap='Blues',
xticklabels=data.target_names,
yticklabels=data.target_names)
plt.ylabel('Actual')
plt.xlabel('Predicted')
plt.title('Confusion Matrix')
plt.show()
模型改进
数据预处理
阅读《贝叶斯分类之模型评估与改进》前,可以先用配图确认主线;读完后再检查哪些步骤能直接操作,哪些还需要补资料。
在改进模型之前,首先需要确保数据质量。进行特征选择、特征工程、数据清洗和归一化等预处理步骤能够显著提升模型性能。
超参数优化
朴素贝叶斯分类器虽然简单,但其性能在一定程度上受限于参数的选择。通过网格搜索(Grid Search)或随机搜索(Random Search)的方法,可以找到分布参数的最佳值。
from sklearn.model_selection import GridSearchCV
# 网格搜索参数
param_grid = {'var_smoothing': [1e-9, 1e-8, 1e-7, 1e-6]}
grid = GridSearchCV(GaussianNB(), param_grid, cv=5)
grid.fit(X_train, y_train)
# 输出最佳参数
print(f'Best parameters: {grid.best_params_}')
集成学习
集成方法(如Bagging和Boosting)可以通过结合多个模型,改善分类性能。例如,使用随机森林或AdaBoost等集成技术,通常可以显著提升分类效果。
from sklearn.ensemble import RandomForestClassifier
# 创建随机森林分类模型
rf_model = RandomForestClassifier(n_estimators=100)
rf_model.fit(X_train, y_train)
# 评估模型
rf_score = rf_model.score(X_test, y_test)
print(f'Random Forest Accuracy: {rf_score}')
学完《贝叶斯分类之模型评估与改进》后,不妨换一个自己的场景试一次,重点观察输入、处理和输出是否能对应起来。
如果想把《贝叶斯分类之模型评估与改进》用到自己的任务里,可以先缩小场景,只验证一个最关键的判断点。
结论
在本篇中,我们讨论了如何评估和改进贝叶斯分类模型的性能。这包括使用适当的评估指标、通过交叉验证确保结果的可靠性、采用混淆矩阵分析模型的预测结果,以及通过数据预处理、超参数优化、和集成学习等方法来提升模型的性能。这些步骤和技巧将为我们后续将要讨论的“马尔可夫链蒙特卡洛方法之MCMC方法的基础”奠定坚实的基础。
继续阅读
从这篇继续找到相关教程
常见问题
读前先确认这三点
贝叶斯分类之模型评估与改进适合谁读?
这是 贝叶斯学习入门 系列第 18 / 24 篇,适合正在学习贝叶斯学习入门,并且需要把概念落到操作步骤或判断标准里的读者。
读这篇贝叶斯学习入门教程要多久?
按中文技术文章阅读速度估算,通读大约 4 分钟;如果要跟着复现,建议把命令、配置和结果检查分开做。
这篇文章里的图文节点怎么用?
正文里有 6 个图文节点,可以先用它们抓住流程、配置和判断点,再回到对应段落细读。
分享文章
转发到常用平台
微信/朋友圈可先复制链接
相关教程
从相近问题继续读
继续阅读