机器学习:基于朴素贝叶斯对花瓣花萼的宽度和长度分类预测

news/2024/4/20 0:45:36/文章来源:https://blog.csdn.net/AOAIYI/article/details/129254228

机器学习:基于朴素贝叶斯对花瓣花萼的宽度和长度分类预测

作者:AOAIYI

作者简介:Python领域新星作者、多项比赛获奖者:AOAIYI首页

😊😊😊如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁评论📒+关注哦!👍👍👍

📜📜📜如果有小伙伴需要数据集和学习交流,文章下方有交流学习区!一起学习进步!💪


专栏案例:机器学习
机器学习:基于逻辑回归对某银行客户违约预测分析
机器学习:学习k-近邻(KNN)模型建立、使用和评价
机器学习:基于支持向量机(SVM)进行人脸识别预测
决策树算法分析天气、周末和促销活动对销量的影响
机器学习:线性回归分析女性身高与体重之间的关系
机器学习:基于主成分分析(PCA)对数据降维

文章目录

  • 机器学习:基于朴素贝叶斯对花瓣花萼的宽度和长度分类预测
  • 一、实验目的
  • 二、实验原理
    • 1.分类问题描述
    • 2.Bayes’ theorem(贝叶斯法则)
    • 3.朴素贝叶斯分类算法
  • 三、实验环境
  • 四、实验内容
  • 五、实验步骤
    • 1.朴素贝叶斯
    • 2.业务理解
    • 3.读取数据
    • 4.数据理解
    • 5.数据准备
    • 6.构建数据训练集和测试集
    • 7.构建三类模型
  • 总结


一、实验目的

1.理解朴素贝叶斯的原理

2.掌握scikit-learn贝叶斯的用法

3.认识可视化工具seaborn

二、实验原理

1.分类问题描述

贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类。而朴素贝叶斯分类是贝叶斯分类中最简单,也是常见的一种分类方法,对于分类问题,其实谁都不会陌生,日常生活中我们每天都进行着分类过程。例如,当你看到一个人,你的脑子下意识判断他是学生还是社会上的人;你可能经常会走在路上对身旁的朋友说“这个人一看就很有钱”之类的话,其实这就是一种分类操作,贝叶斯分类算法,那么分类的数学描述又是什么呢?
在这里插入图片描述
其中C叫做类别集合,其中每一个元素是一个类别,而I叫做项集合(特征集合),其中每一个元素是一个待分类项,f叫做分类器。分类算法的内容是要求给定特征,构造分类器f,让我们得出类别。

2.Bayes’ theorem(贝叶斯法则)

在概率论和统计学中,Bayes theorem(贝叶斯法则)根据事件的先验知识描述事件的概率。贝叶斯法则表达式如下所示:
在这里插入图片描述

  • P(A|B) – 在事件B下事件A发生的条件概率

  • P(B|A) – 在事件A下事件B发生的条件概率

  • P(A), P(B) – 独立事件A和独立事件B的边缘概率

朴素贝叶斯方法是一组监督学习算法,它基于贝叶斯定理应用每对特征之间的“天真”独立假设。给定类变量y和从属特征矢量X1通过Xn,贝叶斯定理状态下列关系式:
在这里插入图片描述

使用天真的独立假设

在这里插入图片描述

对所有人来说i,这种关系简化为

在这里插入图片描述

由于

在这里插入图片描述

输入是常数,我们可以使用以下分类规则:

在这里插入图片描述

我们可以使用最大后验(MAP)估计来估计的

在这里插入图片描述在这里插入图片描述

前者是y 训练集中类的相对频率。不同的朴素贝叶斯分类器主要区别于他们对分布的假设

在这里插入图片描述

3.朴素贝叶斯分类算法

在scikit-learn中,提供了3种朴素贝叶斯分类算法:GaussianNB(高斯朴素贝叶斯)、MultinomialNB(多项式朴素贝叶斯)、BernoulliNB(伯努利朴素贝叶斯)

可以参考文档:

http://scikit-learn.org/stable/modules/naive_bayes.html

http://scikit-learn.org/stable/modules/generated/sklearn.naive_bayes.GaussianNB.html

三、实验环境

利用scikit-learn提供的三种朴素贝叶斯算法,构建分类器,根据花瓣花萼的宽度和长度判断他们属于哪一类

四、实验内容

Python 3.9

Jupyter notebook

五、实验步骤

1.朴素贝叶斯

贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类。而朴素贝叶斯分类是贝叶斯分类中最简单,也是常见的一种分类方法

2.业务理解

