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

news2024/12/24 2:09:52

一、说明

        在在这篇文章中,我将解释两种机器学习算法,称为贝叶斯定理和 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.coloradmin.cn/o/1293058.html

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

相关文章

Python基础知识-变量、数据类型(整型、浮点型、字符类型、布尔类型)详解

1、基本的输出和计算表达式&#xff1a; prinit(12-3) printf(12*3) printf(12/3) prinit(12-3) printf(12*3) printf(12/3) 形如12-3称为表达式 这个表达式的运算结果称为 表达式的返回值 1 2 3 这样的数字&#xff0c;叫做 字面值常量 - * /称为 运算符或者操作符 在C和j…

k8s中的Pod网络;Service网络;网络插件Calico

Pod网络&#xff1b;Service网络&#xff1b;网络插件Calico Pod网络 在K8S集群里&#xff0c;多个节点上的Pod相互通信&#xff0c;要通过网络插件来完成&#xff0c;比如Calico网络插件。 使用kubeadm初始化K8S集群时&#xff0c;有指定一个参数–pod-network-cidr10.18.0…

再识二叉树

1. 二叉树的存储 二叉树的存储结构分为&#xff1a;顺序存储和类似于链表的链式存储。 其中二叉树的链式存储是通过一个一个的节点引用起来的&#xff0c;常见的表示方式有二叉和三叉表示方式&#xff08;这里本主主要讲的是链式存储&#xff09;&#xff0c;具体代码如下&…

2个月拿下信息系统项目管理师攻略(攻略超级全)

信息系统项目管理师&#xff08;高项&#xff09;一次性过啦&#xff01;结合这次备考经验&#xff0c;给大家总结一下复习方法。 先上图&#xff0c;开心一下&#xff01; 一、我为什么选择了高项 为什么我会选信息系统项目管理师&#xff0c;也就是我们常说的高项。 原因1…

bpftrace原理与使用方法

Bpftrace 概念和原理bpftrace安装bpftrace 语法结构bpftrace 变量内置变量自定义变量Map变量 内置函数Bpftrace操作案例文件系统磁盘进程内存 bpftrace是一种基于eBPF&#xff08;Extended Berkeley Packet Filter&#xff09;的跟踪工具&#xff0c;用于在Linux系统中进行动态…

PostGIS学习教程十一:投影数据

PostGIS学习教程十一&#xff1a;投影数据 地球不是平的&#xff0c;也没有简单的方法把它放在一张平面纸地图上&#xff08;或电脑屏幕上&#xff09;&#xff0c;所以人们想出了各种巧妙的解决方案&#xff08;投影&#xff09;。 每种投影方案都有优点和缺点&#xff0c;一…

有了安卓模拟器,就能在Windows 10或11上像使用安卓操作系统一样使用安卓

你可以使用Android模拟器在Windows 11或Windows 10中运行Android应用程序。如果你喜欢的应用程序只在手机上运行,但你想在电脑上使用,这些模拟器会很有用。 BlueStacks 与整个操作系统模拟器不同,BlueStacks只在Windows上模拟Android应用程序。它真的很容易使用,所以你不需…

鸿蒙OS应用开发的开发环境

鸿蒙OS应用开发的开发环境 鸿蒙系统发展越来越快&#xff0c;已经开始走进千家万户&#xff0c;从手机到电视机&#xff0c;再到汽车&#xff0c;以后各种手表、智能设备等等。这已经是一个广泛应用的操作系统&#xff0c;也是跟大家生活密切相关的操作系统。要想在这个平台上…

人脸识别安卓主板_MTK方案智能闸机门禁工业安卓主板定制开发

人脸识别主板广泛应用于各个领域&#xff0c;包括人脸支付系统、人脸识别监控系统、写字楼办公楼门禁闸机、校园、地铁、住宅门禁、考勤机、智能门锁、广告机、售卖机等。 主板基于联发科MTK方案&#xff0c;并由行业PCBA和MTK的核心板组成。根据产品需求&#xff0c;可以选择…

SpringBoot3.x代码生成器构建的三层架构主启动类报错

