【机器学习】朴素贝叶斯算法:多项式、高斯、伯努利,实例应用(心脏病预测)

news2024/12/24 20:49:04

1. 朴素贝叶斯模型

对于不同的数据,我们有不同的朴素贝叶斯模型进行分类。

1.1 多项式模型

(1)如果特征是离散型数据,比如文本这些,推荐使用多项式模型来实现。该模型常用于文本分类,特别是单词,统计单词出现的次数。

调用方法: from sklearn.naive_bayes import MultinomialNB

1.2 高斯模型

(2)如果特征是连续型数据,比如具体的数字,推荐使用高斯模型来实现,高斯模型即正态分布。当特征是连续变量的时候,运用多项式模型就会导致很多误差,此时即使做平滑,所得到的条件概率也难以描述真实情况。所以处理连续的特征变量,应该采用高斯模型。

调用方法: from sklearn.naive_bayes import GaussianNB

1.3 伯努利模型

(3)如果特征是离散性数据并且值只有0和1两种情况,推荐使用伯努利模型。在伯努利模型中,每个特征的取值是布尔型的,即TrueFalse,或者1和0。在文本分类中,表示一个特征有没有在一个文档中出现。

调用方法: from sklearn.naive_bayes import BernoulliNB

2. 心脏病预测

2.1 数据获取

        获取心脏病的病例数据,共13项特征值,300多条数据。文末提供数据链接

#(1)导入心脏病数据
import pandas as pd
filepath = 'C:\\Users\\admin\\.spyder-py3\\test\\文件处理\\心脏病\\heart.csv'
data = pd.read_csv(filepath)


 2.2 数据处理

        首先将导入的数据重新洗牌,行数据之间随机交换。然后将原始数据拆分成特征值和目标值,特征参数是:胆固醇、年龄等13项数据,目标为target这一列,即是否得了心脏病。为了验证最后预测结果的正确性,取最后10行数据用于模型验证验证集的特征值数据用于输入最终的预测函数.predict()中,验证集的目标值来检验预测结果是否正确。提取出验证集之后,将用于建模的特征值和目标值删除最后10行即可。

#(2)数据处理
# 重新洗牌,行互换后,让索引从0开始
data = data.sample(frac=1).reset_index(drop=True)
# 提取目标值target一列
data_target = data['target']
# 提取目标值
data_feature = data.drop('target',axis=1)
# 取出最后10行作为验证集
data_predict_feature = data_feature[-10:]  #作为最后预测函数的输入
data_predict_target = data_target[-10:]  #用来验证预测输出结果的正确性
# 建模用的特征值和目标值删去最后10行
data_feature = data_feature[:-10]  #x数据
data_target = data_target[:-10]    #y数据


 2.3 划分训练集和测试集

一般采用75%的数据用于训练,25%用于测试,因此把数据进行训练之前,先要对数据划分。

划分方式:
x_train,x_test,y_train,y_test = train_test_split(x数据,y数据,test_size=数据占比)

有关划分划分训练集和测试集的具体操作,包括参数、返回值等

#(3)划分训练集和测试集
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test = train_test_split(data_feature,data_target,test_size=0.25)

2.4 使用朴素贝叶斯高斯模型

        心脏病数据中大多是连续型数据,少数是0、1离散型数据,因此先采用高斯模型进行训练,然后再采用多项式模型训练,对比这两种方法的准确率

#(4)高斯模型训练
# 导入朴素贝叶斯--高斯模型方法
from sklearn.naive_bayes import GaussianNB
# gauss_nb接收高斯方法
gauss_nb = GaussianNB()
# 模型训练,输入训练集
gauss_nb.fit(x_train,y_train)
# 计算准确率--评分法
gauss_accuracy = gauss_nb.score(x_test,y_test)
# 预测
gauss_result = gauss_nb.predict(data_predict_feature)

        导入高斯模型方法,gauss_nb接收该方法;使用.fit()函数进模型训练;采用.score()函数用评分法查看模型准确率,根据x_test预测结果,把结果和真实的y_test比较,计算准确率;最终将验证集的特征值传入.predict()函数预测是否得了心脏病,将最终预测结果与真实值比较,发现有少许偏差,模型准确率在0.83左右。


2.5 使用朴素贝叶斯多项式模型 

        心脏病数据中存在少量的离散数据,实际操作中多项式模型不适用于该案例,我使用多项式模型和高斯模型进行比较,让大家优个直观感受。操作方法和高斯模型类似

