机器学习:基于多项式贝叶斯对蘑菇毒性分类预测分析

news2024/11/23 7:52:27

在这里插入图片描述

基于多项式贝叶斯对蘑菇毒性分类预测分析

作者:i阿极

作者简介:Python领域新星作者、多项比赛获奖者:博主个人首页

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

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


专栏案例:机器学习案例
机器学习(一):线性回归之最小二乘法
机器学习(二):线性回归之梯度下降法
机器学习(三):基于线性回归对波士顿房价预测
机器学习(十四):基于逻辑回归对超市销售活动预测分析
机器学习(十五):基于神经网络对用户评论情感分析预测
机器学习(十六):线性回归分析女性身高与体重之间的关系
机器学习(十七):基于支持向量机(SVM)进行人脸识别预测
机器学习(十八):基于逻辑回归对优惠券使用情况预测分析
机器学习(十九):基于逻辑回归对某银行客户违约预测分析
机器学习(二十):基于朴素贝叶斯对花瓣花萼的宽度和长度分类预测

文章目录

  • 基于多项式贝叶斯对蘑菇毒性分类预测分析
  • 1、多项式贝叶斯算法原理
  • 2、模型举例理解
  • 3、实验环境
  • 4、多项式贝叶斯模型-蘑菇毒性判别
    • 4.1数据说明
    • 4.2数据准备
    • 4.3划分训练集和测试集
    • 4.4多项式贝叶斯模型建立
    • 4.5绘制混淆矩阵
    • 4.6查看模型预测的准确率
    • 4.7计算正例的预测概率,用于生成ROC曲线的数据
  • 总结


1、多项式贝叶斯算法原理

多项贝叶斯算法是贝叶斯分类算法的一种,适用于多类别离散型特征的分类问题。在多项贝叶斯算法中,假设每个类别 c c c都有一组特征 x 1 , x 2 , … , x n x_1,x_2,\dots,x_n x1,x2,,xn,这些特征都是离散型的,每个特征的取值为 x i , 1 , x i , 2 , … , x i , k x_{i,1},x_{i,2},\dots,x_{i,k} xi,1,xi,2,,xi,k,其中 k k k为第 i i i个特征的取值数量。则多项贝叶斯算法通过以下公式计算后验概率:

P ( c ∣ x 1 , x 2 , … , x n ) = P ( c ) ∏ i = 1 n P ( x i ∣ c ) ∑ c ′ P ( c ′ ) ∏ i = 1 n P ( x i ∣ c ′ ) P\left(c \mid x_1, x_2, \ldots, x_n\right)=\frac{P(c) \prod_{i=1}^n P\left(x_i \mid c\right)}{\sum_{c^{\prime}} P\left(c^{\prime}\right) \prod_{i=1}^n P\left(x_i \mid c^{\prime}\right)} P(cx1,x2,,xn)=cP(c)i=1nP(xic)P(c)i=1nP(xic)

P ( c ) P(c) P(c)为类别 c c c在训练数据集中的概率, P ( x i ∣ c ) P(x_i|c) P(xic)为给定类别 c c c时特征 x i x_i xi的概率。

对于离散型特征, P ( x i ∣ c ) P(x_i|c) P(xic)可以使用多项式分布来计算,即:

P ( x i ∣ c ) = count ⁡ ( x i , c ) + α count ⁡ ( c ) + α × k i P\left(x_{i} \mid c\right)=\frac{\operatorname{count}\left(x_{i}, c\right)+\alpha}{\operatorname{count}(c)+\alpha \times k_{i}} P(xic)=count(c)+α×kicount(xi,c)+α

c o u n t ( x i , c ) count(x_i,c) count(xi,c)表示训练数据集中类别为 c c c,特征 x i x_i xi取值为 x i , j x_{i,j} xi,j的样本数量, c o u n t ( c ) count(c) count(c)表示训练数据集中类别为 c c c的样本数量, k i k_i ki表示第 i i i个特征的取值数量, α \alpha α为拉普拉斯平滑系数,常取值为1。拉普拉斯平滑的作用是防止某些特征在某个类别下的取值为0,导致整个后验概率为0的情况发生。

通过计算后验概率,多项贝叶斯算法会将样本分到概率最大的类别中。在实际应用中,多项贝叶斯算法常用于文本分类、垃圾邮件识别等问题。

2、模型举例理解

为了更好的理解 P ( x i ∣ c ) P(x_i|c) P(xic)公式,通过例子来实现。

