机器学习算法(7)-朴素贝叶斯算法和K最近邻算法

一、说明

        在在这篇文章中,我将解释两种机器学习算法,称为贝叶斯定理和 K 最近邻算法。贝叶斯定理以 18 世纪英国数学家托马斯·贝叶斯的名字命名,是确定条件概率的数学公式。k 最近邻算法,也称为 KNN 或 k-NN,是一种非参数监督学习分类器,它使用邻近性对单个数据点的分组进行分类或预测。

二、贝叶斯定理

2.1 设计一个掷色子的案例

示例 1:我有一个掷骰子的实验。

我有哪些要素:

{1,2,3,4,5,6}

Probability if 1 coming when I roll a dice?
P(1) = 1/6
Probability if 2 coming when I roll a dice?
P(2) = 1/6
Probability if 3 coming when I roll a dice?
P(3) = 1/6
Probability if 4 coming when I roll a dice?
P(4) = 1/6
Probability if 5 coming when I roll a dice?
P(5) = 1/6
Probability if 6 coming when I roll a dice?
P(6) = 1/6

这些事件基本上称为独立事件。因为获得一种元素的概率不依赖于其他元素。

2.2 再来一个弹球案例

示例 2:我有一盒弹珠。

//Probability of taking out a red Marble and you remove it from the Box
P(R) = 3/5
//Now Probability of taking out a green Marble 
P(R) = 2/4 =  1/2

这些事件是相关事件,因为当您从盒子中取出弹珠时,弹珠的数量会减少。

//Now what is the Probability of taking out a red Marble and then a green Marble
//We can denote it by 
P(R) * P(G/R)     : This P(G/R) is called as conditional probability. This means Probability of Green when given Red

P(A and B) = P(A) * P(B/A)

P(A 和 B) 是否等于 P(B 和 A)?是的

P(A and B) = P(A) * P(B/A)  -> 1
P(B and A) = P(B) * P(A/B)  -> 2

//Let's explain this using our Marble Box example,
R =  Red Marble   G = Green Marble
{R, R, R, G, G}
P(B and G) = P(R) * P(G/R) = 3/5 * 2/4 = 3/ 10 
P(G and B) = P(G) * P(R/G) = 2/5 * 3/4 = 3/ 10

//Now you can see both are equal.
Then:
P(A and B) = P(B and A) 

现在我可以这样写这个方程:

P(A and B) = P(B) * P(A/B)

P(A) * P(B/A) = P(B) * P(A/B)

P(B/A) = P(B) * P(A/B) / P(A) : This is called as Bayes Theorem

2.3 我们如何使用贝叶斯定理来解决问题?

        假设我有一些特征(独立特征),如x1、x2、x3、x4,我的输出是 Y(输出特征),分别是yes 和 no

        现在,根据输入值,我需要使用贝叶斯定理预测输出。

//Probability of getting yes when given x1, x2, x3, x4 values can be shown as,

P(Y=yes/Given x1, x2, x3, x4) = P(Y=yes) * P(x1, x2, x3, x4 / Y=yes) / P(x1, x2, x3, x4…. xn)

//This can be wriiten like this, 

P(Y=yes/x1, x2, x3, x4) = P(Y=yes) * P(x1/Y=yes) * P(x2/Y=yes) * P(x3/Y=yes) * P(x4/Y=yes) / P(x1) * P(x2) * P(x3) * P(x4)

//Probability of getting no when given x1, x2, x3, x4 values can be shown as,

P(Y=no/x1, x2, x3, x4) = P(Y=no) * P(x1/Y=no) * P(x2/Y=no) * P(x3/Y=no) * P(x4/Y=no) / P(x1) * P(x2) * P(x3) * P(x4)

        在这里您可以看到分母是固定的(对于,您将获得相同的分母值)。这样我们就可以忽略分母。假设 P(Y=是/x1, x2, x3, x4) = 0.15 且 P(Y=否/x1, x2, x3, x4) = 0.05。在二元分类中,任何值 ≥ 0.5我们可以将其视为1对于 ≤ 0.5我们可以将其视为0

P(Y=yes/x1, x2, x3, x4) = 0.15
P(Y=no/x1, x2, x3, x4) = 0.05

// We do normalization to map this problem to Binary Classification. In the normalization we devide
the probability of actual value using sum of all the probabilities of actual values.

// After Nomalization :
P(Y=yes/x1, x2, x3, x4) = 0.15 / 0.15 + 0.05 = 0.15 / 0.20 = 0.75 which is > 0.5 

