闭着眼学机器学习——朴素贝叶斯分类

news2024/11/25 13:22:59

引言:
在正文开始之前,首先给大家介绍一个不错的人工智能学习教程:https://www.captainbed.cn/bbs。其中包含了机器学习、深度学习、强化学习等系列教程,感兴趣的读者可以自行查阅。


1. 算法介绍

朴素贝叶斯是一种基于贝叶斯定理的分类算法,广泛应用于文本分类、垃圾邮件过滤、情感分析等领域。它是一种简单但非常有效的分类方法,特别适用于高维度特征空间的分类问题。

朴素贝叶斯分类器的"朴素"来源于它对特征之间独立性的假设。尽管这个假设在现实中往往不成立,但该算法在许多实际应用中仍然表现出色。

2. 算法原理

朴素贝叶斯分类器基于贝叶斯定理:

P ( A ∣ B ) = P ( B ∣ A ) ∗ P ( A ) P ( B ) P(A|B) = \frac{P(B|A) * P(A)}{P(B)} P(AB)=P(B)P(BA)P(A)

在分类问题中,我们关心的是给定特征 X X X,类别 Y Y Y的后验概率 P ( Y ∣ X ) P(Y|X) P(YX):

P ( Y ∣ X ) = P ( X ∣ Y ) ∗ P ( Y ) P ( X ) P(Y|X) = \frac{P(X|Y) * P(Y)}{P(X)} P(YX)=P(X)P(XY)P(Y)

由于朴素贝叶斯假设特征之间相互独立,因此:

P ( X ∣ Y ) = P ( X 1 ∣ Y ) ∗ P ( X 2 ∣ Y ) ∗ . . . ∗ P ( X n ∣ Y ) P(X|Y) = P(X_1|Y) * P(X_2|Y) * ... * P(X_n|Y) P(XY)=P(X1Y)P(X2Y)...P(XnY)

分类时,我们选择使 P ( Y ∣ X ) P(Y|X) P(YX)最大的类别 Y Y Y作为预测结果。

3. 案例分析

我们使用著名的鸢尾花(Iris)数据集来演示朴素贝叶斯分类器的应用。

首先建立朴素贝叶斯分类模型训练数据进行分类并打印分类结果:

import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import accuracy_score, classification_report
from sklearn.decomposition import PCA

# 加载数据
iris = datasets.load_iris()
X = iris.data
y = iris.target

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 创建并训练模型
gnb = GaussianNB()
gnb.fit(X_train, y_train)

# 预测
y_pred = gnb.predict(X_test)

# 评估模型
accuracy = accuracy_score(y_test, y_pred)
print(f"准确率: {accuracy:.2f}")

print("\n分类报告:")
print(classification_report(y_test, y_pred, target_names=iris.target_names))

打印出模型的准确率和分类报告如下:


接下来对分类结果进行可视化:

# 可视化
# 使用PCA降维到2D
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)

# 绘制散点图
plt.figure(figsize=(10, 8))
colors = ['red', 'green', 'blue']
for i, c in zip(range(3), colors):
    plt.scatter(X_pca[y == i, 0], X_pca[y == i, 1], c=c, label=iris.target_names[i])

plt.title('鸢尾花数据集的PCA可视化')
plt.xlabel('第一主成分')
plt.ylabel('第二主成分')
plt.legend()
plt.show()

# 绘制决策边界
x_min, x_max = X_pca[:, 0].min() - 0.5, X_pca[:, 0].max() + 0.5
y_min, y_max = X_pca[:, 1].min() - 0.5, X_pca[:, 1].max() + 0.5
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02),
                     np.arange(y_min, y_max, 0.02))
Z = gnb.predict(pca.inverse_transform(np.c_[xx.ravel(), yy.ravel()]))
Z = Z.reshape(xx.shape)

plt.figure(figsize=(10, 8))
plt.contourf(xx, yy, Z, alpha=0.8, cmap=plt.cm.RdYlBu)
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y, cmap=plt.cm.RdYlBu, edgecolor='black')
plt.title('朴素贝叶斯分类器的决策边界')
plt.xlabel('第一主成分')
plt.ylabel('第二主成分')
plt.show()

绘制数据降维后的数据散点图:


绘制朴素贝叶斯分类结果图:

