机器学习 | 探索朴素贝叶斯算法的应用

news2024/11/16 5:30:22

朴素贝叶斯算法是一种基于贝叶斯定理和特征条件独立假设的分类算法。它被广泛应用于文本分类、垃圾邮件过滤、情感分析等领域,并且在实际应用中表现出色。

朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法:

1)对于给定的待分类项r,通过学习到的模型计算后验概率分布。

2)此项出现的条件下各个目标类别出现的概率,将后验概率最大的类作为α所属的类别。

核心思想:是利用特征之间的条件独立性,来对给定的数据进行分类。具体而言,朴素贝叶斯算法基于贝叶斯定理,通过计算每个类别下各个特征对应的概率来进行分类推断。其对应的贝叶斯公式如下:

朴素贝叶斯朴素在: 计算条件概率分布P(X=xY=C_k)时,NB引入了一个很强的条件独立假设,即,当Y确定时,X的各个特征分量取值之间相互独立。

在估计条件概率P(X|Y)时出现概率为0的情况下采用贝叶斯估计,简单来说就是引入“ 入”:

入=0时,就是普通的极大似然估计;入=1时称为拉普拉斯平滑。

接下来通过文章分类计算案例进行演示,需求是通过前四个训练样本(文章),判断第五篇文章,是否属于China类:

其计算结果如下所示:

上面的例子我们得到P(TokvolC)和P(JapanlC)都为0,这是不合理的,如果词频列表里面有很多出现次数都为0,很可能计算结果都为零。 解决办法就是使用拉普拉斯平滑系数:

商品评论情感分析:接下来通过一个案例来解释一下朴素贝叶斯算法的实现过程,其大致的操作就是给定一段话判断当前是好评还是差评:

下面这段代码主要实现了文本数据的处理、特征提取和朴素贝叶斯模型的训练与评估:

import pandas as pd
import numpy as np
import pkuseg
import matplotlib.pyplot as plt
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB

# 获取数据
data = pd.read_json('./data/书籍评价.json')
# print(data)

# 数据基本处理
# 取出内容列用于后面分析
content = data["内容"]
# print(content)
# 把评价中的好评差评转换为数字
data.loc[data.loc[:, "评价"] == "好评", "评论编号"] = 1
data.loc[data.loc[:, "评价"] == "差评", "评论编号"] = 0

# 选择停用词
stopwords = []
with open("./data/stopwords.txt", "r", encoding="utf-8") as f:
    lines = f.readlines()
    for tmp in lines:
        line = tmp.strip()
        stopwords.append(line)
stopwords = set(stopwords) # 去重,集合格式

# 把内容处理成标准模式
comment_list = []
seg = pkuseg.pkuseg()  # 实例化分词器对象
for tmp in content:
    seg_list = seg.cut(tmp)
    seg_list = [word for word in seg_list if word not in stopwords]  # 过滤停用词
    seg_str = " ".join(seg_list)  # 使用空格连接词语
    comment_list.append(seg_str)

# 统计词频
con = CountVectorizer()
X = con.fit_transform(comment_list)

# 准备训练集
x_train = X.toarray()[:10, :]
y_train = data["评价"][:10]

# 准备测试集
x_test = X.toarray()[10:, :]
y_test = data["评价"][10:]

# 3. 模型训练
# 构建朴素贝叶斯算法分类器
mb = MultinomialNB(alpha=1)  # alpha为Laplace平滑系数

# 训练数据
mb.fit(x_train, y_train)

# 预测数据
y_pred = mb.predict(x_test)
# 预测值与真实值展示
print("预测值:", y_pred)
print("真实值:\r\n", y_test)

# 模型评估
result = mb.score(x_test, y_test)
print("模型评估的结果为: \n", result)

最终的模型评估结果会显示模型在测试集上的准确率。整个过程涉及数据处理、文本特征提取、模型训练和评估:

我们可以体验一下百度开源的情感分析项目:点击跳转地址 :

结果如下:

朴素贝叶斯优缺点

优点

1)朴素贝叶斯模型发源于古典数学理论,有稳定的分类效率

2)对缺失数据不太敏感,算法也比较简单,常用于文本分类