先有一张表格,描述了花瓣的特征和种类,利用scikit-learn提供的三种朴素贝叶斯算法,构建分类器,根据花瓣花萼的宽度和长度预测他们属于哪一个品种
在这里插入图片描述

3.读取数据

在这里插入图片描述

1.编写代码,读取数据

#导入pandas库和numpy库  
import pandas as pd  
import numpy as np  
iris = pd.read_csv(r'D:\CSDN\数据分析\naivebayes\iris.csv')  
iris.head()

在这里插入图片描述

4.数据理解

1.查看数据结构

iris.shape

在这里插入图片描述

说明:该数据总共有150行,5列

2.查看数据列名称

iris.columns

在这里插入图片描述

5.数据准备

1.删除“种类”这列数据得到特征数据如下:

X_iris = iris.drop(['species'],axis=1)  
X_iris.head()  

在这里插入图片描述

2.获取“species”这列数据并将其转换为数组,得到预测数据

y_iris = np.ravel(iris[['species']])  
y_iris  

在这里插入图片描述

3.查看y_iris总共有多少行

y_iris.shape 

在这里插入图片描述

6.构建数据训练集和测试集

1.构建训练和测试数据集

#导入相应的库  
from sklearn.model_selection import  train_test_split  
#将数据分为训练集,测试集  
X_train,X_test,y_train,y_test = train_test_split(X_iris,y_iris,random_state=1)  
#获取数据前5行  
X_train.head()  

在这里插入图片描述

说明:将数据分为训练集和测试集,默认情况下,75%的数据用于训练,25%的数据用于测试

  • 训练集是用于发现和预测潜在关系的一组数据。
  • 测试集是用于评估预测关系强度和效率的一组数据。

2.查看训练集和测试集的数据结构

print(X_train.shape)  
print(X_test.shape)  
print(y_train.shape)  
print(y_test.shape)

在这里插入图片描述

说明:训练集:X_iris数据为(150,4),X_train为(112,4),X_test为(38,4)
sales数据为200行,y_train为(112,),y_test为(38,)

3.查看y_train数据

y_train  

在这里插入图片描述

7.构建三类模型

在scikit-learn中,提供了3种朴素贝叶斯分类算法:GaussianNB(高斯朴素贝叶斯)、MultinomialNB(多项式朴素贝叶斯)、BernoulliNB(伯努利朴素贝叶斯)

GaussianNB实现高斯朴素贝叶斯算法进行分类。假设特征的可能性是高斯的:
在这里插入图片描述

1.利用GaussianNB(高斯朴素贝叶斯)类建立简单模型并预测

from sklearn.naive_bayes import  GaussianNB  
#利用GaussianNB类建立简单模型  
gb= GaussianNB()  
model_GaussinaNB = gb.fit(X_train,y_train)  
#predict(X):直接输出测试集预测的类标记,X_test为测试集  
y_predict_GaussianNB= model_GaussinaNB.predict(X_test)  
print("y_predict_GaussianNB",y_predict_GaussianNB) 

在这里插入图片描述

构建一个新的测试数组

import pandas as pd  
z_data ={'sepal_length':['5'],'sepal_width':['3'],'petal_length':['3'],'petal_width':['1.8']}  
Z_data =pd.DataFrame(z_data,columns=['sepal_length','sepal_width','petal_length','petal_width'])  
print(Z_data)  

在这里插入图片描述

将测试数据带入模型预测得到预测结果

Z_model_predict=model_GaussinaNB.predict(Z_data)  
print('Z_model_predict',Z_model_predict)  

说明:当我们提供的数据为’sepal_length’:[‘5’],‘sepal_width’:[‘3’],‘petal_length’:[‘3’],‘petal_width’:[‘1.8’]时,预测它属于‘versicolor’这个种类,到底预测正确与否呢?接下来看一下预测结果的平均值

查看预测结果的平均值

#预测结果  
y_predict_GaussianNB==y_test  

在这里插入图片描述

mean()函数功能:求取均值

y_test_mean=np.mean(y_predict_GaussianNB==y_test)  
print('y_test_GaussianNB_mean',y_test_mean) 

在这里插入图片描述

查看预测正确率

score(X, y[, sample_weight]) 返回给定测试数据和标签的平均精度

gb.score(X_train,y_train)

在这里插入图片描述

2.BernoulliNB(伯努利朴素贝叶斯)
BernoulliNB实现了根据多元伯努利分布的数据的朴素贝叶斯训练和分类算法; 即,可能存在多个特征,但每个特征被假定为二进制值(伯努利,布尔)变量。因此,该类要求将样本表示为二进制值特征向量;如果传递任何其他类型的数据,BernoulliNB实例可以将其输入二值化(取决于binarize参数)。

