《机器学习核心算法》分类算法 - 朴素贝叶斯 MultinomialNB

2023-09-14 08:32:16

「作者主页」:士别三日wyx
「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者
「推荐专栏」:小白零基础《Python入门到精通》

在这里插入图片描述

朴素贝叶斯法(Naive Bayes model 简称 NBM )是基于「贝叶斯定理」「特征条件独立假设」的分类方法。

「贝叶斯定理」:也叫贝叶斯公式,用来描述两个「条件概率」之间的关系。比如你看到一个人总是做好事,那这个人多半会是一个好人。
「特征条件独立假设」:为了解决「参数」成指数增长过多的问题,朴素贝叶斯在贝叶斯定理的基础上,假设特征的条件都是「相互独立」的。


1、朴素贝叶斯API

「多项式」模型的朴素贝叶斯分类器,用于具有「离散」特征的分类,比如文本分类的单词计数,需要整数特征计数。

sklearn.naive_bayes.MultinomialNB()

参数

  • alpha :(可选,浮点型)平滑参数,默认值为 1.0
  • force_alpha :(可选,布尔类型)默认值 False,如果为False且alpha小于1e-10,就将alpha设置为1e-10;如果为True,aplha保持不变;这是为了防止alpha太接近0而导致数值误差
  • fit_prior :(可选,布尔类型)是否学习先验概率,默认值 True,如果为False,就使用统一先验。

函数

  • MultinomialNB.fit( x_train,y_train ):接收训练集特征 和 训练集目标
  • MultinomialNB.predict( x_test ):接收测试集特征,返回数据的类标签
  • MultinomialNB.score(x_test, y_test):接收测试集特征 和 测试集目标,返回准确率。
  • MultinomialNB.get_params():获取接收的参数(alpha、fit_prior这种参数)
  • MultinomialNB.set_params():设置参数
  • MultinomialNB.partial_fit():增量测试,用于数据量太大不能一次装入内存的情况,

2、朴素贝叶斯算法实际应用

2.1、获取数据集

这里我们使用sklearn自带的「鸢尾花」数据集。

from sklearn import datasets

# 1、获取数据集
iris = datasets.load_iris()
print(iris.data)

输出:

[[5.1 3.5 1.4 0.2]
 [4.9 3.  1.4 0.2]
 ......
  [5.9 3.  5.1 1.8]]

2.2、划分数据集

接下来,我们对数据集进行「划分」,传入特征值和目标值,按照默认比例划分(25%测试集、75%训练集)

from sklearn import datasets
from sklearn import model_selection

# 1、获取数据集
iris = datasets.load_iris()
# 2、划分数据集
x_train, x_test, y_train, y_test = model_selection.train_test_split(iris.data, iris.target)
print('训练集特征值:', len(x_train))
print('测试集特征值:', len(x_test))
print('训练集目标值:', len(y_train))
print('测试集目标值:', len(y_test))

输出:

训练集特征值: 112
测试集特征值: 38
训练集目标值: 112
测试集目标值: 38

从结果可以看到,训练集划分了112组、测试集划分了38组,符合预期。


2.3、特征归一化

接下来,我们对特征值进行「归一化」处理,需要注意的是,训练集和测试集的处理必须完全相同。

from sklearn import datasets
from sklearn import model_selection
from sklearn import preprocessing

# 1、获取数据集
iris = datasets.load_iris()
# 2、划分数据集
x_train, x_test, y_train, y_test = model_selection.train_test_split(iris.data, iris.target)
# 3、特征归一化
mm = preprocessing.MinMaxScaler()
x_train = mm.fit_transform(x_train)
x_test = mm.fit_transform(x_test)
print(x_train)
print(x_test)

输出:

[[0.8        0.5        0.87719298 0.70833333]
 [0.42857143 0.5        0.66666667 0.70833333]
 ......

从结果我们可以看到,特征值发生了相应的变化。


2.4、贝叶斯算法处理并评估

接下来,实例化贝叶斯的类对象,把训练集的特征值目标值传进去,进行训练。

from sklearn import datasets
from sklearn import model_selection
from sklearn import preprocessing
from sklearn import naive_bayes

# 1、获取数据集
iris = datasets.load_iris()
# 2、划分数据集
x_train, x_test, y_train, y_test = model_selection.train_test_split(iris.data, iris.target)
# 3、特征归一化
mm = preprocessing.MinMaxScaler()
x_train = mm.fit_transform(x_train)
x_test = mm.fit_transform(x_test)
# 4、贝叶斯算法处理
estimator = naive_bayes.MultinomialNB()
estimator.fit(x_train, y_train)

# 5、模型评估
y_predict = estimator.predict(x_test)
print('真实值和预测值对比', y_predict == y_test)
score = estimator.score(x_test, y_test)
print('准确率', score)

输出:

真实值和预测值对比 [ True False  True False  True False  True  True  True  True False  True
 False False False False False  True False  True False  True  True  True
  True  True  True  True  True False False False  True  True  True  True
  True False]
准确率 0.6052631578947368

3、常见问题

MultinomialNB的训练集数据不能为「负数」,否则会报错:Negative values in data passed to MultinomialNB 。

比如标准化处理特征时,会出现负数结果,就会报错,可以改用归一化。

4、粉丝福利

评论区留言即可参与抽奖,送《云计算安全》5本。

在这里插入图片描述

本书既有理论研究,又有实践探讨,共分为6章,讲解了云计算安全中人工智能与大数据挖掘技术的应用实践。第1章从概念、发展、标准等角度宏观地介绍了云计算安全,第2章从云计算安全需求的角度阐释云计算安全的核心目标、公有云场景下的安全需求和私有云场景下的安全需求;第3章全面、系统地介绍了公有云安全技术体系和私有云安全技术体系,第4章详细个绍了人工智能技术在云计算安全领域的应用实践;第5章详细介绍了大数据挖掘技术在云计算安全领域的应用实践:第6章个绍了人工智能和人数据挖掘技术的综合应用,提出云数据中心安全防护框架,并详细个绍了云数据中心安全态势感知系统。
本书是人工智能与大数据挖掘技术在云计算安全领域的应用实践参考书,适用于人工智能、大数据挖掘、云计算、网络信息安全相关领域的从业人员。

在这里插入图片描述

清华社【秋日阅读企划】领券立享优惠

IT好书 5折叠加10元 无门槛优惠券:https://u.jd.com/Yqsd9wj

活动时间:9月4日-9月17日,先到先得,快快来抢

更多推荐

Git从入门到起飞(详细)

Git从入门到起飞Git从入门到起飞什么是Git?使用git前提(注册git)下载Git在Windows上安装Git在macOS上安装Git在Linux上安装Git配置Git配置全局用户信息配置文本编辑器创建第一个Git仓库初始化仓库拉取代码添加文件到仓库提交更改推送Git基本操作查看提交历史比较文件差异撤销更改分支管

争议不断:TikTok如何处理儿童数据隐私问题

在数字时代,社交媒体已经成为了人们生活中不可或缺的一部分,而TikTok,作为全球最热门的社交媒体平台之一,尤其受到年轻用户的喜爱。然而,伴随着TikTok的快速崛起,也涌现出了一系列的争议,其中最引人关注的之一是关于儿童数据隐私的问题。TikTok:年轻一代的最爱TikTok是一款以短视频为主的应用,允许用户制作、编

【flutter】架构之商城main入口

架构之商城main入口前言一、项目模块的划分二、入口main的配置三、配置文件怎么做总结前言本栏目我们将完成一个商城项目的架构搭建,并完善中间的所有功能,总页面大概200个,如果你能看完整个栏目,你肯定能独立完成flutter项目的整体研发工作。首先新建一个叫blog_mall的项目,能看到这里的,我想都知道该怎么创建

外包干了2个月,技术退步明显。。。。。

先说一下自己的情况,大专生,18年通过校招进入武汉某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试,已经让我变得不思进取,谈了2年的女朋友也因为我的心态和工资和我分手了。于是,我决定要改变现状,冲击下大厂。刚开始准备时

14:00面试,14:06就出来了,问的问题有点变态。。。

从小厂出来,没想到在另一家公司又寄了。到这家公司开始上班,加班是每天必不可少的,看在钱给的比较多的份上,就不太计较了。没想到5月一纸通知,所有人不准加班,加班费不仅没有了,薪资还要降40%,这下搞的饭都吃不起了。还在有个朋友内推我去了一家互联网公司,兴冲冲见面试官,没想到一道题把我给问死了:如果模块请求http改为了h

基于STM32CUBEMX驱动TMOS模块STHS34PF80(5)----配置嵌入式函数

基于STM32CUBEMX驱动TMOS模块STHS34PF80----4.中断获取信号概述视频教学样品申请视频教程参考Demo参考Demo完整代码下载内嵌函数地址串口配置IIC配置IO口设置串口重定向参考程序初始化IIC写函数IIC读函数获取ID设备的自动引导过程和关机模式配置省电模式温度数据的灵敏度值设置低通滤波器温

【面试题】智力题

文章目录腾讯1000瓶毒药里面只有1瓶是有毒的,问需要多少只老鼠才能在24小时后试出那瓶有毒。有两根不规则的绳子,两根绳子从头烧到尾均需要一个小时,现在有一个45分钟的比赛,裁判员忘记带计时器,你能否通过烧绳子的方式来为这场比赛计时?有25匹马,5条赛道,每条赛道同时只能有一匹马跑,假设每匹马的水平都很稳定,在没有计时

go并发处理业务

引言实际上,在服务端程序开发和爬虫程序开发时,我们的大多数业务都是IO密集型业务,什么是IO密集型业务,通俗地说就是CPU运行时间只占整个业务执行时间的一小部分,而剩余的大部分时间都在等待IO操作。IO操作包括http请求、数据库查询、文件读取、摄像设备录音设备的输入等等。这些IO操作会引起中断,使业务线程暂时放弃cp

PaddlePaddle Hackathon 飞桨黑客马拉松热身赛上线!

挑战自我拓展技能激发创新挑战极限再次相遇黑客松我们期待你的加入!第五期PaddlePaddleHackathon飞桨黑客马拉松热身赛上线,本次活动是面向全球开发者的深度学习领域编程活动,鼓励开发者了解和参与飞桨深度学习开源项目与文心大模型开发实践。本次飞桨黑客马拉松活动包含三大赛道:开源贡献个人挑战赛、大模型应用与创意

Mybatis - 常用 SQL 语句设计思路及具体实现 - 数据存在则更新,不存在则插入、批量更新、批量插入、连表查询 + - 字段加减法

目录序言一、数据存在则更新,不存在则插入1、ONDUPLICATEKEYUPDATE的具体xml用法:(虽然有点问题,但没准以后有用到的时候)onduplicatekeyupdate用法总结:二、批量更新方法一:(数据量越多,容易变成慢SQL,不太推荐)方法二方法三(推荐)三、批量插入四、连表查询+-字段加减法1、连表

SQL故障和排查解决浅析

MySQL长连接MySQL长连接是指应用程序与MySQL数据库之间的连接在执行完一个操作后不会立即关闭,而是保持活动状态以供后续使用。这种连接模式在某些情况下可以提高性能,但也可能导致一些问题。以下是MySQL长连接的一些现象和排查方法:现象连接数积累增加:如果应用程序中的长连接没有得到正确管理和释放,数据库服务器上的

热文推荐