P(Y=no/x1, x2, x3, x4) = 0.05 / 0.15 + 0.05 = 0.05 / 0.20 = 0.25 which is < 0.5

        让我们获取一个数据集并计算概率,这是关于在给定 4 个特征展望、温度、湿度和刮风条件时打高尔夫球的概率。

        通过Outlook功能,我可以列出所有可能性并预测我们是否可以打高尔夫球。

我们可以打高尔夫球的概率 = 9 / (9 + 5) = 9 /14

我们不能打高尔夫球的概率 = 5 / (9 + 5) = 5 /14

根据温度功能,我可以列出所有可能性并预测我们是否可以打高尔夫球。

我们可以打高尔夫球的概率 = 9 / (9 + 5) = 9 /14

我们不能打高尔夫球的概率 = 5 / (9 + 5) = 5 /14

假设您获得新的测试数据,并获得Sunny 和 Hot作为数据,输出是什么?我们将使用贝叶斯定理尝试找到它。

P(是的/鉴于阳光明媚且炎热)?

P(Yes/ Given Sunny and Hot) = P(Yes) * P(Sunny / Yes) * P(Hot / Yes) 
                               ---------------------------------------
                                            P(Sunny) * P(Hot)

Now you know that P(Sunny) * P(Hot) is a constant (For no also you will get the same value)

P(Yes/ Given Sunny and Hot) = P(Yes) * P(Sunny / Yes) * P(Hot / Yes)

P(Yes/ Given Sunny and Hot) = 9/14 * 3/9 * 2/9
                            = 6 / 14 * 9 = 2 / 24 = 1/ 21 = 0.0476
                           


P(No/ Given Sunny and Hot) = P(No) * P(Sunny / No) * P(Hot / No) 
                               ---------------------------------------
                                            P(Sunny) * P(Hot)


P(No/ Given Sunny and Hot) = P(No) * P(Sunny / No) * P(Hot / No)
                           = 5 /14 * 2/5 * 2/5 = 2 /35 = 0.057



P(Yes/ Given Sunny and Hot) = 0.0476
P(No/ Given Sunny and Hot)  = 0.057

Nomalize the values
---------------------
P(Yes/ Given Sunny and Hot) = 0.0476 / 0.0476 + 0.057 = 0.0476 / 0.1046 = 0.45
P(No/ Given Sunny and Hot)  = 0.057  / 0.0476 + 0.057 = 0.057 / 0.1046 = 0.545

So now you can see the posibility of No is > than 0.5 which is the Answer.
If the weather is Sunny and Hot what will the person do -> He should not play Golf 

        假设您获得了新的测试数据,并且获得了Rainy 和 Cool作为数据,输出是什么?我们将使用贝叶斯定理尝试找到它。

P(是的/考虑到下雨且凉爽)?

P(Yes/ Given Rainy and Cool) = P(Yes) * P(Rainy/ Yes) * P(Cool/ Yes) 
                               ---------------------------------------
                                            P(Rainy) * P(Cool)

Now you know that P(Rainy) * P(Cool) is a constant (For probability no also you will get the same value)

P(Yes/ Given Rainy and Cool) = P(Yes) * P(Rainy / Yes) * P(Cool/ Yes)

P(Yes/ Given Rainy and Cool) = 9/14 * 2/9 * 3/9
                            = 1/21 = 0.048

P(No/ Given Rainy and Cool) = P(No) * P(Sunny / No) * P(Hot / No) 
                               ---------------------------------------
                                            P(Sunny) * P(Hot)

P(No/ Given Rainy and Cool) = P(No) * P(Sunny / No) * P(Hot / No)
                           = 5 /14 * 3/5 * 1/5 = 3/70 = 0.043

P(Yes/ Given Rainy and Cool) = 0.048
P(No/ Given Rainy and Cool)  = 0.043

Nomalize the values
---------------------
P(Yes/ Given Rainy and Cool) = 0.048 / 0.048 + 0.043 = 0.048 / 0.091 = 0.53
P(No/ Given Rainy and Cool)  = 0.043  / 0.048 + 0.043 = 0.043 / 0.091 = 0.47

So now you can see the posibility of Yes is > than 0.5 which is the Answer.
If the weather is Rainy and Cool what will the person do -> He can play Golf

        假设您获得了新的测试数据,并且获得了阴天和温和的数据,那么输出是什么?我们将使用贝叶斯定理尝试找到它。

P(是/鉴于阴天和温和)?

P(Yes/ Overcast and Mild) = P(Yes) * P(Overcast / Yes) * P(Mild / Yes) 
                               ---------------------------------------
                                            P(Overcast) * P(Mild)