在这个例子中,我们使用了高斯朴素贝叶斯分类器(GaussianNB),它假设特征的条件概率分布服从高斯分布。模型在测试集上达到了98%的准确率,表现相当不错。

4. 总结

朴素贝叶斯分类器的优点包括:

  1. 简单,易于实现
  2. 训练速度快
  3. 对小规模数据表现良好
  4. 对高维数据有很好的分类性能

然而,它也有一些局限性:

  1. 特征独立性假设在实际中往往不成立
  2. 对数值型特征的处理不如某些其他算法

总的来说,朴素贝叶斯是一种简单而强大的分类算法,特别适用于文本分类等高维度特征空间的问题。在实际应用中,它常常作为基准模型或快速原型开发的首选算法。

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

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

相关文章

c++应用网络编程之十一Linux下的epoll模式基础

一、epoll模式 在前面分析了select和poll两种IO多路复用的模式,但总体给人的感觉有一种力不从心的感觉。尤其是刚刚接触底层网络开发的程序员,被很多双十一千万并发,游戏百万并发等等已经给唬的一楞一楞的。一听说只支持一两千个并发&#x…

YOLOv9分割改进 ,YOLOv9分割改进主干网络为华为EfficientNet,助力涨点

YOLOv9 分割改进前训练结果: YOLOv9 分割改进后训练结果: 摘要 卷积神经网络(ConvNets)通常在固定的资源预算下开发,然后在有更多资源时进行扩展以提高准确性。在本文中,我们系统地研究了模型扩展,并发现仔细平衡网络深度、宽度和分辨率可以带来更好的性能。基于这一…

【Python库安装】Python环境安装wrf-python库

【Python库安装】Python环境安装wrf-python库 wrf-python库概述Python中安装wrf-python库方式1:使用pip安装方式2:离线安装,使用whl文件安装另:报错 方式3:使用conda安装wrf-python另:报错 参考 wrf-python…

教育培训系统小程序的设计

教师账户功能包括:系统首页,个人中心,课后习题测试管理,观看进度管理,论坛管理,网课信息管理,公告信息管理,学生管理,试卷管理,测试管理 微信端账号功能包括…

RK3568学习之Nginx移植+RTMP推流

1.下载 Nginx 源码 进入到 Ubuntu 系统的某个目录下,下载 Nginx 源码: wget http://nginx.org/download/nginx-1.20.0.tar.gz这里我们下载的是 1.20 版本,这是比较新的版本了。下载完成之后将得到一个名为 nginx-1.20.0.tar.gz的压缩包文件…

嵌入式中数据库sqlit3基本使用方法与现象

大家好,今天主要给大家分享一下,数据库的使用方法,观察对应的效果。 第一:数据库sqlit3基本安装方法 sqlite3 安装 使用 Ubuntu # 安装软件 sudo apt-get install sqlite3# 查看版本 sqlite3 -version# 安装编译工具包 sudo apt-get install sqlite3-dev# 安装可视化工具…

为何2024年诺贝尔物理学奖颁发给了机器学习与神经网络领域的研究者?

近日,2024年诺贝尔物理学奖颁发给了机器学习与神经网络领域的研究者,这是历史上首次出现这样的情况。这项奖项原本只授予对自然现象和物质的物理学研究作出重大贡献的科学家,如今却将全球范围内对机器学习和神经网络的研究和开发作为了一种能…

html css js 生成随机颜色

起因&#xff0c; 目的: 整理文件&#xff0c;发现之前写的一个小工具。 效果图 点击按钮会生成新的格子。 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"wi…

3.计算机网络_端口号

端口号的由来 运输层的作用&#xff1a; 在计算机网络中&#xff0c;运输层处在用户功能的最底层、通信部分的最高层的位置&#xff0c;也就是说运输层是用户数据和实际网络通信的桥梁。因此运输层屏蔽了网络的实现部分&#xff0c;以协议的方式向用户层提供了接口&#xff…

结构体 超详解

目录 1. 结构体的声明与创建 1.1 结构体类型的定义声明&#xff08;类型&#xff09; 1.2 结构体变量的创建和初始化&#xff08;变量&#xff09; 1.3 结构体变量的特殊声明&#xff08;类型和变量&#xff09; 1.3.1 定义时创建变量 1.3.2 结构体的不完全声明&#xff…