伯努利朴素贝叶斯的决策规则是基于
在这里插入图片描述

利用BernoulliNB类建立简单模型并预测

# ====================BernoulliNB  
from sklearn.naive_bayes import  BernoulliNB  
model_BernoulliNB=BernoulliNB().fit(X_train,y_train)  
y_predict_BernoulliNB=model_BernoulliNB.predict(X_test)  
print('y_test_BernoulliNB_mean',np.mean(y_predict_BernoulliNB==y_test))  

在这里插入图片描述

3.MultinomialNB(多项式朴素贝叶斯)
MultinomialNB实现用于多项分布数据的朴素贝叶斯算法,并且是用于文本分类的两种经典朴素贝叶斯变体之一(其中数据通常表示为单词向量计数,尽管tf-idf向量也已知在实践中很好地工作) 。

利用MultinomialNB类建立简单模型并预测

# ====================MultinomialNB  
from sklearn.naive_bayes import  MultinomialNB  
model_MultinomialNB=MultinomialNB().fit(X_train,y_train)  
y_predict_MultinomialNB=model_MultinomialNB.predict(X_test)  
print('y_test_MultinomialNBB_mean',np.mean(y_predict_MultinomialNB==y_test))  

在这里插入图片描述


总结

贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类。而朴素贝叶斯分类是贝叶斯分类中最简单,也是常见的一种分类方法,对于分类问题,其实谁都不会陌生,日常生活中我们每天都进行着分类过程。例如,当你看到一个人,你的脑子下意识判断他是学生还是社会上的人;你可能经常会走在路上对身旁的朋友说“这个人一看就很有钱”之类的话,其实这就是一种分类操作。

每个人都会遇到困难跟挫折,要有同困难作斗争的决心跟勇气。困难跟挫折是成就事业的基石,岸在远方向我们招手,只要越过它,敢于在惊涛骇浪中博击,我们就会尝到胜利的果食。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_75224.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

毕业设计 基于51单片机环境监测设计 光照 PM2.5粉尘 温湿度 2.4G无线通信

基于51单片机环境监测设计 光照 PM2.5粉尘 温湿度 2.4G无线通信1、项目简介1.1 系统构成1.2 系统功能2、部分电路设计2.1 STC89C52单片机核心系统电路设计2.2 dht11温湿度检测电路设计2.3 NRF24L01无线通信电路设计3、部分代码展示3.1 NRF24L01初始化3.2 NRF24L01的SPI写时序3.…

【数据库】数据库基本概念和类型

一、数据库基本概念 1、数据 所谓数据(Data)是指对客观事物进行描述并可以鉴别的符号,这些符号是可识别的、抽象的。它不仅仅指狭义上的数字,而是有多种表现形式:字母、文字、文本、图形、音频、视频等。现在…

STM32开发(16)----CubeMX配置DMA

CubeMX配置DMA前言一、什么是DMA?二、实验过程1.CubeMX配置2.代码实现3.实验结果总结前言 本章介绍使用STM32CubeMX对DMA进行配置的方法,DMA的原理、概念和特点,配置各个步骤的功能,并通过串口DMA传输实验方式验证。 一、什么是…

【学习笔记汇总】Github Note

本科毕业设计 Internet of Things environmental monitoring system based on STM32 STM32系列单片机工程模板 【STM32F103_Libary】基于STM32F103开发板的工程模板 ST7735屏幕【STM32F103Template】基于STM32F103开发板的工程模板 ILI9341屏幕【STM32F103_LibaryFinalVersio…

服务拆分及远程调用

目录 服务拆分 服务拆分注意事项 服务间调用 步骤一:注册RestTemplate 步骤二:修改业务层代码 总结: 提供者和消费者 思考 服务调用关系 服务拆分 服务拆分注意事项 单一职责:不同微服务,不要重复开发相同业…

电压放大器和电流放大器的区别是什么意思

在日常电子实验测试中,很多电子工程师都会使用到电压放大器和电流放大器,但是很多新手工程师却无法区分两者的区别,下面就让安泰电子来为我们讲解电压放大器和电流放大器的区别是什么意思。 一、电压放大器介绍: 电压放大器是一种…

2023王道考研数据结构笔记第一章绪论

第一章 绪论 1.1 数据结构的基本概念 1.数据:数据是信息的载体,是描述客观事物属性的数、字符以及所有能输入到计算机中并被程序识别和处理的符号的集合。 2.数据元素:数据元素是数据的基本单位,通常作为一个整体进行考虑和处理…

【MySQL】数据库中锁和事务的相关知识点

