【机器学习】朴素贝叶斯解决实际问题

news2024/12/26 12:07:12

之前写过这样一道题:

现在换成使用朴素贝叶斯解决这个问题

首先先了解一下朴素贝叶斯

这是之前课本里的笔记记录:

【机器学习笔记】朴素贝叶斯(从先验分布到后验分布)-CSDN博客

简单的讲解一下这道题需要的知识点


        朴素贝叶斯是一个基于贝叶斯定理的简单概率分类器,它假设给定目标值时特征之间的条件独立性。"朴素"这个词意味着这个模型在概率模型中忽略了特征之间的相互作用。

        它工作的方式如下:

        贝叶斯定理: 这是朴素贝叶斯分类器的核心,它提供了给定某个类别下观测到某些特征的概率。公式如下:

  在这里 P(A|B) 是在给定 B 的情况下 A 的概率, P(B|A)是在给定 A 的情况下观察到 B 的概率,P(A)和P(B)分别是 A 和 B 的边缘概率。

        条件独立性假设: 在给定目标类别的情况下,假设所有特征都是相互独立的。尽管这个假设在实际情况中很少成立,但朴素贝叶斯分类器在实践中表现得出奇地好,即使特征之间存在一定的依赖。

        训练: 在训练过程中,分类器会通过数据集计算特征与类别之间的关系,即每个类别下特征的条件概率。

        预测: 在预测时,它会使用这些概率和贝叶斯定理来预测未见实例的类别。对于每个类别,它会计算一个概率,并将实例分类到具有最高概率的类别。

        朴素贝叶斯分类器适用于多种分类任务,特别是文本分类。因为其计算效率很高,并且易于实现,所以在处理大型数据集时尤其受欢迎。此外,由于其对缺失数据不敏感,它也适用于不完整数据集。


        朴素贝叶斯算法是一种基于贝叶斯定理与特征条件独立假设的分类方法。对于给定的训练数据集,首先基于特征条件独立假设学习输入/输出的联合概率分布;然后基于此模型,对于给定的输入x,利用贝叶斯定理求出后验概率最大的输出y。

        我们要预测的新实例是:

        对于这个示例,我们要使用朴素贝叶斯算法来预测它是否属于类别N或P。

步骤如下:

1. 数据准备:
         数据集由不同天气情况的属性(Outlook, Temperature, Humidity, Windy)和一个类别标签(Class)组成。
         LabelEncoder被用来将文本数据转换为模型可以理解的数值数据。

2. 数据转换:
数据集中的每一行都被转换成数值格式,这一过程使用了之前拟合好的编码(`LabelEncoder`)。

3. 模型训练:
创建了GaussianNB分类器实例,并使用特征和对应的标签来训练它。

4. 新数据点的预测:
定义了一个新的数据点,表示今天的天气情况。
使用相同的编码器将新数据点转换为数值。
使用训练好的朴素贝叶斯模型对新数据点的类别进行预测。

5. 解码和输出结果:
使用class_encoder.inverse_transform方法将预测结果从数值转换回原始的类别标签。


根据解码后的标签输出预测结果,即今天是否会遇见所询问的人。

每一步都关键地支持了整个预测流程,确保数据以正确的格式输入模型,并且预测结果以人类可读的形式呈现。你的代码组织得很好,并且包含了从数据准备到结果输出的完整流程。

完整代码如下:

from sklearn.naive_bayes import GaussianNB
from sklearn.preprocessing import LabelEncoder


# 数据准备
data = [
    ["sunny", "hot", "high", False, "N"],
    ["sunny", "hot", "high", True, "N"],
    ["overcast", "hot", "high", False, "P"],
    ["rain", "mild", "high", False, "P"],
    ["rain", "cool", "normal", False, "P"],
    ["rain", "cool", "normal", True, "N"],
    ["overcast", "cool", "normal", True, "P"],
    ["sunny", "mild", "high", False, "N"],
    ["sunny", "cool", "normal", False, "P"],
    ["rain", "mild", "normal", False, "P"],
    ["sunny", "mild", "normal", True, "P"],
    ["overcast", "mild", "high", True, "P"],
    ["overcast", "hot", "normal", False, "P"],
    ["rain", "mild", "high", True, "N"]
]


# 转换数据集
outlook_encoder = LabelEncoder().fit(["sunny", "overcast", "rain"])
temperature_encoder = LabelEncoder().fit(["hot", "mild", "cool"])
humidity_encoder = LabelEncoder().fit(["high", "normal"])
windy_encoder = LabelEncoder().fit([False, True])
class_encoder = LabelEncoder().fit(["N", "P"])

