机器学习实验 - 朴素贝叶斯分类器

这篇具有很好参考价值的文章主要介绍了机器学习实验 - 朴素贝叶斯分类器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

报告内容仅供学习参考,请独立完成作业和实验喔~

一、报告摘要

1.1 实验要求

(1)了解朴素贝叶斯与半朴素贝叶斯的区别与联系,掌握高斯分布、多项式分布和伯努利分布的朴素贝叶斯计算方法。
(2)编程实现朴素贝叶斯分类器,基于多分类数据集,使用朴素贝叶斯分类器实现多分类预测,通过精确率、召回率和F1值度量模型性能。

1.2 实验思路

\qquad 使用Python读取数据集信息并生成对应的朴素贝叶斯分类器,随后使用生成的分类器实现多分类预测,并根据精确率、召回率和F1值度量模型性能。

1.3 实验结论

\qquad 本实验训练了一个高斯分布朴素贝叶斯分类器,并可获得0.94以上的F1度量值,即可准确的完成鸢尾花分类任务。

二、实验内容

2.1 方法介绍

(1)朴素贝叶斯
\qquad 朴素贝叶斯(Naive Bayes)是基于贝叶斯定理与特征独立假设的分类方法。使用朴素贝叶斯方法时,首先基于训练数据,基于特征条件独立假设学习输入与输出的联合概率分布;随后对于给定的X,利用贝叶斯定理求解后验概率最大的输出标签。
朴素贝叶斯本质属于生成模型,学习生成数据的机制,也就是联合概率分布。
(2)半朴素贝叶斯
\qquad 半朴素贝叶斯是适当考虑一部分属性之间的相互依赖信息,其中“独依赖估计”(One-Dependent Estimator,简称ODE)是半朴素分类中最常用的一种策略。所谓“独依赖估计”,也就是假设每个属性在分类类别之外最多仅依赖于一个其他属性。
\qquad 与基于特征的条件独立性假设开展的朴素贝叶斯方法相比,其最大的区别就是半朴素贝叶斯算法放宽了条件独立假设的限制,考虑部分属性之间的相互依赖信息。但两者有共同特点:假设训练样本所有属性变量的值都已被观测到,即训练样本是完整的。
(3)高斯分布朴素贝叶斯计算方法
\qquad 使用条件:所有特征向量都是连续型特征变量且符合高斯分布。
\qquad 概率分布密度:
机器学习实验 - 朴素贝叶斯分类器

(4)多项式朴素贝叶斯计算方法
\qquad 使用条件:所有的特征变量都是离散型变量且符合多项式分布。
\qquad 概率分布密度:
机器学习实验 - 朴素贝叶斯分类器

(5)伯努利分布朴素贝叶斯计算方法
\qquad 使用条件:所有的特征变量都是离散型变量且符合伯努利分布。
\qquad 概率分布密度:

机器学习实验 - 朴素贝叶斯分类器

2.2 实验细节

2.2.1 实验环境

硬件环境:Intel® Core™ i5-10300H CPU + 16G RAM
软件环境:Windows 11 家庭中文版 + Python 3.8

2.2.2 实验过程

(1)划分数据集
\qquad 按照实验要求,本次数据集划分采用随机划分80%数据用于训练,其余20%数据用于测试。使用sklearn库的train_test_split()方法划分数据,代码如下:

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

(2)训练朴素贝叶斯分类方法
\qquad 由于实验数据中四个特征变量均为连续型特征变量,我们如果需要使用高斯分布朴素贝叶斯的话,只需要验证他是否符合高斯分布即可。这里使用Q-Q图来验证数据是否符合高斯分布,如果数据符合高斯分布,则该Q-Q图趋近于落在y=x线上,绘制的代码如下:

from scipy.stats import probplot
probplot(data,dist='norm',plot=plt)
plt.title('sepal length')
plt.show()

\qquad 绘制的到结果如下,依次为4个特征向量的Q-Q图。可以看出,4个特征向量整体趋势大致符合高斯分布,可以尝试使用高斯分布朴素贝叶斯分类方法。
机器学习实验 - 朴素贝叶斯分类器机器学习实验 - 朴素贝叶斯分类器
机器学习实验 - 朴素贝叶斯分类器机器学习实验 - 朴素贝叶斯分类器

\qquad 使用sklearn库的GaussianNB()方法训练分类器,代码如下:

clf = GaussianNB()
clf.fit(X_train, y_train)

(3)评价分类器
\qquad 使用精确率、召回率、F1度量值对分类器作为评价指标,使用sklearn库中的accuracy_score()、precision_score()、recall_score()、f1_score()方法进行计算,具体代码如下:

y_pred = clf.predict(X_test)
print(precision_score(y_test, y_pred, average=None))
print(recall_score(y_test, y_pred, average=None))
print(f1_score(y_test, y_pred, average=None))

