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

之前写过这样一道题:

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

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

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

【机器学习笔记】朴素贝叶斯(从先验分布到后验分布)-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.mfbz.cn/a/571958.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【ensp】网关冗余vrrp实验

备战中级网络工程师 目录 vrrp(虚拟路由冗余技术) 为什么会出现vrrp? 两个角色 选举流程 基本原理 VRRP 的两个定时器 VRRP 的主备切换 主备切换的条件 VRRP 主备回切 认证方式 冗余路由器 冗余核心交换机 vrrp(虚拟路…

【04-提升模型性能:集成学习与超参数优化】

文章目录 前言集成学习BaggingBoosting超参数优化随机搜索贝叶斯优化总结前言 在前几篇博文中,我们已经介绍了一些机器学习的基础知识、Scikit-learn的核心工具与技巧,以及如何评估模型性能。本篇博文将重点讲解两个可以显著提升机器学习模型性能的高级策略:集成学习和超参数…

Github 2024-04-25Go开源项目日报Top10

根据Github Trendings的统计,今日(2024-04-25统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Go项目10Vue项目1Go编程语言:构建简单、可靠和高效的软件 创建周期:3474 天开发语言:Go协议类型:BSD 3-Clause “New” or “Revised” Lic…

基于spark进行数据分析的心力衰竭可视化大屏项目

基于spark进行数据分析的心力衰竭可视化大屏项目 项目背景 在当今的医疗领域,数据驱动的决策变得日益重要。心力衰竭作为常见的心血管疾病,其临床数据的分析对于改善患者治疗结果至关重要。本文将介绍如何利用Apache Spark进行大规模心力衰竭临床数据的…

浅谈免杀下的持久化

文章目录 前记注册表计划任务COM劫持后记reference 前记 实战中持久化的手段常用的就是加服务、添改注册表、加计划任务、劫持等,这里探索c/c下的维权免杀 注册表 用户级 \HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run \HKEY_CURRENT_USER…

正则表达式.java

正则表达式的作用: ①可以校验字符串是否满足一定的规则,并用来校验数据格式的合法性🧸 🧩[]:只能是括号里的字符 🧩[^]:除了括号里的字符 🧩[- -]:表示两段范围,满足其一即可 &a…

Linux系统内存持续飙高,如何排查

若一台服务器内存使用率持续处于高峰值,可能会导致响应慢(如:ssh操作卡顿、用户访问失败或超时等) 1.查看系统内存使用情况 free -m 2.查看哪些进程内存占用比较高 top 或htop 观察进程PID和命令确认是哪一个进程占用内存较高 …

Mogdb 5.0新特性:SQL PATCH绑定执行计划

前言 熟悉Oracle的dba都知道,生产系统出现性能问题时,往往是SQL走错了执行计划,紧急情况下,无法及时修改应用代码,dba可以采用多种方式针对于某类SQL进行执行计划绑定,比如SQL Profile、SPM、SQL Plan Base…

【prometheus】监控MySQL并实现可视化

目录 一、概述 1.1下载解压mysqld_exporter 1.2创建MySQL授权用户 1.3配置my.cnf 1.4启动mysqld_exporter 1.5prometheus配置修改 二、Grafana展示 【Prometheus】概念和工作原理介绍_prometheus工作原理 【Prometheus】k8s集群部署node-exporter 【prometheus】k8s集…

Python | Leetcode Python题解之第48题旋转图像

题目: 题解: class Solution:def rotate(self, matrix: List[List[int]]) -> None:n len(matrix)# 水平翻转for i in range(n // 2):for j in range(n):matrix[i][j], matrix[n - i - 1][j] matrix[n - i - 1][j], matrix[i][j]# 主对角线翻转for …

验证二叉搜索树 - LeetCode 热题 43

大家好!我是曾续缘😘 今天是《LeetCode 热题 100》系列 发车第 43 天 二叉树第 8 题 ❤️点赞 👍 收藏 ⭐再看,养成习惯 验证二叉搜索树 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 二叉搜…

【Linux】什么是yum?--linux中的软件包管理器详解

💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …

UML——类图详解

目录 1. 前言 2. 类图概述 3. 类图表示法 3.1 类的表示方式 3.2 类与类之间关系的表示方式 (1)继承(泛化)关系 (2)实现关系 (3)依赖关系 (4)一般关联关系 (5)聚合关系 (6)组合关系 1. 前言 UML全称(Unified Modeling Language),译为统一建模语言&#x…

FRPC+PHP+MYSQL+APACHE2=个人网站

应用背景有公网需求,但是又不想去买又贵又低配置的服务器,然后方案就应运而生 frp/README_zh.md at dev fatedier/frp (github.com) 在这里, FRPC作为内网穿透服务, PHPMYSQLAPACHE2,作为网站搭建,具体细节不细讲, 但是在我的/var/www/html下面 linaroHinlink:/var/www/h…

代码随想录算法训练营Day8 | ● 344.反转字符串● 541. 反转字符串II● 54.替换数字● 151.翻转字符串里的单词● 55.右旋转字符串

(记得重学) ● 344.反转字符串 题目:编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一…

【蓝桥杯2025备赛】集合求和

集合求和 题目描述 给定一个集合 s s s(集合元素数量 ≤ 30 \le 30 ≤30),求出此集合所有子集元素之和。 输入格式 集合中的元素(元素 ≤ 1000 \le 1000 ≤1000) 输出格式 s s s 所有子集元素之和。 样例 #1 …

JAVAEE—HTTP

文章目录 HTTP导读HTTP解析HTTP的格式分析环境准备 HTTP请求格式首行headerHostContent-LengthContent-TypeUser-Agent (简称 UA)RefererCookie 空行body HTTP响应格式认识HTTP的方法POST方法POST和GET的区别第一:用处第二:传递数据第三:GET不…

【漏洞复现】通天星CMSV6车载监控平台Logger未授权漏洞

漏洞描述: 通天星CMSV6车载定位监控平台拥有以位置服务、无线3G/4G视频传输、云存储服务为核心的研发团队,专注于为定位、无线视频终端产品提供平台服务,通天星CMSV6产品覆盖车载录像机、单兵录像机、网络监控摄像机、行驶记录仪等产品的视频…

Sylar C++高性能服务器学习记录05 【线程模块-知识储备篇】

早在19年5月就在某站上看到sylar的视频了,一直认为这是一个非常不错的视频,还有幸加了sylar本人的wx,由于本人一直是自学编程,基础不扎实,也没有任何人的督促,没能坚持下去,每每想起倍感惋惜。恰…

Android IPC | Android多进程模式

前 言 关于Android的进程间通信(即IPC)有很多种方式,比如我们常用的AIDL、Socket等,而其中最重要而且最需要掌握的就是AIDL的使用和原理,简单来说它是通过Binder实现的。 关于Binder的知识点非常多,当我们…
最新文章