假设影响女孩是否参加相亲活动的重要因素有三个,分别是男孩的职业、受教育水平和收入状况;如果女孩参加相亲活动,则对应的Meet变量为1,否则为0。

职务学历收入是否参加
公务员本科1
公务员本科1
非公务员本科0
非公务员本科1
公务员硕士1
非公务员本科0
公务员本科1
非公务员硕士0
非公务员硕士0
非公务员硕士1

我们的目标是:对于高收入的公务员,并且其学历为硕士的男生来说,女孩是否愿意参与他的相亲。使用多项式贝叶斯分类器实现。

首先,计算因变量各类别频率:

P (  Meet  = 0 ) = 4 / 10 = 0.4 P (  Meet  = 1 ) = 6 / 10 = 0.6 \begin{array}{l} P(\text { Meet }=0)=4 / 10=0.4 \\ P(\text { Meet }=1)=6 / 10=0.6 \end{array} P( Meet =0)=4/10=0.4P( Meet =1)=6/10=0.6

其次,计算单变量条件概率:

P (  Occupation  =  公务员  ∣  Meet  = 0 ) = 0 + 1 4 + 2 × 1 = 1 6 P (  Occupation  =  公务员  ∣  Meet  = 1 ) = 4 + 1 6 + 2 × 1 = 5 8 P (  Edu  =  硕士  ∣  Meet  = 0 ) = 2 + 1 4 + 2 × 1 = 3 6 P (  Edu  =  硕 士 ∣  Meet  = 1 ) = 2 + 1 6 + 2 × 1 = 3 8 P (  Income  =  高  ∣  Meet  = 0 ) = 0 + 1 4 + 2 × 1 = 1 6 P (  Income  =  高  ∣  Meet  = 1 ) = 3 + 1 6 + 2 × 1 = 4 8 \begin{array}{l} P(\text { Occupation }=\text { 公务员 } \mid \text { Meet }=0)=\frac{0+1}{4+2 \times 1}=\frac{1}{6} \\ P(\text { Occupation }=\text { 公务员 } \mid \text { Meet }=1)=\frac{4+1}{6+2 \times 1}=\frac{5}{8} \\ P(\text { Edu }=\text { 硕士 } \mid \text { Meet }=0)=\frac{2+1}{4+2 \times 1}=\frac{3}{6} \\ P(\text { Edu }=\text { 硕 } 士 \mid \text { Meet }=1)=\frac{2+1}{6+2 \times 1}=\frac{3}{8} \\ P(\text { Income }=\text { 高 } \mid \text { Meet }=0)=\frac{0+1}{4+2 \times 1}=\frac{1}{6} \\ P(\text { Income }=\text { 高 } \mid \text { Meet }=1)=\frac{3+1}{6+2 \times 1}=\frac{4}{8} \end{array} P( Occupation = 公务员  Meet =0)=4+2×10+1=61P( Occupation = 公务员  Meet =1)=6+2×14+1=85P( Edu = 硕士  Meet =0)=4+2×12+1=63P( Edu =   Meet =1)=6+2×12+1=83P( Income =   Meet =0)=4+2×10+1=61P( Income =   Meet =1)=6+2×13+1=84

最后,计算贝叶斯后验概率:

P ( Meet  = 0 ∣  Occupation  =  公务员  ,  Edu  = 硕士 , Income = 高 ) = 4 10 × 1 6 × 3 6 × 1 6 = 1 180 P(\text{Meet } = 0\mid\text { Occupation }=\text { 公务员 } , \text { Edu }=硕士,\text{Income} = 高) = \frac{4}{10}\times\frac{1}{6}\times\frac{3}{6}\times\frac{1}{6} = \frac{1}{180} P(Meet =0 Occupation = 公务员 , Edu =硕士,Income=)=104×61×63×61=1801
P ( Meet  = 1 ∣  Occupation  =  公务员  ,  Edu  = 硕士 , Income = 高 ) = 6 10 × 5 8 × 3 8 × 4 8 = 18 256 P(\text{Meet } = 1\mid\text { Occupation }=\text { 公务员 } , \text { Edu }=硕士,\text{Income} = 高) = \frac{6}{10}\times\frac{5}{8}\times\frac{3}{8}\times\frac{4}{8} = \frac{18}{256} P(Meet =1 Occupation = 公务员 , Edu =硕士,Income=)=106×85×83×84=25618

由结果得,当男生为高收入的公务员,并且受教育水平也很高时,女生愿意见面的概率约为0.0703、不愿意见面的概率约为0.0056。所以根据 a r g m a x P ( C i ) P ( X ∣ C i ) argmax P(C_i)P(X|C_i) argmaxP(Ci)P(XCi)的原则,最终女生会选择参加这位男生的相亲。