(4)使用分类器进行预测
\qquad 我们选取测试集的最后一条数据进行预测,观察分类器计算得到的概率、分类结果与真实标签的内容。具体代码如下:

y_proba = clf.predict_proba(X_test[:1])
y_pred_num = clf.predict(X_test[:1])[0]
print("预测值:"+str(y_pred_num)+ " "+label[y_pred_num])
print("预计的概率值:", y_proba)
print("实际值:"+str(y_test[:1][0])+ " "+label[y_test[:1][0]])

\qquad 得到的预测结果如下图所示,可以看出分类器成功完成分类预测。
机器学习实验 - 朴素贝叶斯分类器

2.2.3 实验与理论内容的不同点

\qquad 朴素贝叶斯分类器的计算方法不难,在代码实现时,可以直接使用sklearn提供的GaussianNB()方法快速实现。
\qquad GaussianNB()方法提供两个参数,分别为priors和var_smoothing,即先验概率和所有特征的最大方差添加比例。var_smoothing作用是在估计方差时,为了追求估计的稳定性,将所有特征的方差中最大的方差以var_smoothing给出的比例添加到估计的方差中,默认为1e-9。
\qquad 其余一个不同是在数据的预处理上,由于数据集给出的原始数据集是将特征向量与标签同时给出,且标签为字符型的鸢尾花种类名,不方便后续操作。因此我们将数据预处理为X、y两个数组,分别为特征向量和标签,同时将y中标签重新映射为整数编号,以方便后续处理,具体对照关系如下:

0 -- Iris Setosa,1 -- Iris Versicolour,2 -- Iris Virginica

2.3 实验数据介绍

\qquad 实验数据为来自UCI的鸢尾花三分类数据集Iris Plants Database。
\qquad 数据集共包含150组数据,分为3类,每类50组数据。每组数据包括4个参数和1个分类标签,4个参数分别为:萼片长度sepal length、萼片宽度sepal width、花瓣长度petal length、花瓣宽度petal width,单位均为厘米。分类标签共有三种,分别为Iris Setosa、Iris Versicolour和Iris Virginica。
\qquad 数据集格式如下图所示:
机器学习实验 - 朴素贝叶斯分类器
\qquad 为方便后续使用,该数据集需要进行特征向量与标签分割以及标签编号,具体处理方式在2.2.3部分已进行介绍。

2.4 评价指标介绍

\qquad 评价指标选择精确率P、召回率R、F1度量值F1,计算公式如下:
P = T P T P + F P P=\frac{TP}{TP+FP} P=TP+FPTP
R = T P T P + F N R=\frac{TP}{TP+FN} R=TP+FNTP
F 1 = 2 ∗ P ∗ R P + R F1=\frac{2*P*R}{P+R} F1=P+R2PR
\qquad 具体代码实现时,可以直接调用sklearn库中的相应方法进行计算。

2.5 实验结果分析

\qquad 根据计算,对于二分类数据集,可以得到如下结果:
机器学习实验 - 朴素贝叶斯分类器

三、总结及问题说明

\qquad 本次实验的主要内容为使用朴素贝叶斯分类鸢尾花三分类数据集,并计算生成模型的精确度Precision、召回率Recall和F1度量值,从而对得到的模型进行评测,评价性能好坏。
\qquad 在本次实验中,未遇到很难解决的问题,得到的分类模型性能较好,可以较准确的完成鸢尾花的分类任务。

四、参考文献

[1] 周志华. 机器学习[M]. 清华大学出版社, 2016.
[2] 朴素贝叶斯算法_经典算法之朴素贝叶斯[EB/OL]. [2022-4-29]. https://blog.csdn.net/weixin_39637975/article/details/111373577.
[3] sklearn.naive_bayes.GaussianNB — scikit-learn 1.1.0 documentation[EB/OL]. [2022-4-29]. https://scikit-learn.org/stable/modules/generated/sklearn.naive_bayes.GaussianNB.html.文章来源地址https://www.toymoban.com/news/detail-490986.html

附录:实验代码

import numpy as np
from sklearn import datasets
from sklearn.naive_bayes import GaussianNB
from sklearn.model_selection import train_test_split
import random

label = ['Iris Setosa','Iris Versicolour','Iris Virginica']
X, y = datasets.load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

# 使用高斯朴素贝叶斯进行计算
clf = GaussianNB()
clf.fit(X_train, y_train)

from sklearn.metrics import accuracy_score
from sklearn.metrics import precision_score
from sklearn.metrics import recall_score
from sklearn.metrics import f1_score
# 评估
y_pred = clf.predict(X_test)
print(precision_score(y_test, y_pred, average=None))
print(recall_score(y_test, y_pred, average=None))
print(f1_score(y_test, y_pred, average=None))
# 预测
y_proba = clf.predict_proba(X_test[:1])
y_pred_num = clf.predict(X_test[:1])[0]
print("预测值:"+str(y_pred_num)+ " "+label[y_pred_num])
print("预计的概率值:", y_proba)
print("实际值:"+str(y_test[:1][0])+ " "+label[y_test[:1][0]])