Now you know that P(Overcast) * P(Mild) is a constant (For no also you will get the same value)

P(Yes/ Overcast and Mild) = P(Yes) * P(Overcast / Yes) * P(Mild / Yes)
P(Yes/ Overcast and Mild) = 9/14 * 4/9 * 4/9
                            = 8/63 = 0.127


P(No/ Given Overcast and Mild) = P(No) * P(Overcast/ No) * P(Mild / No)
                           = 5 /14 * 0/5 * 2/5 = 0


P(Yes/ Given Overcast and Mild) = 0.127
P(No/ Given Overcast and Mild)  = 0

Nomalize the values
---------------------
P(Yes/ Given Overcast and Mild) = 0.127 / 0.127 + 0 = 0.127 / 0.127 = 1
P(No/ Given Overcast and Mild)  = 0  / 0.127 = 0

So now you can see the posibility of Yes is > than 0.5 which is the Answer.
If the weather is Overcast and Mild  what will the person do -> He can play Golf

2.4 贝叶斯定理实时应用

        贝叶斯定理的众多应用之一是贝叶斯推理,这是一种特殊的统计推理方法。贝叶斯推理已应用于各种活动,包括医学、科学、哲学、工程、体育、法律等。例如,我们可以使用贝叶斯定理通过考虑任何给定的人有多大可能来定义医学测试结果的准确性。有疾病和测试的总体准确性。贝叶斯定理依赖于合并先验概率分布来生成后验概率。在贝叶斯统计推断中,先验概率是收集新数据之前事件的概率。

        尝试使用贝叶斯定理找到这些问题的答案。使用评论部分给出答案或提出问题。

  1. A、B、C 三人应聘一家私营公司的工作。他们选择的机会比例为1:2:4。A、B、C 能够引入变革以提高公司利润的概率分别为0.8、0.5 和0.3。如果没有发生变化,求由于 C 的任命而导致变化的概率。
  2. 一袋包含 4 个球。随机抽取两个球,不放回,发现是蓝色的。袋子里所有球都是蓝色的概率是多少?
  3. 在一个社区,90% 的儿童因流感而生病,10% 则因麻疹而没有其他疾病。麻疹出现皮疹的概率为 0.95,流感出现皮疹的概率为 0.08。如果孩子出现皮疹,请计算孩子患流感的可能性。
  4. A店里有30罐纯酥油和40罐掺假酥油在售,B店里有50罐纯酥油和60罐掺假酥油。随机从其中一家商店购买一罐酥油,发现掺假。求从商店 B 购买的概率。
  5. 一包 52 张卡片中丢失了一张卡片。从剩下的牌中,随机抽出两张,发现都是梅花。求丢失的卡片也是梅花的概率。
  6. 一个袋子里有 4 个球。随机抽取两个球(不放回),发现它们是红色的。袋子里所有球都是红色的概率是多少?

三、K-最近邻算法(KNN)

        KNN 算法是分类和回归问题的简单而有效的解决方案。我们首先讨论第一个分类问题。假设我们有一个包含两组数据点的二元分类问题。现在,假设我们引入一个新的数据点。如何判断它是否属于这两个类别之一?如果我们使用逻辑回归,我们可以将这些数据点按一条线划分,但这种情况需要不同的方法。这就是K 最近邻发挥作用的地方。

        K-近邻是一种简单的算法,它的工作原理是取离我们最近的五个点(这里K 值为 5。K 是一个次要参数),它代表我们最近的点。在这种情况下,我们可以看到最大数量的点来自绿色类别(A 类),只有 3 个点。我们将新数据点分类为属于 K 值的最大点数。为了实现这一点,我们使用两个特定距离,

  • 欧氏距离
  • 曼哈顿距离

计算两点之间的欧氏距离,表示为

d = √[ (x2– x1)^2 + (y2– y1)^2].

另一方面,对于曼哈顿距离,我们计算两点之间的距离。

d = |x1 - x2| + |y1 - y2|

这两个距离的区别在于我们没有计算假设距离。

        这些方法用于分类问题。对于回归,我们使用不同的方法。

        对于回归,我们将K 值设为 3。我们取最近的 3 个点来计算一个新的数据点。K是一个超参数,表示最近点的数量。如果我们需要计算一个新数据点的输出,我们找到最近的K个点,然后计算它们的平均值以获得输出值。

        我们计算的 K 值等于 1 到 50,然后我们可能尝试检查错误率,如果错误率小于 only,我们选择该模型。

