机器学习算法应用——朴素贝叶斯分类器

news2024/10/6 17:18:25

朴素贝叶斯分类器

朴素贝叶斯分类器(Naive Bayes Classifier)是一种基于贝叶斯定理和特征条件独立假设的分类方法。它适用于分类任务,特别是文本分类、垃圾邮件识别等领域。

原理

朴素贝叶斯分类器基于以下两个主要假设:

  1. 特征条件独立:给定类别,特征之间是相互独立的。这意味着一个特征的出现不依赖于其他特征的出现。虽然这在现实世界中往往不成立,但这个假设大大简化了计算,使得朴素贝叶斯分类器在实际应用中表现良好。
  2. 贝叶斯定理:用于计算给定特征时某个类别出现的概率。

贝叶斯定理

对于两个随机变量X和Y,贝叶斯定理可以表示为:

[ P(Y|X) = \frac{P(X|Y) \cdot P(Y)}{P(X)} ]

其中:

  • ( P(Y|X) ) 是给定X时Y的后验概率。
  • ( P(X|Y) ) 是给定Y时X的条件概率。
  • ( P(Y) ) 是Y的先验概率。
  • ( P(X) ) 是X的边际概率。

在分类任务中,X代表特征向量,Y代表类别。

朴素贝叶斯分类器的步骤

  1. 数据准备:收集带有类别标签的训练数据。
  2. 计算先验概率:计算每个类别的先验概率 ( P(Y) )。
  3. 计算条件概率:对于每个类别和每个特征,计算给定类别时该特征的条件概率 ( P(X_i|Y) )。由于朴素贝叶斯假设特征条件独立,这些计算可以独立进行。
  4. 分类:对于新的、未标记的数据点,计算其在每个类别下的后验概率 ( P(Y|X) )。选择具有最大后验概率的类别作为预测结果。

类型

  • 高斯朴素贝叶斯:当特征连续并且假设它们遵循高斯(正态)分布时使用。
  • 多项式朴素贝叶斯:用于离散特征,常用于文本分类任务,其中特征表示文档中单词的出现次数。
  • 伯努利朴素贝叶斯:也用于离散特征,但假设特征是二元的(例如,单词是否出现)。

优点

  • 实现简单且高效。
  • 对缺失和噪声数据相对鲁棒。
  • 在小数据集上表现良好。

缺点

  • 特征条件独立假设往往不成立,这可能会影响分类性能。
  • 需要大量的训练数据来估计概率。
  • 对于输入数据的预处理很敏感(例如,文本中的停用词和词干提取)。

应用

朴素贝叶斯分类器在文本分类、垃圾邮件过滤、情感分析、新闻分类等领域有广泛应用。

  1. 数据

Universal Bank 是一家业绩快速增长的银行。为了增加贷款业务,该银行探索将储蓄客户转变成个人贷款客户的方式。银行收集了5000条客户数据,包括客户特征(age、experience、income、family、 CCAvg、education、Zip Code)、客户对上一次贷款营销活动的响应( Personal Loan )、客户和银行的关系( mortgage,securities account.online.CD account、credit card)共13个特征,目标值是 Personal Loan,即客户是否接受了个人贷款。

ID

Age

Experience

Income

ZIP Code

账户

年龄

经验

收入

邮政编码

Family

CCAvg

Education

Mortgage

Securities Account

家庭成员人数

信用卡月平均消费

教育水平

按揭贷款数目

证券账户

CD Account

Online

CreditCard

Personal Loan

定期存款

在线

信用卡

个人贷款

(目标值)

在5000个客户中,仅480个客户接受了提供给他们的个人贷款。

数据实例:

IDAgeExperienceIncomeZIP CodeFamilyCCAvgEducationMortgagePersonal LoanSecurities AccountCD AccountOnlineCreditCard
1251499110741.61001000
24519349008931.51001000
339151194720111000000
43591009411212.72000000
53584591330412000001
63713299212140.4215500010
75327729171121.52000010
85024229394310.33000001
93510819008930.6210400010
103491809302318.93010000
1165391059471042.43000000
12295459027730.12000010
1348231149310623.83001000
145932409492042.52000010
15674111291741121001000
166030229505411.53000011
1738141309501044.7313410000
184218819430542.41000000
1946211939160428.13010000
205528219472010.52001001
215631259401540.9211100010
2257276390095323000010
23295629027711.2126000010
244418439132020.7116301000
2536111529552123.9115900001
264319299430530.519700010
274016839506440.23000000

