【机器学习】分类算法 - 朴素贝叶斯 MultinomialNB

朴素贝叶斯

  • 1、朴素贝叶斯API
  • 2、朴素贝叶斯算法实际应用
    • 2.1、获取数据集
    • 2.2、划分数据集
    • 2.3、特征归一化
    • 2.4、贝叶斯算法处理并评估
  • 3、常见问题

朴素贝叶斯法(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  TrueFalse False False False False  True False  True False  True  True  TrueTrue  True  True  True  True False False False  True  True  True  TrueTrue False]
准确率 0.6052631578947368

3、常见问题

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

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

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

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

相关文章

「JVM」Full GC和Minor GC、Major GC

Full GC和Minor GC、Major GC 一、Full GC1、什么是Full GC?2、什么情况下会触发full gc? 二、Minor GC1、什么是Minor GC?2、什么情况下会触发Minor GC? 三、Major GC1、什么是Major GC?2、什么情况下会触发Major GC&#xff1f…

Android开发初体验

创建项目geoquiz 选择EmptyActivity 编程语言选择Kotlin 修改app/src/main/java/MainActivity.kt package com.bignerdranch.android.geoquizimport androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.view.View import android.widget.*cl…

Vue.js高阶学习和常用知识(二)

目录 1. Vue 实例2. 组件3. 指令4. 计算属性5. 监听器6. 生命周期钩子 Vue.js 是一个流行的 Web 前端框架,它由 Evan You 于 2014 年创建。Vue.js 的设计目标是简单、灵活和易于使用,同时具有高性能和可扩展性。 Vue.js 基于组件化的思想,将页…

Java并发系列之一:JVM线程模型

什么是线程模型: Java字节码运行在JVM中,JVM运行在各个操作系统上。所以当JVM想要进行线程创建回收这种操作时,势必需要调用操作系统的相关接口。也就是说,JVM线程与操作系统线程之间存在着某种映射关系,这两种不同维…

在OK3588板卡上部署模型实现OCR应用

一、主机模型转换 我们依旧采用FastDeploy来部署应用深度学习模型到OK3588板卡上 进入主机Ubuntu的虚拟环境 conda activate ok3588 安装rknn-toolkit2(该工具不能在OK3588板卡上完成模型转换) git clone https://github.com/rockchip-linux/rknn-to…

通过performance分析mysql内存占用

在 MySQL 使用过程中,偶尔会出现OOM、内存异常突增等异常现象。为了排查内存异常,我们需要分析内存占用情况,找出内存占用的具体事件。我们可以从以下几张performance下的表分析内存,每张表对应不同的维度,有用户维度、…

基于Java+spring+springMvc+mybatis+jsp学生选课管理系统

