基于MATLAB的Naive Bayes分类器算法实现
项目介绍
本项目提供了一个在MATLAB环境下实现的经典朴素贝叶斯(Naive Bayes)分类算法。该算法基于贝叶斯定理,通过收集训练样本的统计特征来构建概率模型,并用于多维数据的分类预测。本项目采用了高斯朴素贝叶斯模型(Gaussian Naive Bayes),通过计算特征分布的均值和标准差来模拟类别条件概率。
实现过程中严格遵循特征独立性假设,通过对数似然计算有效解决了数值下溢问题。项目内置了经典的鸢尾花(Fisher Iris)数据集作为演示,涵盖了从数据预处理、模型训练、概率推断到结果可视化的完整流程,适用于机器学习初学者理解和深入研究算法逻辑。
功能特性
- 高斯分布建模:自动计算各类别下特征的均值与标准差,构建连续型数据的概率密度模型。
- 数值稳定性优化:在计算过程中使用对数似然(Log-Likelihood)求和代替原始概率连乘,有效防止多维特征下的浮点数下溢。
- 平滑处理:内置标准差平滑补偿逻辑,避免因样本量过少导致的标准差为零而引发的除零错误。
- 归一化概率输出:基于 Softmax 思想从对数域恢复后验概率分布,提供直观的类别判定依据。
- 多维度评估:支持计算分类准确率,并能生成预测结果与真实标签的对比统计表。
- 可视化分析:包含二维特征投影下的决策边界填色图绘制,以及用于误差分析的混淆矩阵热力图展示。
实现逻辑
- 数据准备与预处理
- 加载内置数据集并提取特征矩阵与标签。
- 实现标签转换逻辑,将字符串类型的分类标签编码为数值索引。
- 采用随机打乱机制,按照 70% 训练集、30% 测试集的比例进行划分,并固定随机数种子以确保结果可重复。
- 模型训练阶段
-
先验概率计算:统计每个类别在训练集中出现的频率。
-
参数估计:基于最大似然估计法,针对每个类别和每个特征,计算其对应的算术平均值。
-
方差估计:计算特征的标准差,并应用 1e-6 的最小阈值进行平滑。
- 模型预测阶段
-
条件概率计算:利用高斯概率密度函数计算测试样本在特定类别下的单维概率。
-
对数似然融合:将所有特征的对数概率与类别的对数先验概率进行累加。
-
后验推断:通过减去最大值(数值移动优化)后取指数的方法,计算出样本归属于各个类别的最终后验概率。
-
极大后验判定 (MAP):选取概率值最大的索引作为最终预测类别。
- 可视化与评估
- 计算测试集的整体分类准确率。
- 选取数据的前两个维度,在网格空间内进行模拟预测,绘制决策区域划分图。
- 构建混淆矩阵,通过热力图与文本标签直观展示分类错误的集中分布。
关键算法与实现细节
- 高斯概率密度函数 (Gaussian PDF):实现算法默认特征服从正态分布,通过公式 $P(x_i|C) = frac{1}{sqrt{2pisigma^2}} exp(-frac{(x_i-mu)^2}{2sigma^2})$ 进行建模。
- 对数转换技巧:为了处理极小概率值的连乘,代码将其转化为 $sum log(P(x_i|C)) + log(P(C))$。
- 数值稳定性 (Numerical Stability):在恢复概率分布时,使用
log_likelihoods - max(log_likelihoods) 的技巧,防止 exp() 函数在处理较大对数值时发生溢出。 - 维数自适应:算法逻辑不依赖于特定的维度数量,可自动处理任意特征数及类别数的数值型数据集。
系统要求
- MATLAB R2016b 或更高版本。
- 建议安装 Statistics and Machine Learning Toolbox(用于加载 fisheriris 数据集及 confusionmat 函数),但核心算法逻辑为纯数学实现。
使用说明
- 确保 MATLAB 环境路径正确。
- 直接运行主程序函数。
- 命令行将输出当前的分类准确率以及前10个待测样本的详细概率分布表。
- 系统将自动弹出两个对比图表:左侧为前两个特征维度的决策边界图,右侧为混淆矩阵热力图。
- 如需处理自有数据,仅需修改数据载入部分的 X 和 Y 变量,并确保 X 为数值矩阵。