1.事务的四大特点 原子性:事务中的所有操作要么都成功,要么都失败。所有的操作是一个不可分割的单位。一致性:一致性指的是事务执行前后,数据从一个合法性状态转移到另一个合法性状态。这个状态和业务有关,是自己定义…

Editor工具开发实用篇:EditorGUI/EditorGUILayout的区别和EditorGUILayout的方法介绍

目录 一:EditorGUI和EditorGUILayout区别 二:EditorGUILayout 1.EditorGUILayout.BeginFadeGroup(float value); 2.EditorGUILayout.BeginHorizontal EditorGUILayout.BeginVertical 3.EditorGUILayout.BeginScrollView 4.EditorGUILayout.BeginT…

sql-labs-Less1

靶场搭建好了,访问题目路径 http://127.0.0.1/sqli-labs-master/Less-1/ 我最开始在做sql-labs靶场的时候很迷茫,不知道最后到底要得到些什么,而现在我很清楚,sql注入可以获取数据库中的信息,而获取信息就是我们的目标…

概念+示例+横向对比+难点解析征服八大react hooks

8大hooks概念、使用场景 前言 对不同阶段的react开发者会有不同的效果,最终目的是能够对8大react hooks,完全理解,游刃有余。对比useState和useReducer,什么时候使用useMemo和useCallback,useEffect的参数… … use…

文献阅读笔记 # 面向大规模多版本软件系统的代码克隆检测加速技术

面向大规模多版本软件系统的代码克隆检测加速技术,方维康 吴毅坚 赵文耘,《计算机应用与软件》复旦大学软件学院、复旦大学上海市数据科学重点实验室2022 April 面向大规模多版本软件系统的代码克隆检测加速技术 摘要 很多代码克隆检测方法主要针对软…

【博学谷学习记录】超强总结,用心分享丨人工智能 多场景实战 常用英文缩写概念总结

目录PV(Page View)UV(Unique Visitor)CPM(Cost Per Mille)CPC(Cost Per Click)CPA(Cost Per Action)CPI(Cost Per Install)ACU(Average concurrent users)PCU(Peak concurrent users)ARPU(Average Revenue Per User)ARPPU(Average Revenue Per Paying User)LTV(Life Time Value…

Linux命令之lz4命令

一、lz4命令简介 LZ4是一种压缩格式,特点是压缩/解压缩速度超快(压缩率不如gzip),如果你特别在意压缩速度,或者当前环境的CPU资源紧缺,可以考虑这种格式。lz4是一种非常快速的无损压缩算法,基于字节对齐LZ77系列压缩方…

西电计算机通信与网络(计网)简答题计算题核心考点汇总(期末真题+核心考点)

文章目录前言一、简答计算题真题概览二、网桥,交换机和路由器三、ARQ协议四、曼彻斯特编码和差分曼彻斯特编码五、CRC六、ARP协议七、LAN相关协议计算前言 主要针对西安电子科技大学《计算机通信与网络》的核心考点进行汇总,包含总共26章的核心简答。 【…

【Linux】Linux根文件系统扩容

场景:根文件系统需要至少100GB的剩余空间,但是目前就剩余91GB。因此,我们需要对根文件系统进行扩容。# df -h 文件系统 容量 已用 可用 已用% 挂载点 devtmpfs 3.9G 0 3.9G 0% /dev tmpfs …

密码暴力破解

密码的暴力破解准备工具功能简介Burp Intruder工作原理Intruder应用场景爆破实操准备工具 首先准备好BurpSuite和Dvwa作为测试工具和实验对象。 功能简介 Burp Intruder工作原理 Intruder在原始请求数据的基础上,通过修改各种请求参数,以获取不同的请…

flutter 微信聊天输入框

高仿微信聊天输入框,效果图如下(目前都是静态展示,服务还没开始开发): 大家如果观察仔细的话 应该会发现,他输入框下面的高度 刚好就是 软键盘的高度;所以在这里就需要监听软键盘的高度。还要配…

Hbase资源隔离操作指南

1.检查集群的环境配置 1.1 HBase版本号确认> 5.11.0 引入rsgroup的Patch: [HBASE-6721] RegionServer Group based Assignment - ASF JIRA RegionServer Group based Assignment 社区支持版本:2.0.0 引入rsgroup的CDH版本 5.11.0 https://www.…

购买运动耳机应该考虑什么问题、运动达人必备的爆款运动耳机

喜欢运动的小伙伴都知道,运动和音乐是最配的,在运动中伴随着节奏感的音乐能够让自己更兴奋,锻炼的更加起劲儿。在运动耳机方面我也一直都有所研究,购买运动耳机最重要的就是要满足我们运动时候听音乐的需求,从佩戴舒适…