朴素贝叶斯分类器 #数据挖掘 #Python

朴素贝叶斯分类器是一种基于概率统计的简单但强大的机器学习算法。它假设特征之间是相互独立的(“朴素”),尽管在现实世界中这通常不成立,但在许多情况下这种简化假设仍能提供良好的性能。

  1. 基本原理:朴素贝叶斯分类器利用贝叶斯定理,计算给定输入特征条件下属于某个类别的概率,并选择具有最高概率的那个类别作为预测结果。
  2. 计算公式:对于特征向量 ( x ) 和类别 ( C ),朴素贝叶斯估计为 ( P(C|X) = \frac{P(X|C) * P©}{P(X)} ),其中 ( P(X|C) ) 是在类别 ( C ) 下特征出现的概率,( P© ) 是类别出现的概率,而 ( P(X) ) 是特征集的整体概率,通常用先验知识或训练数据估计。

它的优点包括:

  1. 计算效率高:由于其"朴素"假设(即特征之间相互独立),在训练阶段计算每个类别的条件概率相对容易,这使得在大数据集上处理时速度非常快。
  2. 鲁棒性:对于缺失数据处理较为友好,只要数据满足一定的独立性,即使有部分特征缺失,也能给出预测。
  3. 可解释性强:模型基于简单的概率公式,结果易于理解,可以直观地解释某个实例属于哪个类别。
  4. 并行计算友好:分类过程可以很容易地并行化,适合分布式系统。
  5. 对新数据适应性强:一旦训练完成,新的观测值可以快速分类,没有存储和计算所有历史数据的限制。
  6. 对小样本数据有效:即使样本量不大,朴素贝叶斯分类器也能提供不错的结果,特别适用于文本分类和垃圾邮件过滤等任务。

在数据分析中,类别属性(也称为分类变量或名义变量)是表示非数值的数据,如性别、颜色、职业等。对这些类别属性进行编码是为了将它们转换为数值形式,以便计算机能够理解和处理。这种编码过程有以下几个重要作用:

  1. 数值化处理:许多机器学习和统计分析算法(如线性回归、决策树等)期望输入是数值型的。类别编码使算法可以对不同类别赋予一个连续的数值,便于计算。
  2. 模型训练:编码后的类别数据可以作为输入特征,让模型学习不同类别之间的关系,有助于提高预测的准确性和模型的解释性。
  3. 减少偏差:有些编码方法(如独热编码)可以防止模型过度拟合某个特定的类别顺序,确保模型对数据的处理更加公平。
  4. 可比较性:编码使得不同类别之间的大小或重要性可以被量化,方便进行比较和排序。

常见的类别编码方法包括:

  • 标签编码(Label Encoding):为每个类别分配一个唯一的整数。
  • 独热编码(One-Hot Encoding):创建一个新的二进制特征列,对每个类别设置一个列,其余为0。
  • 有序编码(Ordinal Encoding):当类别有明确的等级关系时,给类别赋值基于其顺序。
  • 二进制编码(Binary Encoding):用二进制数字表示类别,但这种方法可能增加模型复杂度。

1、读取数据

#导入数据
import pandas as pd
data = pd.read_excel('mushrooms.xls')

导入数据概述:

2、将各属性值进行编号

#将各属性值进行编号
columns = data.columns[1:]
for i in columns:data[i] = pd.factorize(data[i])[0]
#将 类型 转化为0,1
from sklearn.preprocessing  import LabelEncoder
le = LabelEncoder()
label = le.fit_transform(data['类型'])
data['类型'] = label

 对属性编号:(局部数据)

将类型转换为01:(局部数据)

3、划分数据集、训练集

#划分数据集、训练集
from sklearn import model_selection
x_train, x_test, y_train, y_test = model_selection.train_test_split(data[columns], data['类型'],test_size=0.3,random_state=1)

 

4、训练模型

#训练模型
from sklearn.naive_bayes import MultinomialNB
mnb = MultinomialNB()
mnb.fit(x_train,y_train)
mnb_pred = mnb.predict(x_test)

 训练的划分结果(部分):