3)分类准确度高,速度快

缺点

1)由于使用了样本属性独立性的假设,所以如果特征属性有关联时其效果不好

2)需要计算先验概率,而先验概率很多时候取决于假设,假设的模型可以有很多种,因此在某些时候会由于假设的先验模型的原因导致预测效果不佳;

为什么属性独立性假设在实际情况中很难成立,但朴素贝叶斯仍能取得较好的效果?

1)人们在使用分类器之前,首先做的第一步(也是最重要的一步)往往是特征选择,这个过程的目的就是为了排除特征之间的共线性、选择相对较为独立的特征;

2)对于分类任务来说,只要各类别的条件概率排序正确,无需精准概率值就可以得出正确分类;

3)如果属性间依赖对所有类别影响相同,或依赖关系的影响能相互抵消,则属性条件独立性假设在降低计算复杂度的同时不会对性能产生负面影响。

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

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

相关文章

【计算机网络基础篇】学习笔记系列之一《TCP/IP 网络模型》

文章目录 1、问题提出2,网络协议是分层的3,应用层4,传输层5,网络层6,网络接口层7,总结 1、问题提出 为什么要有 TCP/IP 网络模型? 不同设备上的进程间通信需要通过一套通用的网络协议进行网络通…

three.js 向量方向(归一化.normalize)

效果&#xff1a; <template><div><el-container><el-main><div class"box-card-left"><div id"threejs" style"border: 1px solid red"></div><div><p><el-button type"primary…

Springboot启动出现Waiting for changelog lock...问题

今天在开发的时候&#xff0c;Springboot启动的时候出现Waiting for changelog lock…问题. 问题原因&#xff1a;该问题就是发生了数据库的死锁问题&#xff0c;可能是由于一个杀死的liquibase进程没有释放它对DATABASECHANGELOGLOCK表的锁定&#xff0c;导致服务启动失败&…

Blender_查看版本

Blender_查看版本 烦人的烦恼&#xff0c;没找见哪儿可以查看版本&#xff1f; 算是个隐蔽的角落&#xff01;

Rust-获取随机数练习案例

文章目录 前言一、取官网示例猜数字游戏玩一玩cargo checkTOML文件 二、完整代码总结 前言 Rust学习系列-获取随机数练习案例&#xff0c;基于cargo 进行案例练习&#xff0c;过程中会使用cargo check&#xff1b; cargo run&#xff1b;等命名&#xff0c;同时了解基础的let …

【Java EE】----Bean的作用域和生命周期

1.Bean的作用域 定义&#xff1a;Bean 的作⽤域是指 Bean 在 Spring 整个框架中的某种⾏为模式&#xff0c;⽐如 singleton 单例作⽤域&#xff0c;就 表示 Bean 在整个 Spring 中只有⼀份 &#xff08;产生的原因&#xff0c;Bean 默认情况下是单例状态&#xff08;singleton&…

2024数据分析管理、数字经济与教育国际学术会议(ICDAMDEE2024)

会议简介 2024年数据分析管理、数字经济和教育国际学术会议&#xff08;ICDAMDEE 2024&#xff09;将在武汉举行。会议不仅展示了来自世界各地的研究专家围绕数据分析管理、数字经济和教育的最新科研成果&#xff0c;还为来自不同地区的代表们提供了面对面的交流意见和实验经验…

编程实例分享,宠物诊所电子处方怎么开,兽医电子处方模板电子版操作教程

编程实例分享&#xff0c;宠物诊所电子处方怎么开&#xff0c;兽医电子处方模板电子版操作教程 一、前言 以下操作教程以 佳易王兽医电子处方软件V16.0为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 1、在系统 设置里可以设置打印参数&#x…

【Docker】了解Docker Desktop桌面应用程序,TA是如何管理和运行Docker容器(2)

欢迎来到《小5讲堂》&#xff0c;大家好&#xff0c;我是全栈小5。 这是《Docker容器》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对…

【Spring】Spring事务和事务传播机制

文章目录 什么是事务事务的操作Spring 中事务的实现Spring编程式事务Spring 声明式事务 TransactionalTransactional作用Transactional 详解rollbackFor事务隔离级别Spring 事务隔离级别Spring 事务传播机制 什么是事务 事务&#xff08;Transaction&#xff09;是一个程序中一…

