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

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

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

一、报告摘要

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日
    浏览(46)
  • 机器学习笔记07---朴素贝叶斯分类器

    贝叶斯决策论是概率框架下实施决策的基本方法。对分类任务来说,在所有相关概率都已知的理想情形下,贝叶斯决策论考虑如何基于这些概率和误判损失来选择最优的类别标记。     贝叶斯公式:  其中,P(c)是类\\\"先验\\\"概率;P(x|c)是样本x相对于类标记c的类条件概率,或称

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

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

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

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

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

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

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

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

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

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

    2023年04月19日
    浏览(94)
  • Spark-机器学习(5)分类学习之朴素贝叶斯算法

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

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

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

    2024年03月25日
    浏览(53)
  • 机器学习——使用朴素贝叶斯分类器实现垃圾邮件检测(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日
    浏览(45)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包