基于JavaspringspringMvcmybatisjsp学生选课管理系统 一、系统介绍二、功能展示1.课程列表(学生)2.已选课程(学生)3.已修课程(学生)4.我的课程(老师)5.课程打分(老师)6.课程管理、学生管理、教师管理(系统管理员&#…

stm32读取DHT11温湿度传感器

stm32读取DHT11温湿度传感器 一.序言二.DHT11响应数据格式三.DHT11通讯过程3.1 产生起始信号3.2 读取数据03.3 读取数据1DHT11停止信号 四.代码实例4.1读取DHT11源文件4.2 读取DHT11头文件 五.结语5.1 总结整体思路5.2 对读者的期望 一.序言 我们知道DHT11是单总线协议&#x…

django------模糊查询

1.常用模糊查询的方法 queryset中支持链式操作 bookBook.objects.all().order_by(-nid).first() 只要返回的是queryset对象就可以调用其他的方法,直到返回的是对象本身 大于、大于等于、小于、小于等于&#xff1a; # __gt 大于> # __gte 大于等于> # __lt 小于< …

Ceph入门到精通- Linux 磁盘管理(block 与 inode)

1 硬盘 block 与 inode 详解 1.1 Sector&#xff08;扇区&#xff09;与 Block&#xff08;块&#xff09; 1&#xff09; 硬盘的最小存储单位&#xff1a;sector&#xff08;扇区&#xff09;&#xff0c;每个扇区储存 512 字节&#xff1b;操作系统会一次性连续读取多个…

大语言模型LLM

目录 一、语言模型的发展 语言模型&#xff08;Language Model&#xff0c;LM&#xff09;目标是建模自然语言的概率分布&#xff0c;具体目标是构建词序列w1,w2,...,wm的概率分布&#xff0c;即计算给定的词序列作为一个句子出现可能的大小P(w1w2...wm)。但联合概率P的参数量…

【C++入门到精通】C++入门 —— 类和对象(初始化列表、Static成员、友元、内部类、匿名对象)

目录 一、初始化列表 ⭕初始化列表概念 ⭕初始化列表的优点 ⭕使用场景 ⭕explicit关键字 二、Static成员 ⭕Static成员概念 &#x1f534;静态数据成员&#xff1a; &#x1f534;静态函数成员&#xff1a; ⭕使用静态成员的优点 ⭕使用静态成员的注意事项 三、友…

Linux编译宏BUILD_BUG_ON_ZERO

本系列文章主要写我在阅读Linux内核过程中&#xff0c;关注的比较难以理解但又设计巧妙的代码片段&#xff08;不关注OS的各个模块的设计思想&#xff0c;此部分我准备写在“深入理解Linux Kernel”系列文章中&#xff09;&#xff0c;一来通过内核代码复习一下C语言及汇编语言…

go 中的代码漏洞检查

前言 不知道大家在开发 go 项目中有没有遇到过一些第三方包或者官方包中出现漏洞的问题&#xff0c;这些漏洞可能会影响到代码的功能、性能或者安全性。 现在针对这一问题&#xff0c;go 团队提供了 govulncheck 工具&#xff0c;帮助开发者快速地发现和修复这些漏洞。 什么…

C/C++开发,opencv与qt结合播放视频

目录 一、qt_ui创建 1.1 ui设置 1.2 ui及代码输出保存 二、创建工程 2.1 工程目录及编译设置 2.2 源码设计 三、编译及测试 3.1 程序编译 3.2 程序运行 首先声明&#xff0c;这是一个OpenCV 3学习文档的案例&#xff0c;但是说明有些过于省略&#xff0c;只有一些简短的代码…

计算机毕设 深度学习人体跌倒检测 -yolo 机器视觉 opencv python

文章目录 0 前言1.前言2.实现效果3.相关技术原理3.1卷积神经网络3.1YOLOV5简介3.2 YOLOv5s 模型算法流程和原理4.数据集处理3.1 数据标注简介3.2 数据保存 5.模型训练 6 最后 0 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设题…

Clion开发Stm32之温湿度传感器(DS18B20)驱动编写和测试

前言 涵盖之前文章: Clion开发STM32之HAL库GPIO宏定义封装(最新版)Clion开发stm32之微妙延迟(采用nop指令实现)Clion开发STM32之日志模块(参考RT-Thread) DSP18B20驱动文件 头文件 /*******************************************************************************Copy…

1 MobileHomeTopicApplication

目录 1 OrderApplication 1.1 引用文件 1.2 #region 字段 1.3 #region 属性 OrderApplication 引用文件using System; using

react 父子组件通信 基础

父传子 使用props import { useState } from reactfunction Parent {const [message, setMessage] useState(react)return (<><SonA message{message} /><SonB message{message} /></>) }function SonA(props) {return <div>子组件A: {props.…

OAuth机制_web站点接入微软azure账号进行三方登录

文章目录 ⭐前言⭐微软三方登录流程&#x1f496; web站点获取微软账号流程&#x1f496; node封装微软登录接口&#x1f496; webapp 自定义code换token&#x1f496; 调用 Microsoft Graph API&#x1f496; 前端唤醒authlink进行登录回调逻辑 ⭐结束 ⭐前言 大家好&#xf…