【场景复现】 jdk21环境变量springboot3.x、mybatisplus generator3.5.3构建工程启动&#xff1a; 【原因分析】 显示 factoryBeanObjectType 属性的值类型不正确&#xff0c;应该是一个实现了 FactoryBean 接口的类的全限定名。 注解注入每层对象&#xff0c;找不到Factory…

嵌入式系统

嵌入式系统 目前国内一个普遍认同的嵌入式系统定义是&#xff1a;以应用为中心、以计算机技术为基础&#xff0c;软件硬件可裁剪&#xff0c;适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。&#xff08;引用自《嵌入式系统设计师教程》&#xff09; …

node后端接口无法插入数据为emoji的表情的问题

原因 emoji的表情一般是这样的\xF0\x9F\x98\x80或者是\xF0\x9F\x98 &#xff0c;事实上 一般数据库的utf8的编码类型都是能保存\xF0\x9F\x98 但是不能保存\xF0\x9F\x98\x80这种样的emoji&#xff0c;要将数据库编码格式为utf8mb4 也就是utf8的超集 另外&#xff0c;除了 数据库…

论文精读 MOG2 阴影检测

An Improved Adaptive Background Mixture Model for Real-time Tracking with Shadow Detection 一种用于阴影检测实时跟踪的改进自适应背景混合模型 承接上一篇博客&#xff1a;论文精读 && MOG && 埃里克格里姆森-CSDN博客 目录 一、摘要 二、结论 三…

matplot函数调整子图大小测试

调整subplot()函数的子图间距 import numpy as np import matplotlib.pyplot as plt for i in range(1,7):figsize 10,6plt.subplot(2,3,i)plt.text(0.5,0.5,str((2,3,i)),fontsize18,hacenter) **plt.subplots_adjust(hspace3.3, wspace0.3)** plt.show()import numpy as np…

低代码/无代码应用赋能数字化

目录 一、低代码喧嚣甚上 二、低代码平台适用于哪些应用&#xff1f; 三、低代码与IT开发 &#xff08;1&#xff09;IT开发&#xff1a; &#xff08;2&#xff09;低代码开发&#xff1a; 四、最后 一、低代码喧嚣甚上 随着数字化转型的深入&#xff0c;越来越多的企业开始寻…

画好一张规范的原理图,这些点你可要注意了!

不光是代码有可读性的说法&#xff0c;原理图也有。很多时候原理图不仅仅是给自己看的&#xff0c;也会给其它人看&#xff0c;如果可读性差&#xff0c;会带来一系列沟通问题。所以&#xff0c;要养成良好习惯&#xff0c;做个规范的原理图。此外&#xff0c;一个优秀的原理图…

结构体,自定义类型

目录 结构体 结构体的声明 结构体的自引用 结构体的定义和初始化 结构体内存对齐 ​编辑 结构体的对齐规则&#xff1a; 为什么存在内存对齐&#xff1f; 修改默认对齐数 结构体传参 位段 什么是位段 位段的内存分配 位段的跨平台问题 枚举 联合&#xff08;共用体…

vivado sdk mem超出

Description Resource Path Location Type region microblaze_0_local_memory_ilmb_bram_if_cntlr_Mem_microblaze_0_local_memory_dlmb_bram_if_cntlr_Mem’ overflowed by 4288 bytes uart C/C Problem 问题的产生&#xff1a;fpga使用了microblaze搭建了一个soc系统&#…

SRC挖掘漏洞XSS

Markdown是一种轻量级标记语言&#xff0c;创始人为约翰格鲁伯&#xff08;John Gruber&#xff09;。它允许人们使用易读易写的纯文本格式编写文档&#xff0c;然后转换成有效的 XHTML&#xff08;或者HTML&#xff09;文档。这种语言吸收了很多在电子邮件中已有的纯文本标记的…

ESP32-Web-Server编程-通过 Base64 编码在网页中插入图片

ESP32-Web-Server编程-通过 Base64 编码在网页中插入图片 概述 不同于上节 ESP32-Web-Server编程-在网页中通过 src 直接插入图片&#xff0c;本节引入 Base64 编码来显示图片。 Base64 是一种用64个字符来编码表示任意二进制数据的方法。任何符号都可以转换成 Base64 字符集…