numerical_data = []
for row in data:
    numerical_row = [
        outlook_encoder.transform([row[0]])[0],
        temperature_encoder.transform([row[1]])[0],
        humidity_encoder.transform([row[2]])[0],
        windy_encoder.transform([row[3]])[0],
        class_encoder.transform([row[4]])[0]
    ]
    numerical_data.append(numerical_row)

# 分离特征和类别标签
features = [row[:-1] for row in numerical_data]
labels = [row[-1] for row in numerical_data]

# 创建和训练朴素贝叶斯模型
nb = GaussianNB()
nb.fit(features, labels)

# 预测新的数据点
new_point = ["rain", "hot", "high", False]
numerical_new_point = [
    outlook_encoder.transform([new_point[0]])[0],
    temperature_encoder.transform([new_point[1]])[0],
    humidity_encoder.transform([new_point[2]])[0],
    windy_encoder.transform([new_point[3]])[0]
]

# 使用朴素贝叶斯进行预测
predicted_class = nb.predict([numerical_new_point])[0]

# 解码预测结果
predicted_label = class_encoder.inverse_transform([predicted_class])[0]

# 根据预测的标签输出结果
if predicted_label == 'P':
    print("今天会遇见ta吗: 能")
elif predicted_label == 'N':
    print("今天会遇见ta吗: 不能")

这是我的作业啊。。查重率我不怕 仅供学习和记录

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

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

相关文章

JVM-垃圾收集算法

前言 在 Java 中,垃圾收集(Garbage Collection)是一种自动管理内存的机制,它负责在运行时识别和释放不再被程序使用的内存,从而避免内存泄漏和悬空引用问题。本篇文章将介绍三种常见的垃圾收集算法。 标记-清除&…

11.接口自动化学习-Yaml学习

1.配置文件作用 配置文件项目角度: (1)现成的应用–第三方组件 mysql–数据库–my.conf tomcat–web服务器–server.xml 修改:连接数/端口 redis–缓存服务器–redis.conf 修改配置 jemeter–压测工具–jemeter.properties–修改…

tcp网络编程——2

1.一个服务器只能有一个客户端连接(下面代码) ​​​​​​​tcp网络编程(基础)-CSDN博客 2.一个服务器可以有多个客户端连接(多线程) server端创建多个线程,每个线程与不同的client端建立连…

【Camera Sensor Driver笔记】一、Sensor基本概念

时钟 sensor clock sensor的输入时钟 MCLK 输出时钟: 1. VTPixelClock:会影响sensor内部的帧率、曝光 VTPixelClock(vt_clk)Video Timing Clock, From sensor PLL VTPixelClock Framelengthlines x LinelengthPixelClock x FPS Framelengthlines L…

数据库主从复制

一、主从复制概述 1、介绍: 主从复制是指将主数据库的 DDL 和 DML 操作写入到二进制日志中,将二进制日志传送到从库服务器,然后在从库上对这些日志重新执行(重做),从而使得从库和主库的数据保持同步。 M…

复合机器人在磁钢上下料中的应用及其优势分析

复合机器人是一种集成了移动机器人和工业机器人功能的设备,其独特之处在于拥有“手、脚、眼、脑”的综合能力,从而实现了更高的灵活性和操作效率。在磁钢上下料的应用场景中,复合机器人能够发挥显著的优势。 首先,复合机器人可以根…

chrome浏览器查看css样式

样式的查看 1.匹配器为灰色文本: 表示非当前选择器 2.样式有划线标识:CSS属性无效或未知 / 属性值无效 / 被其他属性覆盖的属性 3.属性以浅色文本显示且有感叹号提示:属性虽然有效,但由于CSS逻辑而没有任何影响 转自:…

判断完数(C语言)

一、N-S流程图&#xff1b; 二、运行结果&#xff1b; 三、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int n 0;int i 1;int j 0;int result 1;//提示用户&#xff1b;printf("请输入一个…

Axure如何实现限制选择项数量的交互

大家经常会看到这样的功能设计&#xff1a;可以多选&#xff0c;但是限制多选。比如某招聘网站城市的选择只能选择5个。再选择第6个的时候会提示最多只能选择5项。 这个效果是我们经常会遇到的&#xff0c;在工作中也经常会遇到需要制作这样的效果。今天我们一起来看看&#xf…

Matlab无基础快速上手1(遗传算法框架)