注意:数据集中的编号(ID)和邮政编码(ZIP CODE)特征因为在分类模型中无意义,所以在数据预处理阶段将它们删除。

  1. 使用高斯朴素贝叶斯分类器(特征为连续型变量)对数据进行分类
  • 使用留出法划分数据集,训练集:测试集为7:3
  • #1. 读入数据
    df = pd.read_csv('universalbank.csv')
    y = df['Personal Loan']
    X = df.drop(['ID', 'ZIP Code', 'Personal Loan'], axis = 1)
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state = 0)
    
  • 使用高斯朴素贝叶斯分类器对训练集进行训练
  • #2. 训练高斯朴素贝叶斯模型
    gnb = GaussianNB()
    gnb.fit(X_train, y_train)

  • 使用训练好的模型对测试数据集进行预测并输出预测结果模型准确度
  • # 3. 评估模型
    y_pred = gnb.predict(X_test)
    print('测试数据的预测结果:', y_pred)
    
    acc = gnb.score(X_test, y_test)
    print('GaussianNB模型的准确度:',acc)
    

  1. 使用多项式朴素贝叶斯(特征为离散型变量)对数据进行分类
  • 筛选出数据中的离散型特征
  • # 1. 读入数据
    y = df['Personal Loan']
    X = df[['Family', 'Education', 'Securities Account', 
    'CD Account', 'Online', 'CreditCard']]              #只选用6个特征
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state = 0)
    

  • 使用留出法划分数据集,训练集:测试集为7:3。
  • X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state = 0)

  • 使用多项式朴素贝叶斯分类器对训练集进行训练
  • #2. 训练多项式朴素贝叶斯模型
    mnb = MultinomialNB()
    mnb.fit(X_train, y_train)
  • 使用训练好的模型对测试数据集进行预测并输出预测结果模型准确度
  • y_pred = mnb.predict(X_test)
    print('测试数据的预测结果:', y_pred)
    
    acc = mnb.score(X_test, y_test)
    print('MultinomialNB模型的准确度:',acc)
    

代码:

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
from sklearn.naive_bayes import MultinomialNB

#1. 读入数据
df = pd.read_csv('universalbank.csv')
y = df['Personal Loan']
X = df.drop(['ID', 'ZIP Code', 'Personal Loan'], axis = 1)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state = 0)

#2. 训练高斯朴素贝叶斯模型
gnb = GaussianNB()
gnb.fit(X_train, y_train)

# 3. 评估模型
y_pred = gnb.predict(X_test)
print('测试数据的预测结果:', y_pred)

acc = gnb.score(X_test, y_test)
print('GaussianNB模型的准确度:',acc)

# 1. 读入数据
y = df['Personal Loan']
X = df[['Family', 'Education', 'Securities Account', 
'CD Account', 'Online', 'CreditCard']]              #只选用6个特征
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state = 0)

#2. 训练多项式朴素贝叶斯模型
mnb = MultinomialNB()
mnb.fit(X_train, y_train)

y_pred = mnb.predict(X_test)
print('测试数据的预测结果:', y_pred)

acc = mnb.score(X_test, y_test)
print('MultinomialNB模型的准确度:',acc)


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

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

相关文章

【Python】selenium爬虫常见用法和配置,以及常见错误和解决方法

欢迎来到《小5讲堂》 这是《Python》系列文章,每篇文章将以博主理解的角度展开讲解。 温馨提示:博主能力有限,理解水平有限,若有不对之处望指正! 目录 前言无执行文件代码报错信息错误路径手动下载自动下载 选项配置Ch…

CubeMX重写配置生成代码后注释出现乱码的解决方式

1.搜索环境变量 2.就是这里,每个版本Windows可能不太一样 3.新建 4.系统变量下面新建 变量:JAVA_TOOL_OPTIONS 值:-Dfile.encodingUTF-8 如果还不行,那我也没辙,哈哈。

python自动化生成ppt

使用Python和python-pptx创建PPT 在这篇博客中,我们将探讨如何使用Python库python-pptx来创建一个简单的PowerPoint演示文稿(PPT)。这个库允许我们以编程方式创建幻灯片、添加文本、图片、表格和自定义形状。 安装python-pptx 首先&#x…

springboot -多数据源管理方案

多数据源的配置有多种方式 方式一 、依赖dataSource的配置 1.建立多数据源配置 spring:# 数据源配置datasource:pdm:driver-class-name: oracle.jdbc.driver.OracleDriverjdbc-url: jdbc:oracle:thin:10.216.xxx.xxx:3000:orclusername: cfpdmpassword: capecapp:driver-cla…

