【机器学习】自定义数据集 ,使用朴素贝叶斯对其进行分类

embedded/2025/2/1 10:48:38/

一、贝叶斯原理

        贝叶斯算法是基于贝叶斯公式的,其公式为:

P(A\mid B)= \frac{P(B\mid A)P(A)}{P(B)}

        其中P(A)叫做先验概率,P(B\mid A)叫做条件概率,P(B)叫做观察概率,P(A\mid B)叫做后验概率,也是我们求解的结果,通过比较后验概率的大小,将后验概率最大的类别作为真实类别

二、朴素贝叶斯分类

        朴素贝叶斯(Naive Bayes)是一种基于贝叶斯定理的简单概率分类算法,适用于文本分类、垃圾邮件过滤等任务。

        朴素贝叶斯的“朴素”之处在于它假设特征之间相互独立,即给定类别,一个特征的出现不影响其他特征的出现。这在现实世界中通常不成立,但在许多情况下,这种简化的假设仍然能够提供良好的分类性能。

三、自定义数据集 ,使用朴素贝叶斯对其进行分类

1、代码示例:

python">import numpy as np
from sklearn.naive_bayes import GaussianNB# 1. 自定义数据集
# 生成 100 个样本,每个样本有 2 个特征
X = np.random.randn(100, 2).astype(np.float32)
# 根据特征的线性组合生成标签,大于 0 标记为 1,否则标记为 0
y = (2 * X[:, 0] + 3 * X[:, 1] > 0).astype(np.int32)# 2. 初始化朴素贝叶斯模型
model = GaussianNB()# 3. 训练模型
model.fit(X, y)# 4. 输出训练结果
print("训练完成!")
print("模型参数:")
print("类别先验概率:", model.class_prior_)
print("类别数量:", model.class_count_)
print("每个类别的均值:", model.theta_)
print("每个类别的方差:", model.sigma_)

2、代码解释

① 数据集生成
  • X = np.random.randn(100, 2).astype(np.float32)

        生成 100 个样本,每个样本有 2 个特征。

        使用 np.random.randn 生成符合标准正态分布的随机数。

  astype(np.float32) 将数据类型转换为 32 位浮点数。

  • y = (2 * X[:, 0] + 3 * X[:, 1] > 0).astype(np.int32)

        根据特征的线性组合生成标签。

        公式 2 * X[:, 0] + 3 * X[:, 1] > 0 表示特征的线性组合是否大于 0。

        大于 0 的样本标记为 1,否则标记为 0

  astype(np.int32) 将标签转换为 32 位整数。

② 初始化朴素贝叶斯模型
  • model = GaussianNB()

        使用高斯朴素贝叶斯模型(Gaussian Naive Bayes)。

        适用于连续特征数据。

③ 训练模型
  • model.fit(X, y)

        使用数据集训练模型。

        模型会计算每个类别的先验概率、均值和方差。

④ 输出训练结果
  • model.class_prior_

        输出每个类别的先验概率。

  • model.class_count_

        输出每个类别的样本数量。

  • model.theta_

        输出每个类别的均值。

  • model.sigma_

        输出每个类别的方差。


http://www.ppmy.cn/embedded/158606.html

相关文章

tcp/ip协议和ip协议,tcp/ip协议 ip协议

TCP/IP协议和IP协议在网络通信中扮演着重要的角色,它们之间既有联系又有区别。以下是对两者的详细解释: TCP/IP协议 定义: TCP/IP协议(Transmission Control Protocol/Internet Protocol)是网络通信协议的一种&…

QT中给界面设置qss样式

1.在main函数中添加qss样式表 //1.读取qss文件QFile qss(QString("H:/code/QT_study/qss/page.qss"));if (qss.open(QFile::ReadOnly)){a.setStyleSheet(qss.readAll());}2.在使用的地方设置 if (parent->objectName().isEmpty()) {parent->setObjectName(QS…

Haskell语言的安全开发

Haskell语言的安全开发 引言 随着软件工程的不断发展,安全性问题日益成为软件开发中的关键挑战之一。面对日益复杂的系统和不断更新的攻击手段,开发者需要采用更加严格和有效的手段来保证软件的安全性。Haskell作为一种纯函数式编程语言,以…

HTMLCSS :下雪了

这段代码创建了一个动态的雪花飘落加载动画,通过 CSS 技术实现了雪花的下落和消失效果,为页面添加了视觉吸引力和动态感。 大家复制代码时,可能会因格式转换出现错乱,导致样式失效。建议先少量复制代码进行测试,若未能…

CSS核心

CSS的引入方式 内部样式表是在 html 页面内部写一个 style 标签&#xff0c;在标签内部编写 CSS 代码控制整个 HTML 页面的样式。<style> 标签理论上可以放在 HTML 文档的任何地方&#xff0c;但一般会放在文档的 <head> 标签中。 <style> div { color: r…

React第二十七章(Suspense)

Suspense Suspense 是一种异步渲染机制&#xff0c;其核心理念是在组件加载或数据获取过程中&#xff0c;先展示一个占位符&#xff08;loading state&#xff09;&#xff0c;从而实现更自然流畅的用户界面更新体验。 应用场景 异步组件加载&#xff1a;通过代码分包实现组件…

Ubuntu Server连接wifi

背景 家里服务器放在客厅太吵了, 准备挪到阳台, 所以买了TP wifi接收器, 因此需要配置wifi连接. 刚开始买了Tenda Ax300, 结果不支持服务器系统, 买前还是得和客服交流交流. 准备 驱动安装 对于windows系统来说, 这款接收器是免驱的, 但在linux上需要安装相应型号驱动 安装…

基于STM32的数字多重仪表教学

引言 数字多重仪表是一种可用于测量和显示多种电气参数的设备&#xff0c;广泛应用于实验室、工业和家庭电气工程中。本项目将使用STM32微控制器构建一个简单的数字多重仪表&#xff0c;能够测量电压、电流和功率&#xff0c;并通过LCD显示模块实时显示这些信息。 环境准备 硬…