到了这里,关于机器学习实验 - 朴素贝叶斯分类器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【机器学习】分类算法 - 朴素贝叶斯 MultinomialNB

    「作者主页」: 士别三日wyx 「作者简介」: CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」: 对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 md5() 可以计算字符串的 「MD5散列值」 。 语法 参数 $str :需要计算的字符串

    2024年02月14日
    浏览(32)
  • 机器学习——朴素贝叶斯算法(垃圾邮件分类)

    先验概率 :指的是 事件发生前 的预判概率,可以根据历史数据/经验估算得到。例如,当我们需要判断西瓜是不是好瓜的时候,对纹理、根蒂等特征都不了解,只是平常我们买西瓜的时候买到好瓜的概率是70%,那么这个西瓜是好瓜的概率我们也可以认为是70%。这个概率70%就是

    2024年02月03日
    浏览(45)
  • 机器学习——基于朴素贝叶斯分类算法实现垃圾邮件分类

    贝叶斯定理: 贝叶斯理论指的是,根据一个已发生事件的概率,计算另一个事件的发生概率。贝叶斯理论从数学上的表示可以写成这样:  ,在这里A和B都是事件, P(B)P(B)不为0。 在贝叶斯定理中: 1. P(A) 称为”先验概率”,即在B事件发生之前,我们对A事件概率的一个判断。如

    2024年02月04日
    浏览(43)
  • 【机器学习 | 朴素贝叶斯】朴素贝叶斯算法:概率统计方法之王,简单有效的数据分类利器

    🤵‍♂️ 个人主页: @AI_magician 📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。 👨‍💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!🐱‍🏍 🙋‍♂️声明:本人目前大学就读于大二,研究兴趣方向人工智能硬件(虽然硬件还没开始玩,但一直

    2024年02月15日
    浏览(38)
  • 机器学习-基于朴素贝叶斯的垃圾邮件分类

    概率论是许多机器学习算法的基础,此篇博客会给出一些使用概率论进行分类的方法。 首先从一个最简单的概率分类器开始,然后给出一些假设来学习朴素贝叶斯分类器。我们称之为“朴素”,是因为整个形式化过程只做最原始、最简单的假设。 我们还将构建另一个分类器

    2024年02月02日
    浏览(35)
  • 《机器学习核心算法》分类算法 - 朴素贝叶斯 MultinomialNB

    「作者主页」: 士别三日wyx 「作者简介」: CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」: 小白零基础《Python入门到精通》 朴素贝叶斯法(Naive Bayes model 简称 NBM )是基于 「贝叶斯定理」 与 「特征条件独立假设」 的分类方法。 「贝

    2024年02月08日
    浏览(43)
  • 机器学习:基于朴素贝叶斯(Naive Bayes)的分类预测

    目录 一、简介和环境准备 简介: 环境: 二、实战演练 2.1使用葡萄(Wine)数据集,进行贝叶斯分类 1.数据导入 2.模型训练 3.模型预测 2.2模拟离散数据集–贝叶斯分类 1.数据导入、分析 2.模型训练、预测  三、原理解析 朴素贝叶斯算法 优缺点: 朴素贝叶斯(Naive Bayes, NB) 是

    2023年04月19日
    浏览(80)
  • 【机器学习实战】-基于概率论的分类方法:朴素贝叶斯

    【机器学习实战】读书笔记 **朴素贝叶斯:**称为“ 朴素 ”的原因,整个形式化过程只做最原始、最简单的假设,特征之间没有关联,是统计意义上的独立。 **优点:**在数据较少的情况下仍然有效,可以处理多类别问题。 **缺点:**对于输入数据的准备方式较为敏感。 **适

    2024年03月25日
    浏览(40)
  • Spark-机器学习(5)分类学习之朴素贝叶斯算法

    在之前的文章中,我们学习了回归中的逻辑回归,并带来简单案例,学习用法。想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞,谢谢。 Spark-机器学习(4)回归学习之逻辑回归-CSDN博客 文章浏览阅读2.6k次

    2024年04月28日
    浏览(38)
  • 机器学习——使用朴素贝叶斯分类器实现垃圾邮件检测(python代码+数据集)

    机器学习——scikit-learn库学习、应用 机器学习——最小二乘法拟合曲线、正则化 机器学习——使用朴素贝叶斯分类器实现垃圾邮件检测(python代码+数据集) 贝叶斯公式: P ( A ∣ B ) = P ( A ) P ( B ∣ A ) P ( B ) P(A mid B)=frac{P(A) P(B mid A)}{P(B)} P ( A ∣ B ) = P ( B ) P ( A ) P ( B ∣ A )

    2024年02月10日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包