kali卸载openjdk并安装 jdk1.8

一、卸载自带的openjdk 1.1、kali自带的 java 是 openjdk,如果需要开发安卓或者其他应用程序,则需要将 openjdk 换成 jdk1.8。 1.2、查看kali自带的openjdk版本 ┌──(root㉿kali)-[~] └─# java -version openjdk version "17.0.10" 2024…

Wireshark下载安装和使用教程

Wireshark下载安装和使用教程 Wireshark(前身 Ethereal)是一个网络包分析工具。该工具主要是用来捕获网络数据包,并自动解析数据包,为用户显示数据包的详细信息,供用户对数据包进行分析。 它可以运行在 Windows 和 L…

淘宝扭蛋机小程序:扭动未来,乐享购物新纪元

一、引言 在数字化浪潮中,淘宝始终走在创新的前沿,不断探索与尝试新的购物方式。今天,我们骄傲地推出淘宝扭蛋机小程序,以全新的视角和体验,让您在购物的同时感受到无尽的乐趣与惊喜。 二、探索未知的购物乐趣 淘宝…

清华团队开发首个AI医院小镇模拟系统;阿里云发布通义千问 2.5:超越GPT-4能力;Mistral AI估值飙升至60亿美元

🦉 AI新闻 🚀 清华团队开发首个AI医院小镇模拟系统 摘要:来自清华的研究团队最近开发出了一种创新的模拟系统,名为"Agent Hospital",该系统能够完全模拟医患看病的全流程,其中包括分诊、挂号、…

机器视觉任务中语义分割方法的进化历史

机器视觉任务中语义分割方法的进化历史 一、基于传统方法的图像分割二、基于卷积神经网络的图像分割三、基于Attention机制的图像分割四、语义分割模型的挑战与改进 在图像处理领域,传统图像分割技术扮演着重要角色。 一、基于传统方法的图像分割 这些方法包括大津…

【每日八股】淘天一面

🔥 个人主页: 黑洞晓威 😀你不必等到非常厉害,才敢开始,你需要开始,才会变的非常厉害 rocketmq的消息重复发送问题?如何保证幂等? 如何保证幂等性: 消息 Key 设置:不建议…

基于.NET WinForms 数据CURD功能的实现

使用开发工具 VS 2022 C#,数据库MS SQL SERVER 2019 ,基于NET WinForms,实现数据记录的创建(Create)、更新(Update)、读取(Read)和删除(Delete)等功能。主要控件包括:DataGridView,SqlDataApater , DataTab…

JSP ssm 智能水表管理myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 JSP ssm 智能水表管理系统是一套完善的web设计系统(系统采用SSM框架进行设计开发,springspringMVCmybatis),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采…

生成指定范围的随机整数

private static final Random RANDOM new Random();// 生成指定范围的随机整数public static int generateRandomInt(int min, int max) {return RANDOM.nextInt(max - min 1) min;}public static void main(String[] args) {Integer count 5;Integer randomInt generateR…

缓存菜品操作

一:问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大。 二:实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: 每个分…

【UnityRPG游戏制作】Unity_RPG项目_玩法相关※

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:就业…

【基础算法总结】滑动窗口二

滑动窗口二 1.水果成篮2.找到字符串中所有字母异位词3.串联所有单词的子串4.最小覆盖子串 点赞👍👍收藏🌟🌟关注💖💖 你的支持是对我最大的鼓励,我们一起努力吧!😃😃 1.水…

Dbeaver network unavailable due to certificate issue

场景:出现在DBeaver连接数据库下载驱动的时候 解决: 别勾选就可以了

Java的基本语法

文章目录 Java语言的一些基本语法要点:Java语言的一些进阶概念和特性:Java代码示例基础示例1. Hello World2. 计算两个数的和 进阶示例1. 使用Lambda表达式过滤列表2. 实现一个简单的泛型类3. 使用多线程打印数字 异常处理示例捕获并处理异常 接口使用示…

【前端】HTML实现个人简历信息填写页面

文章目录 前言一、综合案例:个人简历信息填写页面 前言 这篇博客仅仅是对HTML的基本结构进行了一些说明,关于HTML的更多讲解以及CSS、Javascript部分的讲解可以关注一下下面的专栏,会持续更新的。 链接: Web前端学习专栏 下面我对…

Python专题:六、循环语句(2)

for循环语句 列表可以简单的理解为: 顺序保存的若干元素 注释:变量largest,循环语句for,还有二层缩进八个空格 依次取出counts(列表)里的数字,并赋予给x,判断x和largest数值大小。…