最新的 Ivanti SSRF 零日漏洞正在被大规模利用

Bleeping Computer 网站消息&#xff0c;安全研究员发现 Ivanti Connect Secure 和 Ivanti Policy Secure 服务器端请求伪造 (SSRF) 漏洞&#xff08;CVE-2024-21893 &#xff09;正在被多个威胁攻击者大规模利用。 2024 年 1 月 31 日&#xff0c;Ivanti 首次就网关 SAML 组件…

Vivado-IP核

Vivado-IP核 主程序 timescale 1ns / 1ps ////module ip_clk_wiz(input sys_clk,input sys_rst_n,output clk_out1,output clk_out2,output clk_out3,output clk_out4,output locked);clk_wiz_0 instance_name(// Clock out ports.clk_out1(clk_out1), // output clk_out…

java设计模式- 建造者模式

一 需求以及实现方式 1.1 需求描述 我们要创建一个表示汽车的复杂对象&#xff0c;汽车包含发动机、轮胎和座椅等部分。用传统方式创建&#xff0c;代码如下 1.2 传统实现方式 1.抽象类 public abstract class BuildCarAbstaract {//引擎public abstract void buildEng…

OpenGL 入门(十)— 光照系统

光照系统 前言平行光点光源衰减衰减的实现 聚光平滑/软化边缘 多光源 前言 介绍三种光源类型&#xff1a;平行光&#xff08;Directional Light&#xff09;、点光源&#xff08;Point Light&#xff09;、聚光灯(Spot Light)。 平行光(Directional Light)&#xff1a;只有一…

【力扣】整数反转,判断是否溢出的数学解法

整数反转原题地址 方法一&#xff1a;数学 反转整数 如何反转一个整数呢&#xff1f;考虑整数操作的3个技巧&#xff1a; xmod10可以取出x的最低位&#xff0c;如x123&#xff0c;xmod103。x/10可以去掉x的最低位&#xff0c;如x123&#xff0c;x/10&#xff0c;x12。xx*10…

C# CAD交互界面-自定义面板集(四)

运行环境 vs2022 c# cad2016 调试成功 一、程序说明 创建自定义面板集&#xff08;PaletteSet&#xff09;的C#命令方法实现。该方法名为CreatePalette&#xff0c;当在AutoCAD环境中调用此命令时&#xff0c;会执行以下操作&#xff1a; 获取AutoCAD主应用对象&#xff1…

docer compose部署simple-docker

简介 一个看似简陋但是功能足够用的docker管理工具 安装 创建目录 mkdir -p /opt/simple-docker cd /opt/simple-docker 创建并启动容器 编写docker-compose.yml文件,内容如下 version: 3 services: redis: image: redis:latest restart: always web: image: registry.cn-…

APP攻防-资产收集篇FridaHOOKXposed证书提取单向双向检验抓包mobsf

知识点 1、单向校验-XP框架&Frida&HOOK 2、双向校验-Frida&HOOK&导入证书 一、演示案例-APP-综合分析-Mobexler&MobSF识别 mobsf 移动安全框架 (MobSF) 是一种自动化的一体化移动应用程序 (Android/iOS/Windows) 渗透测试、恶意软件分析和安全评估框架…

Elasticsearch:BM25 及 使用 Elasticsearch 和 LangChain 的自查询检索器

本工作簿演示了 Elasticsearch 的自查询检索器将非结构化查询转换为结构化查询的示例&#xff0c;我们将其用于 BM25 示例。 在这个例子中&#xff1a; 我们将摄取 LangChain 之外的电影样本数据集自定义 ElasticsearchStore 中的检索策略以仅使用 BM25使用自查询检索将问题转…

Fate-Serving推理服务源码解读

https://fate-serving.readthedocs.io/en/develop/?queryguest 什么是Fate-Serving fate-serving是FATE的在线部分&#xff0c;在使用FATE进行联邦建模完成之后&#xff0c;可以使用fate-serving进行包括单笔预测、多笔预测以及多host预测在内的在线联合预测。 模型的初始化流…