本文用经典遗传算法框架模板&#xff0c;对matlab新手友好&#xff0c;快速上手看懂matlab代码&#xff0c;快速应用实践&#xff0c;源代码在文末给出。 基本原理&#xff1a; 遗传算法&#xff08;Genetic Algorithm&#xff0c;GA&#xff09;是一种受生物学启发的优化算法…

IDEA JAVA项目如何设置JVM参数

问题背景&#xff1a; 有时候项目在本地启动时会报参数引用不到&#xff0c;如果确实找不到在哪里添加的话&#xff0c;我们可以先加JVM参数来暂时解决本地环境的调试。 解决方案&#xff1a; 编辑配置Edit Configurations 选择需要配置的项目&#xff0c;点击Modify options 选…

FileNotFoundError: [Errno 2] No such file or directory: ‘llvm-config‘

查找本地的llvm-config find / -name llvm-config 2>/dev/null 输出 /usr/local/Cellar/llvm/17.0.6_1/bin/llvm-config 执行安装命令 LLVM_CONFIG/usr/local/Cellar/llvm/17.0.6_1/bin/llvm-config pip install llvmlite # 看自己路径在哪

男朋友花费了9万多,供我上大学,现在毕业1w多想分手,怎么办?

大家好&#xff0c;我是YUAN哥&#xff01;今天要跟大家聊聊一个热门话题——爱情与金钱的关系。最近看到一个网友的发帖&#xff0c;她说自己的男朋友供她上了四年大学&#xff0c;现在她找到了好工作&#xff0c;却想分手了。这个问题引起了网友们的热议。 在爱情中&#xff…

overflow(溢出)4个属性值,水平/垂直溢出,文字超出显示省略号的详解

你好&#xff0c;我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端的程序媛。 云桃桃-大专生&#xff0c;一枚程序媛&#xff0c;感谢关注。回复 “前端基础题”&#xff0c;可免费获得前端基础 100 题汇总&#xff0c;回复 “前端工具”&#xff0c;可获取 Web 开发工具合…

基于SpringBoot+Vue钢材销售管理系统的设计与实现

系统介绍 为了更好地发挥本系统的技术优势&#xff0c;根据钢材销售管理系统的需求&#xff0c;本文尝试以B/S经典设计模式中的Spring Boot框架&#xff0c;JAVA语言为基础&#xff0c;通过必要的编码处理、钢材销售管理系统整体框架、功能服务多样化和有效性的高级经验和技术…

[数据结构与算法]-什么是二叉树?

二叉树是一种数据结构&#xff0c;由节点组成&#xff0c;每个节点最多有两个子节点&#xff0c;分别称为左子节点和右子节点。二叉树的每个节点包含一个值&#xff0c;并且左子节点的值小于等于父节点的值&#xff0c;右子节点的值大于等于父节点的值。这个性质使得二叉树在搜…

论文辅助笔记:处理geolife数据

论文笔记&#xff1a;Context-aware multi-head self-attentional neural network model fornext location prediction-CSDN博客 对应命令行里 python preprocessing/geolife.py 20 这一句 1 读取geolife数据 pfs, _ read_geolife(config["raw_geolife"], print_…

文本生成任务的评价方法BLEU 和 ROUGE

BLEU 是 2002 年提出的&#xff0c;而 ROUGE 是 2003 年提出的。这两种指标虽然存在着一些问题&#xff0c;但是仍然是比较主流的评价指标。 BLUE BLEU 的全称是 Bilingual evaluation understudy&#xff0c;BLEU 的分数取值范围是 0&#xff5e;1&#xff0c;分数越接近1&a…

Mysql The last packet sent successfully to the server was 0 milliseconds ago.

项目启动后&#xff0c;报错&#xff0c;但是我的navicat 数据库连接工具是连接上的&#xff0c;没有问题的&#xff0c;但是程序就是连接不上。端口放开了&#xff0c;防火墙也放开了 先说问题&#xff1a;是网络问题&#xff0c; 如何解决&#xff1a;因为我的机子上又跑了…

思颜肌密:匠心独蕴,传世掠影

赋予延绵岁月以华彩乐章&#xff0c;将来自时间的承诺注入生活每分每秒&#xff0c;在思颜肌密的世界里&#xff0c;恒久之美并非遥不可及&#xff0c;它是艺术&#xff0c;亦是心意。华美节日翩然而至&#xff0c;思颜肌密拉开神秘帷幕&#xff0c;在惊鸿掠影中向世人展现传世…