#(5)多项式模型训练
# 导入朴素贝叶斯--多项式方法
from sklearn.naive_bayes import MultinomialNB
# multi_nb接收多项式方法
multi_nb = MultinomialNB()
# 多项式方法进行训练,输入训练集
multi_nb.fit(x_train,y_train)
# 评分法计算准确率
multi_accuracy = multi_nb.score(x_test,y_test)
# 预测
multi_result = multi_nb.predict(data_predict_feature)

        最终的结果为,多项式模型的准确率在0.75左右,预测结果和实际结果相比偏差较大,因此在使用朴素贝叶斯方法,对有较多连续型数据进行分类预测时,高斯模型的准确度明显高于多项式模型。


心脏病数据集自取: 

链接:百度网盘 请输入提取码 提取码:a9wl

完整代码展示:
# 朴素贝叶斯高斯模型心脏病预测
 
#(1)导入心脏病数据
import pandas as pd
filepath = 'C:\\Users\\admin\\.spyder-py3\\test\\文件处理\\心脏病\\heart.csv'
data = pd.read_csv(filepath)
 
#(2)数据处理
# 重新洗牌,行互换后,让索引从0开始
data = data.sample(frac=1).reset_index(drop=True)
# 提取目标值target一列
data_target = data['target']
# 提取目标值
data_feature = data.drop('target',axis=1)
# 取出最后10行作为验证集
data_predict_feature = data_feature[-10:]  #作为最后预测函数的输入
data_predict_target = data_target[-10:]  #用来验证预测输出结果的正确性
# 建模用的特征值和目标值删去最后10行
data_feature = data_feature[:-10]  #x数据
data_target = data_target[:-10]    #y数据
 
#(3)划分训练集和测试集
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test = train_test_split(data_feature,data_target,test_size=0.25)
 
#(4)高斯模型训练
# 导入朴素贝叶斯--高斯模型方法
from sklearn.naive_bayes import GaussianNB
# gauss_nb接收高斯方法
gauss_nb = GaussianNB()
# 模型训练,输入训练集
gauss_nb.fit(x_train,y_train)
# 计算准确率--评分法
gauss_accuracy = gauss_nb.score(x_test,y_test)
# 预测
gauss_result = gauss_nb.predict(data_predict_feature)
 
#(5)多项式模型训练
# 导入朴素贝叶斯--多项式方法
from sklearn.naive_bayes import MultinomialNB
# multi_nb接收多项式方法
multi_nb = MultinomialNB()
# 多项式方法进行训练,输入训练集
multi_nb.fit(x_train,y_train)
# 评分法计算准确率
multi_accuracy = multi_nb.score(x_test,y_test)
# 预测
multi_result = multi_nb.predict(data_predict_feature)

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

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

相关文章

Java实现身份证号校验,最后一位校验码校验

中国居民身份证号码编码规则 第一、二位表示省(自治区、直辖市、特别行政区)。 第三、四位表示市(地级市、自治州、盟及国家直辖市所属市辖区和县的汇总码)。其中,01-20,51-70表示省直辖市;21-5…

《AI超级个体:ChatGPT与AIGC实战指南 》书籍分享

前言 ChatGPT是一款通用人工智能(AI)工具,使用过它的人都能感受到它的魅力。AI并不是一个新事物,它在全世界都发展很多年了,但在ChatGPT诞生之前,我们的AI只能算垂直AI,比如AlphaGo&#xff0c…

刘家窑中医医院:鲁卫星主任团队走进社区,免费义诊送健康"

北京丰台刘家窑中医医院,前身为中国医学会航空医学会专家门诊,是一家医保单位,无需定点即可享受医保服务。这是一家集医疗、科研、预防、保健为一体的国家非营利性特色中医院。为了更好地服务社区群众,提高社区居民对健康的关注&a…

Python爬虫程序网络请求及内容解析

以下是一个简单的Python爬虫程序,用于爬取商户的内容。这个程序使用了requests和BeautifulSoup库来进行网络请求和内容解析。 import requests from bs4 import BeautifulSoup# 爬虫爬虫IP信息 proxy_host duoip proxy_port 8000# 请求URL url 目标网站# 创建一个…

typhonjs-escomplex 代码可读性 可维护度探索

目前市面上的前端代码质量评分中的代码可维护度是大都是基于 typhonjs-escomplex 这个库扫描而来,但是这个库的官方文档并没有介绍相关指标数据的计算规则,不知道规则如何提升指标数据呢?所以本文对 typhonjs-escomplex 源码进行探索&#xf…

NI和EttusResearchUSRP设备之间的区别

NI和EttusResearchUSRP设备之间的区别 概述 USRP(通用软件无线电外设)设备是业界领先的商软件定义无线电(SDR)。全球数以千计的工程师使用USRPSDR来快速设计、原型设计和部署无线系统。它们以两个不同的品牌进行营销和销售&…

机器学习线性代数知识补充

线性代数知识补充 正交矩阵与正交变换方阵特征值与特征向量相似矩阵对角化二次型正定二次型 正交矩阵与正交变换 方阵特征值与特征向量 相似矩阵 对角化 二次型 正定二次型

