数据挖掘与机器学习作业_09 贝叶斯

news2024/9/24 13:22:28

贝叶斯

贝叶斯公式

请添加图片描述

后验概率 = 先验概率 * 似然估计

from sklearn.model_selection import GridSearchCV
from sklearn.naive_bayes import BernoulliNB
from sklearn.naive_bayes import GaussianNB
from sklearn.naive_bayes import MultinomialNB
from sklearn.naive_bayes import ComplementNB
from sklearn.feature_selection import mutual_info_classif
from imblearn.over_sampling import SMOTE
import matplotlib.pyplot as plt
from sklearn.manifold import TSNE
from sklearn.metrics import brier_score_loss as BS
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import train_test_split
from imblearn.over_sampling import RandomOverSampler
from sklearn.preprocessing import KBinsDiscretizer
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
# 导入自己写的工具类
from my_tools import *
# 忽略warning
import warnings
warnings.filterwarnings("ignore")

加载数据

jibing_res = pd.read_excel("./jibing_feature_res_final.xlsx")
jibing = pd.read_excel("./jibing_feature_final.xlsx")
clf = GaussianNB()
Xtrain,Xtest,Ytrain,Ytest = train_test_split(jibing,jibing_res,test_size=0.3)
clf.fit(Xtrain, Ytrain)
y_pre = clf.predict(Xtest)
metrics_ = res_metrics(Ytest,y_pre,"贝叶斯")
#######################贝叶斯########################
+--------------------+--------+-------------------+
|     precision      | recall |         f1        |
+--------------------+--------+-------------------+
| 0.8585909417685119 | 0.9375 | 0.896312084415292 |
+--------------------+--------+-------------------+

按照高斯贝叶斯的原理,将样本标准化

并且解决样本不均衡的问题

col = jibing.columns.tolist()
col = col[10:59]
col.append("年龄")
smote = SMOTE(sampling_strategy=1, random_state=42)
Xtrain,Xtest,Ytrain,Ytest = train_test_split(jibing,jibing_res,test_size=0.3,random_state=42)
Xtrain, Ytrain = smote.fit_resample(Xtrain,Ytrain)

归一化

jibing = guiyihua(jibing)

标准化

jibing = biaozhunhua(jibing)
Xtrain,Xtest,Ytrain,Ytest = train_test_split(jibing,jibing_res,test_size=0.3)
jibing.head()
左右是否外伤症状持续时间明显夜间痛年龄高血压高血脂2型糖尿病吸烟与否饮酒与否...腺苷脱氨酶ADA果糖胺肌酸激酶α-L-盐藻糖苷酶乳酸淀粉酶同型半胱氨酸总铁结合力血型
000300.4028641000-0.448892...-0.396787-0.160764-0.176406-1.2411220.269307-0.755958-0.420427-0.880622-1.2260993
111200.1802581000-0.448892...-0.396787-0.079732-0.098498-0.773740-0.3907230.608493-0.538745-0.1325860.0887610
21041-0.3391560000-0.448892...1.055008-0.035743-0.095811-0.0726670.2693070.949606-0.420427-1.742489-0.3604830
310300.0318540000-0.448892...1.345367-0.077417-0.058200-1.241122-0.3907230.096824-0.521842-0.311464-0.1851680
401300.1060560000-0.448892...0.474290-0.095938-0.149541-1.0074310.0052953.678509-0.724673-0.734267-0.9631270

5 rows × 60 columns

高斯贝叶斯的 f1-score 为0.902

clf = GaussianNB()
clf = clf.fit(Xtrain,Ytrain)
y_pre = clf.predict(Xtest)
metrics_ = res_metrics(Ytest,y_pre,"高斯朴素贝叶斯")
#####################高斯朴素贝叶斯######################
+--------------------+---------+--------------------+
|     precision      |  recall |         f1         |
+--------------------+---------+--------------------+
| 0.8452734465080802 | 0.96875 | 0.9028093356576747 |
+--------------------+---------+--------------------+