3、实验环境

Python 3.9

Anaconda

Jupyter Notebook

4、多项式贝叶斯模型-蘑菇毒性判别

4.1数据说明

数据集信息:

该数据集包括对应于姬松茸和鳞片菌科 23 种有鳃蘑菇的假设样本的描述(第 500-525 页)。每个物种都被确定为绝对可食用、绝对有毒或未知可食性且不推荐。后一类与有毒的一类结合在一起。该指南明确指出,没有简单的规则来确定蘑菇的可食用性;对于毒橡树和常春藤,没有像“传单三,顺其自然”这样的规则。

属性信息:
1.cap-shape: bell=b,conical=c,convex=x,flat=f, knobbed=k,sunken=s
2.cap-surface: fibrous=f,grooves=g,scaly=y,smooth=s
3.cap-color: brown=n,buff=b,cinnamon=c,gray=g,green=r, pink=p,purple=u,red=e,white=w,yellow=y
4.bruises?: bruises=t,no=f
5. odor: almond=a,anise=l,creosote=c,fishy=y,foul=f, musty=m,none=n,pungent=p,spicy=s
6. gill-attachment: attached=a,descending=d,free=f,notched=n
7. gill-spacing: close=c,crowded=w,distant=d
8. gill-size: broad=b,narrow=n
9. gill-color: black=k,brown=n,buff=b,chocolate=h,gray=g, green=r,orange=o,pink=p,purple=u,red=e, white=w,yellow=y
10. stalk-shape: enlarging=e,tapering=t
11. stalk-root: bulbous=b,club=c,cup=u,equal=e, rhizomorphs=z,rooted=r,missing=?
12. stalk-surface-above-ring: fibrous=f,scaly=y,silky=k,smooth=s
13. stalk-surface-below-ring: fibrous=f,scaly=y,silky=k,smooth=s
14. stalk-color-above-ring: brown=n,buff=b,cinnamon=c,gray=g,orange=o, pink=p,red=e,white=w,yellow=y
15. stalk-color-below-ring: brown=n,buff=b,cinnamon=c,gray=g,orange=o, pink=p,red=e,white=w,yellow=y
16. veil-type: partial=p,universal=u
17. veil-color: brown=n,orange=o,white=w,yellow=y
18. ring-number: none=n,one=o,two=t
19.ring-type: cobwebby=c,evanescent=e,flaring=f,large=l, none=n,pendant=p,sheathing=s,zone=z
20. spore-print-color: black=k,brown=n,buff=b,chocolate=h,green=r, orange=o,purple=u,white=w,yellow=y
21. population: abundant=a,clustered=c,numerous=n, scattered=s,several=v,solitary=y
22. habitat: grasses=g,leaves=l,meadows=m,paths=p, urban=u,waste=w,woods=d

4.2数据准备

导入数据

# 导入第三方包
import pandas as pd
# 读取数据
mushrooms = pd.read_csv(r"D:\CSDN\machine learning\data\mushrooms.csv")
# 数据的前5行
mushrooms.head()

在这里插入图片描述

将字符型数据作因子化处理,将其转换为整数型数据

columns = mushrooms.columns[1:]
for column in columns:
    mushrooms[column] = pd.factorize(mushrooms[column])[0]
mushrooms.head()

在这里插入图片描述

4.3划分训练集和测试集

from sklearn import model_selection
# 将数据集拆分为训练集合测试集
Predictors = mushrooms.columns[1:]
X_train,X_test,y_train,y_test = model_selection.train_test_split(mushrooms[Predictors], mushrooms['type'], 
                                                                 test_size = 0.25, random_state = 10)

4.4多项式贝叶斯模型建立

from sklearn import naive_bayes
from sklearn import metrics
import seaborn as sns
import matplotlib.pyplot as plt
# 构建多项式贝叶斯分类器的“类”
mnb = naive_bayes.MultinomialNB()
# 基于训练数据集的拟合
mnb.fit(X_train, y_train)
# 基于测试数据集的预测
mnb_pred = mnb.predict(X_test)

4.5绘制混淆矩阵

mnb_pred = mnb.predict(X_test)
# 构建混淆矩阵
cm = pd.crosstab(mnb_pred,y_test)
# 绘制混淆矩阵图
sns.heatmap(cm, annot = True, cmap = 'GnBu', fmt = 'd')
# 去除x轴和y轴标签
plt.xlabel('Real')
plt.ylabel('Predict')
# 显示图形
plt.show()

