03_朴素贝叶斯分类

描述

朴素贝叶斯分类器与线性模型非常相似的一种分类器,但它的训练速度往往更快。这种高效率所付出的代价是,朴素贝叶斯模型的泛化能力要比线性分类器(如LogisticRegression 和 LinearSVC)稍差。

朴素贝叶斯模型高效的原因:它通过单独查看每个特征来学习参数,并从每个特征中收集简单的类别统计数据。

scikit-learn 中实现了三种朴素贝叶斯分类器:GaussianNB、BernoulliNB 和 MultinomialNB。GaussianNB 可 应 用 于 任 意 连 续 数 据, 而BernoulliNB 假定输入数据为二分类数据,MultinomialNB 假定输入数据为计数数据(即每个特征代表某个对象的整数计数,比如一个单词在句子里出现的次数)。BernoulliNB 和MultinomialNB 主要用于文本数据分类。

分类器

GaussianNB

高斯朴素贝叶斯(GaussianNB)是一种基于贝叶斯定理的概率分类器,特别适用于连续数据或特征变量符合高斯分布的情况。在机器学习中,GaussianNB经常被用于分类任务,如文本分类、垃圾邮件检测等。

当特征变量是连续的,它们的先验概率通常假设为高斯分布。这意味着在给定类别中,特征的值遵循正态分布。高斯朴素贝叶斯利用每个特征的均值和方差来估计每个类别的条件概率。对于给定的特征值,GaussianNB遵循以下公式:

P ( x i = X i ( t e s t ) ∣ Y = C k ) = ( 1 / s q r t ( 2 ∗ p i ∗ σ k 2 ) ) ∗ e x p ( − ( X i ( t e s t ) − μ k ) 2 / ( 2 ∗ σ k 2 ) ) P(x_i = X_i(test) | Y = C_k) = (1 / sqrt(2 * pi * σ_k^2)) * exp(- (X_i(test) - μ_k)^2 / (2 * σ_k^2)) P(xi=Xi(test)Y=Ck)=(1/sqrt(2piσk2))exp((Xi(test)μk)2/(2σk2))

μ k μ_k μk σ k 2 σ_k^2 σk2分别是正态分布的期望和方差。GaussianNB的目标是最大化 P ( x i = X i ( t e s t ) ∣ Y = C k ) P(x_i = X_i(test) | Y = C_k) P(xi=Xi(test)Y=Ck),以确定样本更接近哪个类别的值。

from sklearn.naive_bayes import GaussianNB
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_digitsdigits = load_digits() # 是一种8x8的图像像素数据,目的识别数字
X_train,X_test,Y_train,Y_test = train_test_split(digits.data,digits.target,random_state=42)
gnb = GaussianNB().fit(X_train,Y_train)print(gnb.score(X_train,Y_train),gnb.score(X_test,Y_test)) # 打印训练、测试得分

var_smoothing 参数:为了保证估计的稳定性,在估计方差时会将所有特征的方差中最大的方差以一定比例添加到估计的方差中。这个比例由var_smoothing参数控制,默认值为1e-9 (目的是排除极大值对模型的干扰)

BernoulliNB

伯努利朴素贝叶斯分类器是一种基于朴素贝叶斯原理的机器学习算法,专门用于处理二项分布数据。在伯努利模型中,特征的条件概率分布假设满足二项分布,即每个特征都是二分类的,可以用布尔变量表示。这种分类器适用于离散数据,尤其是二进制或布尔特征的情况。

伯努利朴素贝叶斯分类器在处理文本数据时表现良好,尤其是在文档较短的数据集上。与多项式朴素贝叶斯分类器相比,伯努利朴素贝叶斯更注重特征的存在与否,而不是特征的出现频率。

binarize参数:用于将样本特征二值化(映射为布尔值)的阈值。如果为None,则假定输入已经由二分类向量组成。

from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import BernoulliNBtrain_text=['I love this book','This book is great','I hate this book']
train_label =[1,1,0] # 1 表示正面评论,0表示负面评论vectorizer = CountVectorizer(binary=True) # 分词向量器
train_feature = vectorizer.fit_transform(train_text)
test_feature = vectorizer.transform(['I like this book','This book is terrible'])clf = BernoulliNB().fit(train_feature,train_label)
clf.predict(test_feature)

MultinomialNB

多项式朴素贝叶斯分类器适用于具有离散特征的分类(例如,文本分类的词频)。多项式分布通常需要整数特征计数。

MultinomialNB在文本分类领域有着广泛的应用,如垃圾邮件检测、情感分析、新闻分类等。它特别适合处理高维稀疏数据,如文本数据,并且对噪声数据有一定的鲁棒性‌1。此外,MultinomialNB还可以用于多标签分类任务,即一个样本可能属于多个类别‌。