5、输出混淆矩阵

#混淆矩阵
cm = pd.crosstab(mnb_pred, y_test)

 

6、输出模型准确率;精确度、召回率和F1分数等信息

#输出模型准确率;精确度、召回率和F1分数等信息
from sklearn import metrics
print('模型的准确率为:',metrics.accuracy_score(y_test, mnb_pred))
print('模型评估报告\n',metrics.classification_report(y_test, mnb_pred))

 

7、计算AUC得分

#预测概率
y_predict_proba = mnb.predict_proba(x_test)
#返回值是一个元组,分别是,精准率,召回率,阈值
from sklearn.metrics import roc_curve
fpr, tpr, thretholds = roc_curve(y_test, y_predict_proba[:,1])
#计算AUC得分
from sklearn.metrics import auc
AUC = auc(fpr,tpr)

 

8、绘制ROC图

#绘制ROC图
import matplotlib
import matplotlib.pyplot as plt
matplotlib.rc('axes', facecolor = 'white')
matplotlib.rc('figure', figsize = (6, 4))
matplotlib.rc('axes', grid = False)
plt.plot(fpr,tpr,'*:r')
plt.title('ROC plot')
plt.xlabel('FPR')
plt.ylabel('TPR')
plt.savefig('ROC plot.png')

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

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

相关文章

笔记本开机原理

从按下开机键开始,机器是如何开到OS的呢?今天这篇文章和大家极少EC-BIOS-OS的整个开机流程。首先大家要对笔记本的基本架构有所了解,基本架构如下图所示(主要组成部分为大写黑体内容)。 一、按下PowerButton按钮&#…

人工智能发展历程了解和Tensorflow基础开发环境构建

目录 人工智能的三次浪潮 开发环境介绍 Anaconda Anaconda的下载和安装 下载说明 安装指导 模块介绍 使用Anaconda Navigator Home界面介绍 Environment界面介绍 使用Jupter Notebook 打开Jupter Notebook 配置默认目录 新建文件 两种输入模式 Conda 虚拟环境 添…

酷开会员丨酷开系统K歌模式,父亲节的家庭欢聚时光

K歌以其独特的魅力,为家庭娱乐带来了无限乐趣。想象一下,父亲节这天,打开电视进入K歌频道,与家人一起嗨唱,客厅里充满了欢声笑语,酷开系统的K歌应用也就成为了连接亲情的桥梁,让爸爸们都能在这个…

Nvidia芯片Jetson系列 系统烧录环境 搭建

一、序言 Jetson 系列产品烧录系统的方法一般有两种: 一种为使用 NVIDIA 官方提供 的 SDK manager 软件给 Jetson 设备烧录系统(请查看说明文档《Jetson 产品使用 SDKmanager 烧录系统》)。 另一种即为当前文档所描述的,在安装 Ub…

基于SSM+Jsp的旅游景点线路网站

开发语言:Java框架:ssm技术:JSPJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包…

开源新纪元:ChatTTS——引领对话式文本转语音的新潮流

✨作者主页: Mr.Zwq✔️个人简介:一个正在努力学技术的Python领域创作者,擅长爬虫,逆向,全栈方向,专注基础和实战分享,欢迎咨询! 您的点赞、关注、收藏、评论,是对我最大…

好用的库函数,qsort函数大详解(干货满满!)(进阶)

前言: 小编在上一篇文章说了这一篇将要写qsort函数的模拟实现,那么废话不多说,现在开始进入今天的代码之旅喽! 目录: 1.qsort函数的模拟实现的逻辑和思路 2.qsort函数模拟实现的代码实现 3.代码展示 1.qsort函数的模…

【WEB前端2024】3D智体编程:乔布斯3D纪念馆-第41课-动态添加3D对象

【WEB前端2024】3D智体编程:乔布斯3D纪念馆-第41课-动态添加3D对象 使用dtns.network德塔世界(开源的智体世界引擎),策划和设计《乔布斯超大型的开源3D纪念馆》的系列教程。dtns.network是一款主要由JavaScript编写的智体世界引擎…

