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

2024-06-13 04:44

本文主要是介绍朴素贝叶斯分类器 #数据挖掘 #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')

这篇关于朴素贝叶斯分类器 #数据挖掘 #Python的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1056314

相关文章

Python的Darts库实现时间序列预测

《Python的Darts库实现时间序列预测》Darts一个集统计、机器学习与深度学习模型于一体的Python时间序列预测库,本文主要介绍了Python的Darts库实现时间序列预测,感兴趣的可以了解... 目录目录一、什么是 Darts?二、安装与基本配置安装 Darts导入基础模块三、时间序列数据结构与

Python正则表达式匹配和替换的操作指南

《Python正则表达式匹配和替换的操作指南》正则表达式是处理文本的强大工具,Python通过re模块提供了完整的正则表达式功能,本文将通过代码示例详细介绍Python中的正则匹配和替换操作,需要的朋... 目录基础语法导入re模块基本元字符常用匹配方法1. re.match() - 从字符串开头匹配2.

Python使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

通过Docker容器部署Python环境的全流程

《通过Docker容器部署Python环境的全流程》在现代化开发流程中,Docker因其轻量化、环境隔离和跨平台一致性的特性,已成为部署Python应用的标准工具,本文将详细演示如何通过Docker容... 目录引言一、docker与python的协同优势二、核心步骤详解三、进阶配置技巧四、生产环境最佳实践

Python一次性将指定版本所有包上传PyPI镜像解决方案

《Python一次性将指定版本所有包上传PyPI镜像解决方案》本文主要介绍了一个安全、完整、可离线部署的解决方案,用于一次性准备指定Python版本的所有包,然后导出到内网环境,感兴趣的小伙伴可以跟随... 目录为什么需要这个方案完整解决方案1. 项目目录结构2. 创建智能下载脚本3. 创建包清单生成脚本4

Python实现Excel批量样式修改器(附完整代码)

《Python实现Excel批量样式修改器(附完整代码)》这篇文章主要为大家详细介绍了如何使用Python实现一个Excel批量样式修改器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录前言功能特性核心功能界面特性系统要求安装说明使用指南基本操作流程高级功能技术实现核心技术栈关键函

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Python实现批量CSV转Excel的高性能处理方案

《Python实现批量CSV转Excel的高性能处理方案》在日常办公中,我们经常需要将CSV格式的数据转换为Excel文件,本文将介绍一个基于Python的高性能解决方案,感兴趣的小伙伴可以跟随小编一... 目录一、场景需求二、技术方案三、核心代码四、批量处理方案五、性能优化六、使用示例完整代码七、小结一、

Python中 try / except / else / finally 异常处理方法详解

《Python中try/except/else/finally异常处理方法详解》:本文主要介绍Python中try/except/else/finally异常处理方法的相关资料,涵... 目录1. 基本结构2. 各部分的作用tryexceptelsefinally3. 执行流程总结4. 常见用法(1)多个e