在这里插入图片描述

4.6查看模型预测的准确率

# 模型的预测准确率
print('模型的准确率为:\n',metrics.accuracy_score(y_test, mnb_pred))
print('模型的评估报告:\n',metrics.classification_report(y_test, mnb_pred))

在这里插入图片描述

由图发现,模型在测试数据集上的整体预测准确率为87%,无毒蘑菇的预测覆盖率为92%,有毒蘑菇的预测覆盖率为82%。

4.7计算正例的预测概率,用于生成ROC曲线的数据

from sklearn import metrics
# 计算正例的预测概率,用于生成ROC曲线的数据
y_score = mnb.predict_proba(X_test)[:,1]
fpr,tpr,threshold = metrics.roc_curve(y_test.map({'edible':0,'poisonous':1}), y_score)
# 计算AUC的值
roc_auc = metrics.auc(fpr,tpr)

# 绘制面积图
plt.stackplot(fpr, tpr, color='steelblue', alpha = 0.5, edgecolor = 'black')
# 添加边际线
plt.plot(fpr, tpr, color='black', lw = 1)
# 添加对角线
plt.plot([0,1],[0,1], color = 'red', linestyle = '--')
# 添加文本信息
plt.text(0.5,0.3,'ROC curve (area = %0.2f)' % roc_auc)
# 添加x轴与y轴标签
plt.xlabel('1-Specificity')
plt.ylabel('Sensitivity')
# 显示图形
plt.show()

在这里插入图片描述


总结

对于离散型自变量的数据集而言,在分类问题上并非都可以使用多项式贝叶斯分类器,如果自变量在特定y值下的概率不服从多项式分布的话,分类器的效果是不理想的。通常情况下,会利用多项式贝叶斯模型作文本分类,如判断邮件是否为垃圾邮件,用户评论是否为正面等等。

📢文章下方有交流学习区!一起学习进步!💪💪💪
📢首发CSDN博客,创作不易,如果觉得文章不错,可以点赞👍收藏📁评论📒
📢你的支持和鼓励是我创作的动力❗❗❗

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

银行数字化转型导师坚鹏:银行业务数字化创新工作坊

银行业务数字化创新工作坊 课程背景: 很多银行存在以下问题: 不清楚如何进行业务数字化创新? 不知道如何开展银行数字化营销工作? 不知道零售业务数字化创新成功案例? 学员收获: 学习原创银行BLM…

【音视频】国际双向对讲方案

语音对讲的的整体流程为: 先拉流播放设备的视频;使用WebRTC推送语音流到ZLM服务;使用SIP协议下发Broadcast指令给设备;接收到设备的OK指令后,请求ZLM的startSendRtp接口,TCP协议请求startSendRtpPassive接口…

springboot集成webmagic和selenium,并部署到linux(问题坑)

springboot集成webmagic和selenium,并部署到linux(问题坑) 首先参考两个源代码spring boot集成找不到org.openqa.selenium.remote.AbstractDriverOptions的类文件代理ip--更换一个网页同时更换一个代理ip代理ip网址部署linux谷歌浏览器下载谷…

Python冒泡排序的实现

时间复杂度: 最坏时间复杂度O(n^2) 最优时间复杂度O(n):表遍历一次发现没有任何可以交换的元素,排序结束,这是最理想的 稳定性:稳定,(执行前后没有对数据没有变化,位置等) 原理和方…

供需两端催化口腔医疗服务市场增长 未来将呈现线上化、智能化、品质化三大趋势

一、口腔医疗服务行业概述 口腔由唇、颊、舌、腭、涎腺、牙和颌骨等部分组成。口腔疾病种类繁多,伴随人全生命周期,常见疾病有龋病、牙周疾病、牙髓病、根尖周病、牙齿缺损、错颌畸形等,多数口腔疾病的发病率高,诊疗需求大。除此…

深度强化学习——策略学习(3)

本文的重点:使用一个神经网络来近似策略函数Π 我们使用一个神经网络来近似策略函数,这个神经网络叫做策略网络,他可以用来控制agent运动,想要训练这个神经网络,就要用到policy gradient算法 策略函数Π的输入是当前…

苹果离开中国制造影响有多大?后果不堪设想,可能是灭顶之灾

由于苹果力推印度制造,各方都对苹果与中国制造的关系高度关注,那么苹果真的离开中国制造的话,结果会如何呢?对双方来说,影响会非常大,超出想象。 一、中国制造对苹果的依赖 苹果对产业链拥有巨大的影响力&a…