多项式贝叶斯

由于多项式贝叶斯中样本不能为负数,所以要重新加载数据

只进行归一化

jibing_res = pd.read_excel("./jibing_feature_res_final.xlsx")
jibing = pd.read_excel("./jibing_feature_final.xlsx")
jibing = guiyihua(jibing)
col = jibing.columns.tolist()
col = col[10:59]
col.append("年龄")
smote = SMOTE(sampling_strategy=1, random_state=42)
Xtrain,Xtest,Ytrain,Ytest = train_test_split(jibing,jibing_res,test_size=0.3,random_state=42)
Xtrain, Ytrain = smote.fit_resample(Xtrain,Ytrain)
clf = MultinomialNB()
clf.fit(Xtrain, Ytrain)
y_pre = clf.predict(Xtest)
metrics_ = res_metrics(Ytest,y_pre,"多项式朴素贝叶斯")
#####################多项式朴素贝叶斯#####################
+--------------------+--------------------+--------------------+
|     precision      |       recall       |         f1         |
+--------------------+--------------------+--------------------+
| 0.8068610589952052 | 0.5689655172413793 | 0.6673459107453557 |
+--------------------+--------------------+--------------------+

分箱

jibing_res = pd.read_excel("./jibing_feature_res_final.xlsx")
jibing = pd.read_excel("./jibing_feature_final.xlsx")
col = jibing.columns.tolist()
col = col[10:59]
col.append("年龄")
est = KBinsDiscretizer(n_bins=67, encode='ordinal', strategy="kmeans")
est.fit(jibing[col])
jibing[col] = est.transform(jibing[col])
clf = MultinomialNB()
sampler = RandomOverSampler(sampling_strategy=1, random_state=42)
jibing, jibing_res = sampler.fit_resample(jibing,jibing_res)
Xtrain,Xtest,Ytrain,Ytest = train_test_split(jibing,jibing_res,test_size=0.3)
clf.fit(Xtrain, Ytrain)
y_pre = clf.predict(Xtest)
metrics_ = res_metrics(Ytest,y_pre,"分箱的多项式朴素贝叶斯")
###################分箱的多项式朴素贝叶斯####################
+--------------------+------------------+--------------------+
|     precision      |      recall      |         f1         |
+--------------------+------------------+--------------------+
| 0.6029950247501015 | 0.58679706601467 | 0.5947857849977222 |
+--------------------+------------------+--------------------+

多项式贝叶斯的 f1-score 为0.66

伯努利朴素贝叶斯

伯努利贝叶斯分类器中,指定各个特征是独立的,没有相互关联。

这里考虑到疾病的理化指标不可能是相互独立的,所以这种方法不适用。

ComplementNB 互补朴素贝叶斯

jibing_res = pd.read_excel("./jibing_feature_res_final.xlsx")
jibing = pd.read_excel("./jibing_feature_final.xlsx")
col = jibing.columns.tolist()
col = col[10:59]
col.append("年龄")
est = KBinsDiscretizer(n_bins=67, encode='ordinal', strategy="kmeans")
est.fit(jibing[col])
jibing[col] = est.transform(jibing[col])
smote = SMOTE(sampling_strategy=1, random_state=42)
Xtrain,Xtest,Ytrain,Ytest = train_test_split(jibing,jibing_res,test_size=0.3,random_state=42)
Xtrain, Ytrain = smote.fit_resample(Xtrain,Ytrain)
clf = ComplementNB()
param_grid = {'alpha': np.linspace(0,1,20), 'fit_prior': [True, False]}
grid_search = GridSearchCV(clf, param_grid=param_grid, cv=5)
grid_search.fit(Xtrain, Ytrain)
GridSearchCV(cv=5, estimator=ComplementNB(),
             param_grid={'alpha': array([0.        , 0.05263158, 0.10526316, 0.15789474, 0.21052632,
       0.26315789, 0.31578947, 0.36842105, 0.42105263, 0.47368421,
       0.52631579, 0.57894737, 0.63157895, 0.68421053, 0.73684211,
       0.78947368, 0.84210526, 0.89473684, 0.94736842, 1.        ]),
                         'fit_prior': [True, False]})