关于 K 最近邻的另外两件事效果非常糟糕

  • 异常值
  • 数据集不平衡

        因此,KNN 的局限性在于,由于不平衡或离群数据集的存在,它可能会对点进行错误分类。

        异常值

        考虑上面的图像具有属于 -1 类的异常值。假设我们想要预测 1 类标记的异常值和 2 类标记的训练点之间的点。测试点可能属于 2 类标签,但由于存在 1 类异常值,这些点可能会被错误地分类为 1 类。

        不平衡

        考虑样本空间中大约有 1000 个点被分类为A 类或 B 类的情况。假设在 1000 个点中,有 800 个点属于 A 类,这表明数据集高度不平衡。这会影响新测试样本的分类吗?是的,考虑一下我们想要在样本空间中找到点 X 的类标签。如果我们认为 k 值非常大,比如 150 左右,那么不平衡的数据集将迫使 X 点落入A 类,这可能会导致错误分类。

        如何选择最佳的K值?

        k 的最佳值是提供最小误差和最大精度的值。我们重点关注随机取一组 k 值,并验证在训练和测试模型时我们获得最小错误率的 k 值。这就是朴素贝叶斯算法和 K 最近邻算法。我希望你能很好地理解这两种理论。

KNN中如何找到K的最优值?

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

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

相关文章

【Pyqt】QObject::connect: Cannot queue arguments of type ‘QTextCursor‘

问题说明 文本框接收到新的数据 不会自动滚动&#xff0c;并提示警告 QObject::connect: Cannot queue arguments of type ‘QTextCursor’ (Make sure ‘QTextCursor’ is registered using qRegisterMetaType().) 原因 线程回来的槽函数里面 调用了ui的代码 我们不能通过线程…

测试文档---智力冲刺

文章目录 项目背景测试计划UI测试接口测试手工测试 测试总结 项目背景 项目描述&#xff1a;“智力冲刺”是一款网页小游戏&#xff0c;就像我们平时看到的网页游戏一样&#xff0c;前端页面负责展示游戏效果&#xff0c;后端服务器来实现游戏的逻辑。在我们的“智力冲刺”游戏…

【从零认识ECS云服务器 | 快速上线个人网站】三、对外发布网站

3.1 配置域名 用户是如何访问网站的呢&#xff1f; 用户在浏览器(IE、Chrome、FireFox等)上输入域名&#xff0c;如&#xff1a;http://www.aliyun.com &#xff1b; 浏览器自动调用DNS&#xff08;域名服务&#xff09;将域名解析为IP地址&#xff0c;如&#xff1a;123.123…

P3 Qt 控件 —— pushButton

前言 &#x1f3ac; 个人主页&#xff1a;ChenPi &#x1f43b;推荐专栏1: 《C_ChenPi的博客-CSDN博客》✨✨✨ &#x1f525; 推荐专栏2: 《Linux C应用编程&#xff08;概念类&#xff09;_ChenPi的博客-CSDN博客》✨✨✨ &#x1f33a;本篇简介 &#xff1a;这一章我们学一…

CSGO游戏盲盒开箱源码 盲盒对战、幸运开箱、积分商城、Fl盲盒

源码介绍&#xff1a; CSGO游戏盲盒开箱源码 盲盒对战、幸运开箱、积分商城、Fl盲盒。这个是一个新花样玩法的盲盒程序。 仅供学习&#xff0c;请勿商用&#xff01;请购买正版程序运营。 代码下载&#xff1a;百度网盘

一篇文章带你快速入门 Vue 核心语法

一篇文章带你快速入门 Vue 核心语法 一、为什么要学习Vue 1.前端必备技能 2.岗位多&#xff0c;绝大互联网公司都在使用Vue 3.提高开发效率 4.高薪必备技能&#xff08;Vue2Vue3&#xff09; 二、什么是Vue 概念&#xff1a;Vue (读音 /vjuː/&#xff0c;类似于 view) …

OpenVINS学习1——数据集配置与运行

前言 OpenVINS是基于MSCKF的开源VIO算法&#xff0c;有非常详细的官网文档可以学习使用&#xff0c;将来一段时间的主要实践工作&#xff0c;就是深度掌握这份开源代码。 https://docs.openvins.com/ 一、环境配置与Euroc数据集运行 我的环境是Ubuntu20.04&#xff0c;ROS1&a…

Python与ArcGIS系列(十六)重复节点检测

目录 0 简述1 实例需求2 arcpy开发脚本0 简述 在处理gis线图层和面图层数据时,有时候会遇到这种情况:数据存在重复节点或伪重复节点(两个节点距离极小),往往我们需要对这种数据进行检测标注或进行修改。本篇将介绍如何利用arcpy及arcgis的工具箱实现这个功能。 1 实例需求…