Python基础快速入门

一、中文编码问题 带大家过一遍菜鸟学python的基础内容 二、Python基础语法 1、Python 中的标识符是区分大小写的。 以下划线开头的标识符是有特殊意义的。以单下划线开头 _foo 的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用 from x…

用Socket API建立简易TCP服务端、客户端

//---------------------- //-- 用Socket API建立简易TCP客户端 // 1 建立一个Socket // 2 连接服务器 connect // 3 接收服务器信息 recv // 4关闭套接字 closesocket // -- 用Socket API建立简易TCP服务端 // 1 建立一个socket // 2 bind 绑…

JetBrains Gateway IDEA远程开发

为什么进行远程开发? 无论身处何处数秒内连接至远程环境 充分利用远程计算机的强大功能 在任何笔记本电脑上都可以轻松工作,无论其性能如何。借助远程计算机的计算资源,充分利用最大规模的数据集和代码库。在远程服务器上保护敏感代码 如果…

知识变现海哥|你为什么知识却不富有,是你不懂这个道理

要有价值观念,要有交换思维。商业的本质都是基于价值交换,你能为别人提供多少价值,你就能赚多少米,你帮助别人处理的问题越多你越有价值,你能成就多少人你就能被多少人成就。这是商业行为的底层逻辑。 你没赚到米 一是…

老胡的周刊(第088期)

老胡的信息周刊[1],记录这周我看到的有价值的信息,主要针对计算机领域,内容主题极大程度被我个人喜好主导。这个项目核心目的在于记录让自己有印象的信息做一个留存以及共享。 🎯 项目 nginx-ui[2] Nginx 后台管理 UI:…

港联证券|TMT板块全线退潮,这些个股获主力逆市抢筹

计算机、电子、传媒、通讯职业流出规模居前。 今天沪深两市主力资金净流出709.92亿元,其中创业板净流出218.36亿元,沪深300成份股净流出187.92亿元。 资金流向上,今天申万一级职业普跌,除了国防军工职业小幅上涨,获主…

vim编辑器使用教程

文章目录 前言一、vim 的三种工作模式二、vim 基本操作1、编辑2、复制粘贴3、撤销4、跳转5、查找和替换6、自动缩进7、分屏8、其他 三、vim 配置文件 前言 vim 是 Linux 系统内置的「文本编辑器」,用于查看或编辑文件的内容,学会使用 vim 编辑器&#x…

【ros】7.ros导航navigation(定位规划)

物竞天择,优胜劣汰;苟不自新,何以获存。——梁启超 文章目录 :smirk:1. ros导航:blush:2. 2d导航:satisfied:3. 3d导航 😏1. ros导航 ros机器人有个导航功能,类似自动驾驶车辆的规控部分,即根据地图&…

性能测试:深入理解线程数,并发量,TPS,看这一篇就够了

并发数,线程数,吞吐量,每秒事务数(TPS)都是性能测试领域非常关键的数据和指标。 那么他们之间究竟是怎样的一个对应关系和内在联系? 测试时,我们经常容易将线程数等同于表述为并发数&#xff…

短视频app搭建的技术难点是什么?

近年来,短视频app的流行引起了广泛关注。越来越多的企业开始投入资源来开发短视频app,以满足用户的需求。然而,短视频app的开发过程中,存在许多技术难点需要解决。本文将深入分析短视频app搭建的技术难点。 短视频app的意义 随着…

Centos 7 内核在线升级

目录 一、参考文档 二、升级centos内核 三、centos内核一键升级脚本 一、参考文档 1、内核版本的分类等相关信息见官网:https://www.kernel.org/ 2、 第三方仓库ELRepo参考官网:http://elrepo.org/tiki/HomePage 3、国内yum源:https://…

为什么大量失业集中爆发在2023年?被裁?别怕!失业是跨越职场瓶颈的关键一步!对于牛逼的人,这是白捡N+1!...

被裁究竟是因为自身能力不行,还是因为大环境不行? 一位网友说: 被裁后找不到工作,本质上还是因为原来的能力就配不上薪资。如果确实有技术在身,根本不怕被裁,相当于白送n1! 有人赞同楼主的观点&…

如何在视频直播网站开发上集成即时聊天功能

视频直播网站开发需要考虑许多因素,其中一个非常重要的因素是与观众的互动。为了增强观众的参与度和留存率,许多视频直播网站都已经开始集成即时聊天功能。本文将介绍如何在视频直播网站开发上集成即时聊天功能,以提高观众的参与度和留存率。…