2.华为配置静态路由

通过配置静态路由让PC1和PC2互通 AR1 [Huawei]int g0/0/0 [Huawei-GigabitEthernet0/0/0]ip add 192.168.1.254 24 [Huawei]int g0/0/1 [Huawei-GigabitEthernet0/0/1]ip add 1.1.1.1 24 [Huawei]ip route-static 192.168.2.0 24 1.1.1.2AR2 [Huawei]int g0/0/0 [Huawei-Gig…

盘点有趣的人工智能开源项目一

字幕导出 zh_recogn是一个专注于中文语音识别的字幕生成工具,基于魔塔社区Paraformer模型。它不仅支持音频文件,还能处理视频文件,输出标准的SRT字幕格式。这个项目提供了API接口和简单的用户界面,使得用户可以根据自己的需求灵活…

GitLab、jenkins

Gitlab服务器:192.168.10.20 jenkins服务器:192.168.10.30 web应用服务器:192.168.10.100 通过容器部署gitlab: 安装容器管理软件podman 修改主机的22端口,该gitlab软件包中会使用到该端口 gitlab容器需要使用/etc/res…

一二三应用开发平台应用开发示例(3)——生成库表及后端代码

生成库表 前端页面的配置,也就是视图功能,我们先放一放,来看看生成库表和后端代码。 关闭实体配置界面,回到实体列表,勾选“文件夹”实体,点击“生成库表”,并确定。 系统提示成功后&#xff…

【每天学会一个渗透测试工具】dirsearch安装及使用指南

🌝博客主页:泥菩萨 💖专栏:Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 ✨dirsearch介绍 dirsearch安装包百度网盘 disearch是基于Python开发的,因此需要确保你的系统中已经安装了pyth…

flstudio怎么调中文

FL Studio设置中文的步骤如下: 打开FL Studio:首先,需要打开FL Studio编曲软件。 进入常规设置:在软件顶部菜单栏中,选择“OPTIONS”,然后点击“General setting”,进入常规设置窗口。 切换语言…

经典电源电路基础(变压-整流-滤波-稳压)

1.电源电路的功能和组成 电子电路中的电源一般是低压直流电,先把220v交流电变换成低压直流电,再用整流电路变成脉动的直流电,最后用滤波电路滤除掉脉动直流中的交流成分后才能得到直流电。有的电子设备对电源的质量要求很高,所以…

JavaWeb之初识Tomcat

Tomcat 轻量级应用服务器、JSP、Servlet Tomcat目录结构 在IDEA中创建web项目 在这里不使用maven构建项目,这种方式后面会更新 新建一个java项目File -> Project Settings -> Facets -> -> Web -> OK ( 此时src目录下有一个web目录 )Edit ->…

[个人感悟] 缓存应该考察哪些问题?

前言 缓存, 根据冯诺依曼计算机模型, 无非是为了更高效的交互, 使用内存IO替换本地磁盘IO. 又因为内存的稀缺性, 其必然存储的是热点数据, 且较小的数据. [虽然直至今日, 已有使用缓存作为数据库的使用, 但是与磁盘IO相比, 其价格仍是数倍之多.] 当涉及缓存问题时, 又分为本地…

调用第三方系统的签名设计与校验实例讲解与实践

在现代软件开发中,调用第三方系统API已经成为常见需求。为了保证数据传输的安全性和完整性,许多API采用了签名机制。本文将详细讲解如何设计与校验调用第三方系统的签名,以确保双方通信的安全和可靠。 #### 一、签名机制的意义 签名机制主要…

C语言之顺序结构以及程序调试的debug宏

一:C语言中的顺序结构 1:最浅显的顺序结构理解:三种结构之一 (1)代码执行的时候没有遇到判断跳转或者循环,默认是顺序执行的。执行完上一句则开始执行下一句。 (2)顺序结构说明cpu的工作状态&a…