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

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)

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

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

相关文章

竞赛选题 深度学习的智能中文对话问答机器人

文章目录 0 简介1 项目架构2 项目的主要过程2.1 数据清洗、预处理2.2 分桶2.3 训练 3 项目的整体结构4 重要的API4.1 LSTM cells部分:4.2 损失函数:4.3 搭建seq2seq框架:4.4 测试部分:4.5 评价NLP测试效果:4.6 梯度截断…

石原子科技亮相2023成都市信息领域新产品发布会

2023年11月13日至15日,由成都市互联网信息办公室、四川天府新区管委会、成都市经信局市新经济委、成都市农业农村局指导的以“信息创造价值 创新引领未来”为主题的成都市信息领域新产品发布会在科创生态岛1号馆举行。围绕人工智能、区块链、数字化绿色化、数字乡村…

keepalived+haproxy配置集群和负载均衡

1、简介 1.1. Keepalived Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以利用其来避免单点故障。一个LVS服务会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台为备份服务器(BACKUP),但是对外表现为一个虚拟IP,主服务器会发送特定的消息给备…

Microsoft Forms

Microsoft Forms官网:Microsoft Forms - Free tool to create online surveys, forms, polls, and quizzes Microsoft Forms主要用来自定义一些表单和问卷调查 点击新建表单 填写完表单名称之后,下面就可以添加问题了,可以选择多种提问方式…

设计模式系列之最终篇:大盘点

阅读建议 嗨,伙计!刷到这篇文章咱们就是有缘人,在阅读这篇文章前我有一些建议: 本篇文章大概4000多字,预计阅读时间长需要3分钟。本篇文章的实战性、理论性较强,是一篇质量分数较高的技术干货文章&#x…

盘点72个Python网站项目Python爱好者不容错过

盘点72个Python网站项目Python爱好者不容错过 学习知识费力气,收集整理更不易。 知识付费甚欢喜,为咱码农谋福利。 链接:https://pan.baidu.com/s/12twY8iZYhAG8BuyYXM7_bw?pwd8888 提取码:8888 项目名称 dailyfreshpython…

拼图游戏,开源代码

拼图游戏 最近玩了玩孩子的拼图游戏,感觉还挺好玩的,心血来潮要不动手做一个吧,偷懒摸鱼的时候可以来一把。 以下就是拼图游戏的界面截图。 体验地址 代码开源地址 心得体会 虽说是一个小游戏,但是需要注意的地方还是挺多的 方…

技术探秘:开发抖音小程序实现餐饮团购的关键步骤

本文将深入研究在抖音小程序上开发餐饮团购功能的关键步骤,揭示技术探秘背后的秘密。 一、了解抖音小程序开发环境 注册成为抖音小程序开发者,配置开发工具,并确保您的开发环境设置正确,以便顺利进行后续的开发工作。 二、制定团…

在 Android 上简单安全地登录——使用凭证管理器和密钥

我踏马很高兴地听说, Credential Manager的公开版本将于 11 月 1 日开始提供。Credential Manager 为 Android 带来了身份验证的未来,简化了用户登录应用程序和网站的方式,同时使其更加安全。 登录可能具有挑战性 - 密码经常使用&#xff0c…

C#中数组、ArrayList与List对象的区别及使用场景

在C#编程中,数组、ArrayList和List对象是常用的数据结构和容器。它们在存储和管理数据方面都有各自的特点和用途。本文将深入探讨这三者的区别,并通过实际的代码示例来说明它们的使用场景和优缺点。 目录 1.数组特点使用场景 2.ArrayList特点使用场景 3.…

windows10上使用Visual Studio对树莓派进行交叉编译示例

本文主要介绍通过Visual Studio对树莓派进行交叉编译的方法。 1 环境 宿主机: 系统:Windows10 开发平台:Visual Studio 2022 (我用的是社区版) VisualGDB: VisualGDB - Download (我下的试用版本) GNU工具链: Prebuilt GNU toolchain f…

python matlplotlib/seaborn 绘制曲线的平均值标准差阴影图

1. seaborn 旧版本(0.8.1)中使用tsplot,新版本中使用lineplot 直线代表均值,阴影代表meanstd(带有置信区间,参数ci) import seaborn as sns import matplotlib.pyplot as plt import numpy as np import pandas as p…

647. 回文子串 516.最长回文子序列

647. 回文子串 题目: 给你一个字符串 s ,请你统计并返回这个字符串中 回文子串 的数目。 回文字符串 是正着读和倒过来读一样的字符串。 子字符串 是字符串中的由连续字符组成的一个序列。 具有不同开始位置或结束位置的子串,即使是由相…

负公差轧钢测径仪 多规格可定制 普通智能随意选择

负公差轧制的意义: 轧钢厂生产的螺纹钢是按理论重量销,因此稳定的高负差产品极具市场竞争力。负差率即实际重量与理论重量的差值,除以理论重量,乘100%。以螺纹12为例,不按负差生产,在坯重2450kg的情况下&am…

Windows装机必装软件|每款都好用到起飞!

1.GeekUninstaller:这款软件是一款功能强大的卸载工具,可以完全删除无用的程序和插件,并清理与之相关的文件夹。它没有广告或捆绑软件,非常干净。 2.PotPlayer:作为一款纯粹的播放器,PotPlayer可以流畅播放…

KOSMOS-G-图像文本结合控制生成

文章目录 摘要引言算法多模态语言建模图像解码器对齐微调instruction 实验结论 论文: 《Kosmos-G: Generating Images in Context with Multimodal Large Language Models》 github: https://github.com/microsoft/unilm/tree/master/kosmos-g 摘要 当…

喜报不断!箱讯平台获评2023年上海市促进现代航运服务业创新示范项目

近期,可谓捷报频传!在箱讯科技子公司苏州箱讯获评苏州市软件和信息服务业 “头雁”培育企业没过多久,就又迎来好消息! 日前,上海市交通委发布“2023年上海市促进现代航运服务业创新项目”评选结果,箱讯An…

桌面便签软件用哪个?10款全球好用的便签软件推荐,告别杂论无章!

在如今的快节奏社会中,我们的生活和工作节奏越来越快,每天面对的信息成倍地增长。有时候,我们需要随手记下一些重要的事情,或者是一些突然的灵感,这时候就需要一款好用的桌面便签软件。 桌面便签软件可以帮助我们更好…

Ladybug 全景相机, 360°球形成像,带来全方位的视觉体验

360无死角全景照片总能给人带来强烈的视觉震撼,有着大片的既视感。那怎么才能拍出360球形照片呢?它的拍摄原理是通过图片某个点位为中心将图片其他部位螺旋式、旋转式处理,从而达到沉浸式体验的效果。俗话说“工欲善其事,必先利其…

《深入浅出.NET框架设计与实现》阅读笔记(四)

静态文件系统 通过ASP.NET Core 提供的静态文件模块和静态文件中间件,可以轻松的让应用程序拥有访问静态文件的功能,同时可以基于IFileProvider对象来自定义文件系统,如基于Redis做扩展文件系统 启动静态文件服务 在Program.cs 类中&#x…