SpaceWire原理介绍及FPGA实现

SpaceWire原理及介绍 spacewire特点 SpaceWire 总线具有高速、全双工、点对点、串行传输的特点。它由欧洲航 空局&#xff08;European Space Agency&#xff0c;简称 ESA&#xff09;联合欧洲航空公司等共同发起&#xff0c;由 Dundee 大学制定&#xff0c;以 IEEE-1355 接口…

大数据治理:挑战与实践

目录 大数据治理&#xff1a;挑战与实践 1. 大数据治理的基本概念 2. 大数据治理的关键要素 3. 大数据治理实施框架 3.1 策略与目标制定 3.2 数据治理工具 3.3 数据生命周期管理 4. 大数据治理的挑战与解决方案 5. 大数据治理的价值与未来趋势 5.1 提升决策质量 5.2…

MySQL初识

在了解什么是MySQL前&#xff0c;我们先了解一下什么是数据库&#xff1f;&#xff1f; 1. 数据库简介 1.1 什么是数据库 数据库是20世纪60年代末发展起来的⼀项重要技术&#xff0c;已经成为计算机科学与技术的⼀个重要分⽀。数据库技术主要是⽤来解决数据处理的⾮数值计算问…

【MATLAB代码,带TDOA数据导入】TDOA最小二乘求三维下的位置(1主锚点、3副锚点),多个时间点、输出位置图像

此TDOA&#xff08;Time Difference of Arrival&#xff09;最小二乘法三维定位 MATLAB 工具是一个先进的定位解决方案&#xff0c;专为需要高精度位置计算的工程师、研究人员和开发者设计。此工具可以通过多个时间点的测量数据&#xff0c;结合主锚点和副锚点的配合&#xff0…

Hi3061M——不定长串口接收实现

这里写目录标题 前言串口接收流程串口中断函数ReadITCallBack1中断接收函数 补充结果展示 前言 Hi3061M给了很多相关的串口案例&#xff0c;但大多数是定长的&#xff0c;指定长度进行接收读取&#xff0c;而实际需求往往需要用到不定长的接收。 串口接收流程 首先介绍下Hi3…

Android终端GB28181音视频实时回传设计探讨

技术背景 好多开发者&#xff0c;在调研Android平台GB28181实时回传的时候&#xff0c;对这块整体的流程&#xff0c;没有个整体的了解&#xff0c;本文以大牛直播SDK的SmartGBD设计开发为例&#xff0c;聊下如何在Android终端实现GB28181音视频数据实时回传。 技术实现 Andr…

C++——红黑树(带头结点)

红黑树 红黑树的概念红黑树的定义红黑树的性质红黑树的优点操作原理例图&#xff1a; 红黑树的实现红黑树的框架红黑树的插入实现头结点的作用红黑树的插入步骤&#xff08;简易理解版带图&#xff09; 红黑树的插入具体代码详解红黑树的旋转代码红黑树的查验 红黑树的概念 红…

基于矢量瓦片技术的GIS引擎

矢量地图是通过对点线面坐标信息集合的管理和渲染实现优于栅格画面质量的一种gis展示技术&#xff0c;涉及不同坐标系变换&#xff0c;视窗比例尺换算等。当你遇到海量坐标数据和属性信息需要管理时你就不得不在有限内存和庞大数据间左右为难&#xff0c;将地图矢量数据进行分块…

LabVIEW提高开发效率技巧----时序分析

一、什么是时序分析&#xff1f; 时序分析是优化LabVIEW程序性能的重要步骤。它通过分析程序各个部分的执行时间&#xff0c;帮助开发者找到程序运行中的瓶颈&#xff0c;并进行有针对性的优化。在LabVIEW中&#xff0c;Profile Performance and Memory工具是进行时序分析的关…

浏览器中使用模型

LLM 参数越来越小&#xff0c;使模型跑在端侧成为可能&#xff0c;为什么要模型跑在端侧呢&#xff0c;首先可以节省服务器的算力&#xff0c;现在 GPU 的租用价格还是比较的高的&#xff0c;例如租用一个 A10 的卡1 年都要 3 万多。如果将一部分算力转移到端侧通过小模型进行计…