如何在Jupyter Lab中安装不同的Kernel

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️ 👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…

50.批处理脚本(2/2)

目录 一、批处理命令。 (1)net use 连接共享文件夹或查看。 (1.1)连接共享文件夹。 (1.2)断开连接。 (1.3)显示当前连接。 (1.4)查看电脑的共享文件夹。…

[文件读取]cuberite 文件读取 (CVE-2019-15516)

1.1漏洞描述 漏洞编号CVE-2019-15516漏洞类型文件上传漏洞等级⭐⭐⭐漏洞环境VULFOCUS攻击方式 描述: Cuberite是一款使用C语言编写的、轻量级、可扩展的多人游戏服务器。 Cuberite 2019-06-11之前版本中存在路径遍历漏洞。该漏洞源于网络系统或产品未能正确地过滤资源或文件路…

计算机操作系统—经典同步问题

经典同步问题 1.生产者与消费者问题 1.1.问题概述 在现实生活中,当我们缺少某些生活用品时,就会到超市去购买。当你到超市时,你的身份就是消费者,那么这些商品又是哪里来的呢,自然是供应商,那么它们就是生…

Python基础入门----如何使用 Pipenv 在项目目录中创建虚拟环境

文章目录 引言Pipenv 简介安装 Pipenv在项目目录中创建虚拟环境1. 进入你的项目目录2. 设置环境变量3. 创建虚拟环境4. 激活虚拟环境结论引言 在Python开发中,使用虚拟环境是一种良好的实践,它可以帮助开发者管理项目的依赖,并避免不同项目间的依赖冲突。Pipenv 是一个流行…

MySQL8 绿色版安装

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: MySQL学习 ✨特色专栏: My…

SAP:解决函数CONNE_IMPORT_WRONG_COMP_DECS CX_SY_IMPORT_MISMATCH_ERROR错误

用户反馈报表中取数异常,经检查发现SE37执行取数函数ZLY_R_CWFX03报以下错误。 Category ABAP Programming Error Runtime Errors CONNE_IMPORT_WRONG_COMP_DECS Except. CX_SY_IMPORT_MISMATCH_ERROR ABAP Program ZLY_R_CWFX03FT Application Component Not Assig…

springboot整合minio步骤

springboot整合minio步骤 springboot整合minio十分的简单&#xff0c;接下来使用springboot整合一下minio。 一、导入依赖 首先需要导入minio的依赖。 <!--maven引入minio排除okhttp依赖并添加高版本的okhttp依赖--><dependency><groupId>io.minio</g…

KT148A语音芯片的下载用的是串口,测试可以直接串口发指令控制吗

一、问题简介 KT148A语音芯片的下载用的是串口&#xff0c;那我实际测试是不是可以直接串口发指令测试控制&#xff1f;就不用单独写程序去模拟一线串口的时序了 详细描述 首先看一下KT148A芯片的参考设计原理图&#xff1a;其中芯片的2脚和3脚就是串口&#xff0c;注意下载语…

走向边缘智能,美格智能携手阿加犀成功在高算力AI模组上运行一系列大语言模型

近日&#xff0c;美格智能发挥软硬件一体协同开发能力&#xff0c;融合阿加犀卓越的AI优化部署技术&#xff0c;在搭载高通QCS8550平台的高算力AI模组上&#xff0c;成功运行了一系列大语言模型&#xff0c;包括LLaMA-2、通义千问Qwen、百川大模型、RedPajama、ChatGLM2、Vicun…

Vue 小黑记事本组件版

渲染功能&#xff1a; 1.提供数据&#xff1a; 提供在公共的父组件 App.vue 2.通过父传子&#xff0c;将数据传递给TodoMain 3.利用 v-for渲染 添加功能&#xff1a; 1.收集表单数据 v-model 2.监听事件&#xff08;回车点击都要添加&#xff09; 3.子传父&#xff0c;讲…

【电子通识】USB端口颜色编码标识

不知道你有没有发现 USB 口有不同的颜色&#xff0c;黑色、蓝色、紫色、红色、黄色等等&#xff0c;你知道不同颜色的 USB 口各代表什么意思吗&#xff1f; 这些颜色不是USB规范所要求的&#xff0c;设备制造商之间也不一致。例如&#xff0c;Intel使用橙色表示充电端口&#…

【java面试题】Integer对象输出结果是?

/** Copyright (c) 2006, 2023, webrx.cn All rights reserved.**/package cn.webrx;/*** <p>Project: wxbili2mp4 - Test* <p>Powered by webrx On 2023-11-14 20:28:46* <p>描述&#xff1a;<p>** author webrx [webrx126.com]* version 1.0* since …