实战四:基于朴素贝叶斯方法对鸢尾花卉品种预测 代码+数据 课程设计

本文介绍了朴素贝叶斯分类算法的理论基础,包括贝叶斯定理和条件独立假设,并通过Python实现鸢尾花卉数据集的预测,包括数据加载、模型训练、预测及结果评估。实验展示了朴素贝叶斯在小规模数据上的高效性和对缺失数据的容忍性,同时也指出其在属性相关性较大时可能存在的分类问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.理论部分

朴素贝叶斯是一种基于贝叶斯定理的有监督分类算法。该算法一个重要的特点:假设特征条件独立,正是这个假设使得朴素贝叶斯法的学习和预测变得简单。在特征条件独立的假设下,朴素贝叶斯法先利用训练数据集的先验统计信息计算特征向量与标签的联合概率分布,然后对于新输入的样本点,利用联合概率分布计算后验概率, 并用后验概率最大的输出标签确定为新样本点的类别。

  • 注意:假设特征条件独立正是朴素贝叶斯中“朴素”两字的来由。

贝叶斯定理它解决了生活中经常碰到的问题:已知某条件下的概率,如何得到两条件交换后的概率,也就是在已知P(A|B)的情况下如何求得P(B|A)的概率。P(A|B)是后验概率(posterior probability),也就是我们常说的条件概率,即在条件B下,事件A发生的概率。相反P(A)或P(B)称为先验概率(prior probability·)。贝叶斯定理之所以有用,是因为我们在生活中经常遇到这种情况:我们可以很容易直接得出P(A|B),P(B|A)则很难直接得出,但我们更关心P(B|A),贝叶斯定理就为我们打通从P(A|B)获得P(B|A)的道路。

下面不加证明地直接给出贝叶斯定理:

P(A|B)=P(B|A)∗P(A)P(B)P(A|B)=P(B|A)∗P(A)P(B)

假如需要根据n个特征变量$X$来对$L$个类别进行分类,朴素贝叶斯分类器的原理就是对每一条记录$X$计算$L$个条件概率P(C|X),找到概率最大的那个类别作为分类结果。

鸢尾花数据集是一个经典的分类问题数据集,包含三类鸢尾花的特征信息。贝叶斯分类是一种基于概率统计理论的简单而有效的分类算法。下面我们结合 Python 来讲解如何对原始鸢尾花数据进行分割,并利用朴素贝叶斯分类模型来进行预测。 --- ### **1. 导入所需库** 首先需要导入需要用到的几个关键模块: ```python from sklearn.datasets import load_iris # 加载鸢尾花数据集函数 from sklearn.model_selection import train_test_split # 划分训练集和测试集工具 from sklearn.naive_bayes import GaussianNB # 使用高斯朴素贝叶斯分类器 from sklearn.metrics import accuracy_score # 计算准确率指标 import numpy as np # 数组操作基础包 ``` --- ### **2. 加载鸢尾花数据集并查看基本信息** 加载鸢尾花数据集并对其中的内容做一个简单的预览。 ```python # 加载数据集 iris = load_iris() # 特征矩阵 X 和标签向量 y 分别对应于样本属性与类别标识符 X = iris.data # [n_samples, n_features] 形状表示共有多少条记录以及每条记录有多少维度 y = iris.target # 对应各条记录的目标值即所属种类编号 {0, 1, 2} print("Features:\n", iris.feature_names) print("\nTarget names:", iris.target_names) print("\nFirst five samples:") for i in range(5): print(f"Sample {i+1}: Features={X[i]}, Target={y[i]}") ``` --- ### **3. 将数据划分为训练集和验证集** 为了评估我们的分类模型性能,在构建好模型之后还需要留出一部分独立的数据作为检验素材。这里采用随机抽样的方法把整个数据分成两部分——70%的比例分配给训练集合;剩下的则用于测试目的。 ```python # 设定随机种子保证每次运行程序划分结果一致 random_seed = 42 # 按照比例拆分数据集为训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=random_seed) print(f"\nTraining set size: {len(y_train)} ({round(len(y_train)/len(y)*100)}%)") print(f"Testing set size : {len(y_test )}({ round(( len(y)-len(y_train))/len(y)*100 }%) ") ``` > 输出示例:`Training set size: 105 (70%), Testing set size: 45 (30%)` --- ### **4. 构建并应用高斯朴素贝叶斯分类器** 创建一个实例化的 `GaussianNB()` 并对其传递进来的训练数据完成拟合过程。 然后就可以用这个已经学习好的模型去推测新观测点归属哪一类了! ```python # 初始化 Gausssian Naive Bayes 类型的对象 gnb gnb = GaussianNB() # 根据提供的训练资料教化该模型 model = gnb.fit(X_train, y_train) # 测试阶段 - 预测未知输入所对应的输出类别标号 predictions = model.predict(X_test) # 展现若干个预测结果同真实答案对比状况 print("\nPredictions vs Actuals for first few instances from Test Set:") for idx, pred_val in enumerate(predictions[:8]): actual_val = y_test[idx] feature_desc = ', '.join([f"{feat}={val:.2f}" for feat,val in zip(iris.feature_names,X_test[idx])]) print(f"[{idx}] Predicted:{pred_val}, True Label:{actual_val} | Sample Features:[{feature_desc}]") # 统计总体精度得分 accuracy_percentage = accuracy_score(y_test,predictions )*100 print(f"\nOverall Accuracy Score on the Test Dataset is approximately {accuracy_percentage}%.") ``` --- 以上就是完整地演示了一个完整的流程,包括从加载原始数据开始直到最终计算出预测效果为止的所有步骤都涵盖到了。希望这对你有所帮助! ####
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一枚爱吃大蒜的程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值