注意:MultinomialNB的训练集数据不能为负数

# 文本处理方式与BernoulliNB 的例子相识
# 这里举一个鸢尾花的例子
import pandas as pd
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNBiris = pd.read_csv(r'..\..\seaborn-data\iris.csv') # 加载数据
iris_class_dic = {'setosa':0, 'versicolor':1, 'virginica':2}
iris_class = ['setosa', 'versicolor', 'virginica']
iris_tz_array=iris.select_dtypes(include='number')
iris_class_array=iris['species'].map(iris_class_dic)X_train,X_test,Y_train,Y_test = train_test_split(iris_tz_array,iris_class_array,random_state=42)
mnb = MultinomialNB().fit(X_train,Y_train)
print(mnb.score(X_train,Y_train),mnb.score(X_test,Y_test)) #打印得分(结果还可以)
iris_class[int(mnb.predict([[5,2.8,1,0.3]])[0])] # 预测新类型

优点、缺点和参数

MultinomialNB 和 BernoulliNB 都只有一个参数 alpha,用于控制模型复杂度。alpha 的工作原理是,算法向数据中添加 alpha 这么多的虚拟数据点,这些点对所有特征都取正值。这可以将统计数据“平滑化”(smoothing)。alpha 越大,平滑化越强,模型复杂度就越低。算法性能对 alpha 值的鲁棒性(健壮性系统在受到外部扰动或内部参数摄动等不确定性因素干扰时,系统扔保持其结构和功能稳定。)相对较好,也就是说,alpha 值对模型性能并不重要。但调整这个参数通常都会使精度略有提高。

GaussianNB 主要用于高维数据,而另外两种朴素贝叶斯模型则广泛用于稀疏计数数据,比如文本。MultinomialNB 的性能通常要优于 BernoulliNB,特别是在包含很多非零特征的数据集(即大型文档)上。

朴素贝叶斯模型的训练和预测速度都很快,训练过程也很容易理解。该模型对高维稀疏数据的效果很好,对参数的鲁棒性也相对较好。朴素贝叶斯模型是很好的基准模型,常用于非常大的数据集,在这些数据集上即使训练线性模型可能也要花费大量时间。

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

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

相关文章

Cabot:开源免费的 PagerDuty 替代品,让系统监控更简单高效

在当今复杂的IT环境中,及时发现并解决系统问题至关重要。而Cabot作为一款开源免费的监控工具,为开发和运维团队提供了强大而简单的解决方案。本文将详细介绍Cabot的核心功能、优势以及快速部署方法,帮助你更好地保障系统稳定性。 Cabot简介 Cabot是一个功能类似PagerDuty的开…

AI-02a5a5.神经网络-与学习相关的技巧-权重初始值

权重的初始值 在神经网络的学习中,权重的初始值特别重要。实际上,设定什么样的权重初始值,经常关系到神经网络的学习能否成功。 不要将权重初始值设为 0 权值衰减(weight decay):抑制过拟合、提高泛化能…

TCP首部格式及三次握手四次挥手

TCP协议详解:首部格式与连接管理 一、TCP首部格式 TCP首部最小20字节,最大60字节,包含以下字段: | 源端口号(16bit) | 目的端口号(16bit) | | 序列号(32bit) | | 确认号(32bit) | | 数据偏移(4bit)| 保留(6bit) |U|A|P|R|S|…

Pytorch的Dataloader使用详解

PyTorch 的 DataLoader 是数据加载的核心组件,它能高效地批量加载数据并进行预处理。 Pytorch DataLoader基础概念 DataLoader基础概念 DataLoader是PyTorch基础概念 DataLoader是PyTorch中用于加载数据的工具,它可以:批量加载数据&#xf…

HTML、CSS 和 JavaScript 基础知识点

HTML、CSS 和 JavaScript 基础知识点 一、HTML 基础 1. HTML 文档结构 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.…

亚远景-对ASPICE评估体系的深入研究与分析

一、ASPICE评估体系的定义与背景 ASPICE&#xff08;Automotive Software Process Improvement and Capability Determination&#xff09;即汽车软件过程改进及能力测定模型&#xff0c;是由欧洲20多家主要汽车制造商共同制定的&#xff0c;专门针对汽车行业的软件开发过程评…

灰度图像和RGB图像在数据大小和编码处理方式差别

技术背景 好多开发者对灰度图像和RGB图像有些认知差异&#xff0c;今天我们大概介绍下二者差别。灰度图像&#xff08;Grayscale Image&#xff09;和RGB图像在编码处理时&#xff0c;数据大小和处理方式的差别主要体现在以下几个方面&#xff1a; 1. 通道数差异 图像类型通道…

从爬虫到网络---<基石9> 在VPS上没搞好Docker项目,把他卸载干净