grid_search.best_params_
{'alpha': 0.0, 'fit_prior': True}
clf = ComplementNB(alpha=0,fit_prior=True)
clf.fit(Xtrain, Ytrain)
y_pre = clf.predict(Xtest)
metrics_ = res_metrics(Ytest,y_pre,"互补朴素贝叶斯")
#####################互补朴素贝叶斯######################
+-------------------+--------------------+--------------------+
|     precision     |       recall       |         f1         |
+-------------------+--------------------+--------------------+
| 0.818403768342936 | 0.5172413793103449 | 0.6338693996893425 |
+-------------------+--------------------+--------------------+

互补朴素贝叶斯的 f1-score 为0.63

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

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

相关文章

关于进程间的通信方式的总结

一、背景 在人类思想史上,马克思第一次对人的本质作出科学界定:人的本质是一切社会关系的总和。时间万物都存在或多或少的关系。那么人除了天生父子这样的家族关系,还有后天 通过 语言 ,这样区别于其他动物的方式来进行和其他人的交流产生关系。 在计算…

PTL仓库提货解决方案

电子标签拣货系统是采用先进电子技术和通信技术开发而成的物流辅助作业系统,通常使用在仓储或现代化物流中心分拣环节,具有拣货速度快、效率高、差错率低、无纸化、标准化的作业特点,电子标签辅助拣货系统作为一种先进的作业手段,…

【小程序】如何开发属于自己的一款小程序

文章目录小程序简介概念小程序与普通网页开发的区别微信开发者工具小程序代码构成项目结构JSON 配置文件WXML 模板WXSS 样式JS 逻辑交互小程序的宿主环境宿主环境简介通信模型运行机制组件常用的视图容器类组件常用的基础内容组件其它常用组件API协同工作小程序成员管理小程序的…

数据完整性测试之【三】Redis缓存和数据库表里的记录

本文为博主原创,未经授权,严禁转载及使用。 本文链接:https://blog.csdn.net/zyooooxie/article/details/119377944 前面分享过 接口返回值 和 表记录 的校验 、 导出的CSV、Excel文件 和 表记录 的校验,最近 我们项目常常用到Re…

【大小端问题】

什么是大小端? 为什么存在大小端?如何判断计算机的大小端存储模式? 大小端是什么? 计算机在内存存储中有两中存储模式: 大端字节序存储模式和小端字节序存储模式。 大端存储模式,是指数据的低位保存在内…

API接口测试简介

今天继续给大家介绍渗透测试相关知识,本文主要内容是API接口测试简介。 免责声明: 本文所介绍的内容仅做学习交流使用,严禁利用文中技术进行非法行为,否则造成一切严重后果自负! 再次强调:严禁对未授权设备…

Hadoop高手之路8-Flume日志采集

文章目录Hadoop高手之路8-Flume日志采集一、Flume概述1. Flume简介2. Flume运行机制3. Flume日志采集系统结构图二、Flume的搭建1. 下载2. 上传3. 解压4. 配置环境变量5. 配置flume三、Flume入门使用1. 配置数据采集方案1) 查看官网2) 案例需求3) 创建新的配置文件4) 复制官网的…

公司业财一体化详解

一、传统财务会计如何手工做账1.没有财务系统(软件)时公司会计用手工记账,流程包括:建立总账;首先建立账簿,登记会计账簿时,应当将会计凭证日期、编号、业务内容摘要、金额和其他有关资料逐项计…

GAMES101作业5及框架梳理