Axure原型图表组件库,数据可视化元件(Axure9大屏组件)

针对Axure制作的大屏图表元件库&#xff0c;帮助产品经理更高效地制作高保真图表原型&#xff0c;是产品经理必备元件工具。现分享完整的组件库&#xff0c;大家一起学习。 本组件库的图表模块&#xff0c;已包含所有常用的图表&#xff0c;以下为部分组件截图示意。文末可下载…

微信头像上传失败?照片尺寸修改方法大揭秘

微信上传头像失败是大家经常遇到的问题之一&#xff0c;其中的原因有可能是因为网络问题&#xff0c;也有可能是因为图片本身的问题&#xff0c;比如图片尺寸不符合平台要求&#xff0c;这时候&#xff0c;我们只需要通过给照片尺寸修改一下就可以解决&#xff0c;那么怎么修改…

LinuxBasicsForHackers笔记 -- 文件系统和存储设备管理

设备目录/dev Linux 有一个特殊的目录&#xff0c;其中包含代表每个连接设备的文件&#xff1a;相应命名的 /dev 目录。 /dev中有很多设备列表。 特别令人感兴趣的是设备 sda1、sda2、sda3、sdb 和 sdb1&#xff0c;它们通常是硬盘驱动器及其分区以及 USB 闪存驱动器及其分区…

Go实现http同步文件操作 - 增删改查

http同步文件操作 - 增删改查 http同步文件操作 - 增删改查1. 前置要求1.1. 构建结构体 文件名 文件内容1.1.1. 页面结构体1.1.2. 为Page结构体绑定方法&#xff1a;Save1.1.3. 对Page结构体支持页面内容查看方法&#xff0c;同时提供页面文件是否存在的方法 1.2. 简单验证上面…

如何快速完成企业私有云部署

快解析赋能企业私有云部署 ​ 很多企业形成了以总部为中心的多点生产体系结构&#xff0c;并借助网络化办公工具搭建跨区域协同办公系统&#xff0c;满足总部与分支机构间的信息互通&#xff0c;进而促进异地业务的信息共享&#xff0c;提高办公处理效率和综合管理水平。 北…

参与创作①周年啦~

写在前面 今天看了消息才知道&#xff0c;原来开始创作已经一年了。此篇无干货&#xff0c;纯白话&#xff0c;纯记录。 机缘 参与CSDN创作已经一年有余&#xff0c;犹记得第一篇博文是为了整理好所学内容&#xff0c;方便自己复习。没想到后面也陆陆续续发了些其他内容&…

python的websocket方法教程

WebSocket是一种网络通信协议&#xff0c;它在单个TCP连接上提供全双工的通信信道。在本篇文章中&#xff0c;我们将探讨如何在Python中使用WebSocket实现实时通信。 websockets是Python中最常用的网络库之一&#xff0c;也是websocket协议的Python实现。它不仅作为基础组件在…

SIMULINK 单相半波整流电路仿真

SIMULINK 单相半波整流电路仿真 去除毛刺&#xff0c;改步长 光滑如下&#xff1a;

嵌入版python作为便携计算器(安装及配置ipython)

今天用别的电脑调试C&#xff0c;需要计算反三角函数时发现没有趁手工具&#xff0c;忽然想用python作为便携计算器放在U盘&#xff0c;遂想到嵌入版python 懒得自己配可以直接下载&#xff0c;使用方法见第4节 1&#xff0c;下载embeddable python&#xff08;嵌入版python&…

PCTFWP

web Sign In 查看源代码&#xff0c;访问提示文件就可得到flag easyupload 先上传一个图片马&#xff0c;会提示特洛伊文件&#xff0c;于是就改文件名&#xff0c;重新上传就可以得到flag 类似&#xff1a; [MoeCTF 2022]what are y0u uploading&#xff1f; 先做我 ?po…

SRR参考设计中SRR_DSS_mmWaveTask函数源码分析

相应的说明都已注释的形式写出来。 上面两个中断是在初始化的时候注册的&#xff0c;在SRR_DSS_initTask函数中&#xff0c;如下所示 后面会接着分析函数MmwDemo_processChirp和MmwDemo_interFrameProcessing。

维普论文查重率高【详细说明】

大家好&#xff0c;今天来聊聊维普论文查重率高&#xff0c;希望能给大家提供一点参考。 以下是针对论文重复率高的情况&#xff0c;提供一些修改建议和技巧&#xff1a; 维普论文查重率高&#xff1a;原因分析与降重技巧 背景介绍 在学术领域&#xff0c;论文的重复率是衡量其…
最新文章