1.停止并删除所有正在运行的容器 docker ps -a # 查看所有容器 docker stop $(docker ps -aq) # 停止所有容器 docker rm $(docker ps -aq) # 删除所有容器如果提示没有找到容器&#xff0c;可以忽略这些提示。 2.删除所有镜像 docker images # 查看所有镜像 dock…

Centos 上安装Klish(clish)的编译和测试总结

1&#xff0c;介绍 clish是一个类思科命令行补全与执行程序&#xff0c;它可以帮助程序员在nix操作系统上实现功能导引、命令补全、命令执行的程序。支持&#xff1f;&#xff0c;help, Tab按键。本文基于klish-2.2.0介绍编译和测试。 2&#xff0c;klish的编译 需要安装的库&…

理解计算机系统_并发编程(3)_基于I/O复用的并发(二):基于I/O多路复用的并发事件驱动服务器

前言 以<深入理解计算机系统>(以下称“本书”)内容为基础&#xff0c;对程序的整个过程进行梳理。本书内容对整个计算机系统做了系统性导引,每部分内容都是单独的一门课.学习深度根据自己需要来定 引入 接续上一帖理解计算机系统_并发编程(2)_基于I/O复用的并发…

系统可靠性分析:指标解析与模型应用全览

以下是关于系统可靠性分析中可靠性指标、串联系统与并联系统、混合系统、系统可靠性模型的相关内容&#xff1a; 一、可靠性指标 可靠度&#xff1a;是系统、设备或元件在规定条件和规定时间内完成规定功能的概率。假设一个系统由多个部件组成&#xff0c;每个部件都有其自身…

数字高程模型(DEM)公开数据集介绍与下载指南

数字高程模型&#xff08;DEM&#xff09;公开数据集介绍与下载指南 数字高程模型&#xff08;Digital Elevation Model, DEM&#xff09;广泛应用于地理信息系统&#xff08;GIS&#xff09;、水文模拟、城市规划、环境分析、灾害评估等领域。本文系统梳理了主流的DEM公开数据…

Python+大模型 day01

Python基础 计算机系统组成 基础语法 如:student_num 4.标识符要做到见名知意,增强代码的可读性 关键字 系统或者Python定义的,有特殊功能的字符组合 在学习过程中,文件名没有遵循标识符命名规则,是为了按序号编写文件方便查找复习 但是,在开发中,所有的Python文件名称必须…

C++引用编程练习

#include <iostream> using namespace std; double vals[] {10.1, 12.6, 33.1, 24.1, 50.0}; double& setValues(int i) { double& ref vals[i]; return ref; // 返回第 i 个元素的引用&#xff0c;ref 是一个引用变量&#xff0c;ref 引用 vals[i] } // 要调用…

机密虚拟机的威胁模型

本文将介绍近年兴起的机密虚拟机&#xff08;Confidential Virtual Machine&#xff09;技术所旨在抵御的威胁模型&#xff0c;主要关注内存机密性&#xff08;confidentiality&#xff09;和内存完整性&#xff08;integrity&#xff09;两个方面。在解释该威胁可能造成的问题…

【Rust trait特质】如何在Rust中使用trait特质,全面解析与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

Simulink模型回调

Simulink 模型回调函数是一种特殊的 MATLAB 函数&#xff0c;可在模型生命周期的特定阶段自动执行。它们允许用户自定义模型行为、执行初始化任务、验证参数或记录数据。以下是各回调函数的详细说明&#xff1a; 1. PreLoadFcn 触发时机&#xff1a;Simulink 模型加载到内存之…

FPGA:Xilinx Kintex 7实现DDR3 SDRAM读写

在Xilinx Kintex 7系列FPGA上实现对DDR3 SDRAM的读写&#xff0c;主要依赖Xilinx提供的Memory Interface Generator (MIG) IP核&#xff0c;结合Vivado设计流程。以下是详细步骤和关键点&#xff1a; 1. 准备工作 硬件需求&#xff1a; Kintex-7 FPGA&#xff08;如XC7K325T&…

Python爬虫实战:研究进制流数据,实现逆向解密

1. 引言 1.1 研究背景与意义 在现代网络环境中,数据加密已成为保护信息安全的重要手段。许多网站和应用通过二进制流数据传输敏感信息,如视频、金融交易数据等。这些数据通常经过复杂的加密算法处理,直接分析难度较大。逆向工程进制流数据不仅有助于合法的数据获取与分析,…

Java Spring Boot项目目录规范示例

以下是一个典型的 Java Spring Boot 项目目录结构规范示例&#xff0c;结合了分层架构和模块化设计的最佳实践&#xff1a; text 复制 下载 src/ ├── main/ │ ├── java/ │ │ └── com/ │ │ └── example/ │ │ └── myapp/ │…