闲言碎语 emmm,上一次写还是2022年4月份的事情了,真的有点恍如隔世,4月到9月主要是在准备保研的事情,然后10月到12月基本上是在适应实习生活(没错,保完研之后因为种种原因就直接开始实习了,害&…

[Vue]Vue3学习笔记(尚硅谷)

文章目录🥽 创建Vue3项目🌊 vue-cli🌊 vite🥽 项目结构🥽 Vue3开发者工具的安装🥽 初识setup🥽 ref 函数🥽 reactive函数🥽Vue3.0中的响应式原理🌊 vue2.x的响…

微服务架构解决方案介绍

1、微服务架构 目前微服务是非常火的架构或者说概念,也是在构建大型互联网项目时采用的架构方式。 1.1 单体架构 在软件设计中,经常提及和使用经典的3层模型,即表示层、业务逻辑层和数据访问层。 表示层:用于直接和用户交互&a…

内网穿透(mac,window,linux通用)1分钟实现外网访问电脑本地服务器

我们在做开发时,不想购买服务器,只想搭建我们本地的服务器,我们搭建的本地服务器只能供我们自己电脑的浏览器访问,或者处于同一个wifi下的手机访问,但是我们如果想让别人访问到我们的本地服务器,尤其做微信…

共享模型之管程(三)

1.Synchronized优化原理 1.1.轻量级锁(Lock Record) 1.1.1.简介 1>.轻量级锁的使用场景:如果一个对象虽然有多个线程访问,但是多个线程访问的时间是错开的(即没有竞争),那么可以使用轻量级锁来进行优化; 2>.轻量级锁对使用者是透明的,即语法仍然是"synchronized…

docker减少构建镜像大小

目录 1.原镜像大小 1.1 Dockerfile文件 1.2 hello文件 1.3 进入文件夹myprojecthello打包镜像 1.4查看打包的镜像 2.通过拆分文件夹减少镜像大小 2.1 创建两个文件夹 2.2 移动文件 2.3 打包镜像 3. 通过 .dockerignore 文件的方式 3.1 创建 world.txt文件 3.2 创建 …

【Spring(三)】DI入门案例(XML版)

文章目录前言DI入门案例总结前言 前面我们已经演示了IOC入门案例的介绍,里边还有一些东西是耦合的,接下来我们就来学习DI的入门案例来解决这个问题💪💪。 DI入门案例 我们先来想一下,你做DI这个首先得先让IOC容器管着b…

STM32 TIM PWM中阶操作:互补PWM输出

STM32 TIM PWM中阶操作详解:互补PWM输出 STM32 TIM可以输出管脚PWM信号适合多种场景使用,功能包括单线/非互补PWM输出,双线/互补PWM输出,以及死区时间和刹车控制等。 实际上,因为早期IP Core的缺陷,早期的…

万应低代码12月重点更新内容速递

速览版 详情版 低代码开发效率升级 01 动作流 动作编排过程中涉及到多条件判断时使用,即:满足某条件可执行一条分支,不满足则执行“其他”分支。 【使用场景】 ● 以“个人所得税计算”场景为例,不同收入水平的人输入不同的收…

人工智能对联生成 API 数据接口

人工智能对联生成 API 数据接口 基于百万数据训练,AI 训练与应答,多结果返回。 1. 产品功能 AI 基于百万历史对联数据训练应答模型;机器学习持续训练学习;一个上联可返回多个下联应答;毫秒级响应性能;数据…

关键字:final

文章目录一、final修饰类修饰方法修饰变量修饰属性修饰局部变量static final练习每日一考一、final final:最终的 final可以修饰的结构:类、方法、变量 修饰类 此类不能被其他类所继承 修饰方法 此方法不可以被重写 修饰变量 此时的“变量”就称为…

ACL论文总结

「博士毕业一年,我拿下 ACL Best Paper」 在不久前结束的自然语言处理NLP,领域顶级学术会议ACL2021上,字节跳动AL lab研究院许晶晶,完成了他的演讲。 在全球顶会做完分享后,许晶晶感到很欣慰,没想到&#…