朴素贝叶斯与KNN算法

2023-11-17

朴素贝叶斯算法

数学基础

我们先举一个例子。投硬币是一个随机过程,我们不能预测任意一次投币结果是正面还是反面,我们只能谈论其下一次结果是正面或者反面的概率,如果容貌取得一些额外的数据,如硬币的精准成分,硬币的最初位置,投币的力量与方向,硬币的落地点的情况等,投币的准确结果是可以预测的。

因此,我们有如下定义:
我们将不能获取的那些额外的数据称之为不可观测的变量(unobservable variable)。在投币的例子中,唯一可观测的变量(observable variable) 是投币的结果。我们用 z z z表示不可观测的变量,用 x x x表示可观测的变量,事实上我们有

x = f ( z ) x = f\left( z \right) x=f(z)

其中 f ( ⋅ ) f\left( \cdot \right) f()是一个确定性函数,他定义不可观测数据的输出。因为我们不能用这种方式对该过程进行建模,所以我们定义输出 X X X为指明该过程、由概率分布 P ( X = x ) P\left( X = x \right) P(X=x)抽取的随机变量。

如果我们不知道 P ( X ) P\left( X \right) P(X),并想从给定的样本估计,就需要统计学知识了。我们有一个样本 χ \chi χ,包含由可观测变量 x i x^{i} xi的概率分布(记为 p ( x ) p\left( x \right) p(x))抽取出的样例,目的是使用样本 χ \chi χ构造一个它的近似 p ^ ( x ) \hat{p}\left( x \right) p^(x)
而朴素贝叶斯算法,便是求解该过程的一个算法。

我们设可以观测的条件用伯努利随机变量 C C C表示,根据上文,一个最简单的 C C C的定义就是观测的结果。我们用 x x x表示观测变量向量, x x x的一个简单的例子便是上文投掷硬币时硬币的精准成分,硬币的最初位置,投币的力量与方向,硬币的落地点的情况等等。则根据贝叶斯规则,我们有如下公式:

p ( C ∣ x ) = p ( C ) p ( x ∣ C ) p ( x ) p\left( \left. C \right|x \right) = \frac{p\left( C \right)p\left( \left. x \right|C \right)}{p\left( x \right)} p(Cx)=p(x)p(C)p(xC)

如何理解这个公式?我们还拿掷硬币的例子来说。假设我们投掷了1000次硬币,我们利用某些手段精确的得到了这1000次掷硬币时每次硬币的精准成分,硬币的最初位置,投币的力量与方向,硬币的落地点的情况以及每次掷硬币的结果;当我们掷硬币第1001次时,在观测结果之前,我们已经得到这次掷硬币时硬币的精准成分,硬币的最初位置,投币的力量与方向,硬币的落地点的情况,那么我们如何预测这1001次掷硬币的结果?我们可以根据以往掷硬币的经验,判断在1001次掷硬币时,利用获得到的观测到的硬币的精准成分,硬币的最初位置,投币的力量与方向,硬币的落地点的情况这些因素值与之前投掷时其所有取值完全相同的所有的掷硬币的实验相比较,计算这些取值相同的实验中出现正面的次数和出现反面的次数的比例,而这个比例,便是这次掷硬币结果是正面和反面的概率。用公式表示,则为:
p ( 第 1001 次 掷 硬 币 为 正 面 ∣ { 精 准 成 分 , 最 初 位 置 , … } = { a , b … } ) p\left( \left. 第1001次掷硬币为正面 \right|\left\{精准成分,最初位置,\ldots \right\} = \left\{ a,b\ldots \right\} \right) p(1001{,,}={a,b}) = p ( 掷 硬 币 为 正 面 ) p ( 精 准 成 分 = a , 最 初 位 置 = b … ∣ 掷 硬 币 为 正 面 ) p ( 精 准 成 分 = a , 最 初 位 置 = b … ) = \frac{p\left(掷硬币为正面 \right)p\left( \left. 精准成分= a, 最初位置= b\ldots \right| 掷硬币为正面\right)}{p\left(精准成分= a, 最初位置= b \ldots \right)} =p(=a,=b)p()p(=a,=b)
如何求解 p ( 精 准 成 分 = a , 最 初 位 置 = b … ∣ 掷 硬 币 为 正 面 ) p\left( \left. 精准成分 = a, 最初位置 = b\ldots \right|掷硬币为正面 \right) p(=a,=b) p ( x ∣ C ) p\left( \left. x \right|C \right) p(xC)呢?我们一般假设每个可观测的条件都是独立的,即

p ( 精 准 成 分 = a , 最 初 位 置 = b … ∣ 掷 硬 币 为 正 面 ) = p\left( \left. 精准成分 = a,最初位置 = b\ldots \right| 掷硬币为正面\right)= p(=a,=b)= p ( 精 准 成 分 = a ∣ 掷 硬 币 为 正 面 ) × p ( 最 初 位 置 = b ∣ 掷 硬 币 为 正 面 ) × … p\left( \left. 精准成分 = a \right|掷硬币为正面\right) \times p\left( \left. 最初位置 = b \right|掷硬币为正面 \right) \times \ldots p(=a)×p(=b)×

用数学符号表示即令 x = ( x 1 , x 2 … ) x = \left( x_{1},x_{2}\ldots \right) x=(x1,x2),则

p ( x ∣ C ) = p ( x 1 ∣ C ) p ( x 2 ∣ C ) … p\left( \left. x \right|C \right) = p\left( \left. x_{1} \right|C \right)p\left( \left. x_{2} \right|C \right)\ldots p(xC)=p(x1C)p(x2C)

而在实际求解问题中,对于分母 p ( x ) p\left( x \right) p(x)我们一般不直接求它,而是根据

∑ i = 1 n p ( C i ∣ x ) = 1 \sum_{i = 1}^{n}{p\left( \left. C_{i} \right|x \right) = 1} i=1np(Cix)=1

∑ i = 1 n p ( C i ) p ( x ∣ C i ) p ( x ) = 1 \sum_{i = 1}^{n}{\frac{p\left( C_{i} \right)p\left( \left. x \right|C_{i} \right)}{p\left( x \right)} = 1} i=1np(x)p(Ci)p(xCi)=1

求出所有可能结果带有 p ( x ) p\left( x \right) p(x)的式子,利用概率归一化原理得出每个 p ( C i ∣ x ) p\left( \left.C_{i} \right|x \right) p(Cix)的概率,并假设该次的结果为 m a x ( p ( C i ∣ x ) ) max(p\left( \left. C_{i} \right|x \right)) max(p(Cix)).

理解了上述问题,下面的概念便不难理解了。

我们将 p ( C = K ) p\left( C = K \right) p(C=K)称之为 C C C取值为 K K K先验概率(prior
probability)
,与 x x x的取值无关。先验概率满足

∑ i = 1 n p ( C = K ) = 1 \sum_{i = 1}^{n}{p\left( C = K \right) = 1} i=1np(C=K)=1

我们将 p ( x ∣ C ) p\left( \left. x \right|C \right) p(xC)称之为类似然(class likelihood),是属于 C C C的时间具有相关联的观测值 x x x的条件概率。
p ( x ) p\left( x \right) p(x)证据(evidence),是看到观测 x x x的边缘概率,不论它是正实例还是负实例。由全概率公式,我们有:
∑ i = 1 n p ( x ∣ C = i ) p ( C = i ) \sum_{i = 1}^{n}{p\left( \left. x \right|C = i \right)p\left( C = i \right)} i=1np(xC=i)p(C=i)
使用贝叶斯规则,组合先验知识和数据告诉我们的,在看到观测 x x x之后,计算概念的后验概率(posterior probability) p ( C ∣ x ) p\left( \left. C \right|x \right) p(Cx)

后 验 = ( 先 验 × 似 然 值 ) / 证 据 后验=(先验×似然值)/证据 =(×)/

连续值的处理

如果特征是连续值,处理连续值的一种常用技术是使用分级来离散特征值,以获得一组新的伯努利分布特征;

另一种方法:假设 p p p具有高斯(正态)分布,则估计 p ( X j ∣ C = c i ) p\left( X_{j}|C = c_{i} \right) p(XjC=ci):

p ( X j ∣ C = c i ) = 1 2 π σ ji exp ⁡ ( − ( X j − μ ji ) 2 2 σ ji 2 ) p\left( X_{j}|C = c_{i} \right) = \frac{1}{\sqrt{2\pi}\sigma_{\text{ji}}}\exp\left( - \frac{\left( X_{j} - \mu_{\text{ji}} \right)^{2}}{2\sigma_{\text{ji}}^{2}} \right) p(XjC=ci)=2π σji1exp(2σji2(Xjμji)2)

其中,

μ ji \mu_{\text{ji}} μji C = c i C = c_{i} C=ci的示例的特征值 X j X_{j} Xj的平均值;

σ ji 2 \sigma_{\text{ji}}^{2} σji2 C = c i C = c_{i} C=ci的示例的特征值 X j X_{j} Xj的方差。

小结

朴素贝叶斯是一个简单但重要的概率模型。

朴素贝叶斯是一种简单的多类分类算法,它基于贝叶斯定理应用特征之间的“朴素”独立假设。它假设自变量的条件概率在统计上是独立的。

它计算给定标签的每个特征的条件概率分布,然后应用贝叶斯定理计算给定观察的标签的条件概率分布将其用于预测。

它根据新数据属于某个最高概率的特定类别对其进行分类。

但其也有如下缺点

  • 需要计算先验概率;

  • 分类决策存在错误率;

  • 对输入数据的表达形式很敏感;

  • 由于使用了样本属性独立性的假设,如果样本属性之间有关联时其预测效果不好。

KNN算法

算法描述

定义 给定一个数据库 D = { x 1 , x 2 , x 3 , … , x n } D = \left\{ x_{1},x_{2},x_{3},\ldots,x_{n} \right\} D={x1,x2,x3,,xn}和一组类 C = { C 1 , … , C n } C = \{ C_{1},\ldots,C_{n}\} C={C1,,Cn}假定每个元组包括一些数值型的属性值 x i = { x i 1 , x i 2 , x i 3 , … , x in } x_{i} = \left\{ x_{i1},x_{i2},x_{i3},\ldots,x_{\text{in}} \right\} xi={xi1,xi2,xi3,,xin},每个类也包含数值型属性值 C j = { C j 1 , … , C jn } C_{j} = \{ C_{j1},\ldots,C_{\text{jn}}\} Cj={Cj1,,Cjn},则分类问题是要分配每个 x i x_{i} xi到满足如下条件的类 C j C_{j} Cj

∀ C l ∈ C \forall C_{l} \in C ClC C l ≠ C j C_{l} \neq C_{j} Cl̸=Cj,有:

s im ( x i , C j ) ≥ s im ( x i , C l ) s\text{im}\left( x_{i},C_{j} \right) \geq s\text{im}\left( x_{i},C_{l} \right) sim(xi,Cj)sim(xi,Cl)

其中 s im ( x i , C j ) s\text{im}\left( x_{i},C_{j} \right) sim(xi,Cj)被称为相似性,在实际的计算中往往用距离来表征。距离越近,相似性越大,距离越远,相似性越小。

距离的计算方法有很多种:

设有向量: a = ( a 1 , a 2 , a 3 , … , a n ) ,   b = ( b 1 , b 2 , b 3 , … , b n ) a = \left( a_{1},a_{2},a_{3},\ldots,a_{n} \right),\ b = (b_{1},b_{2},b_{3},\ldots,b_{n}) a=(a1,a2,a3,,an), b=(b1,b2,b3,,bn)则:

欧几里得距离(Euclidean Distance):

欧式距离由对应元素间差值平方和的平方根所表示,即

d ( a , b ) = ( a 1 − b 1 ) 2 + ( a 2 − b 2 ) 2 + … + ( a n − b n ) 2   d\left( a,b \right) = \sqrt{{(a_{1} - b_{1})}^{2} + {(a_{2} - b_{2})}^{2} + \ldots + {(a_{n} - b_{n})}^{2}}\ d(a,b)=(a1b1)2+(a2b2)2++(anbn)2  

曼哈坦距离(Manhattan Distance):

d ( a , b ) = ∣ a 1 − b 1 ∣ + ∣ a 2 − b 2 ∣ + … + ∣ a n − b n ∣ d\left( a,b \right) = \left| a_{1} - b_{1} \right| + \left| a_{2} - b_{2} \right| + \ldots + |a_{n} - b_{n}| d(a,b)=a1b1+a2b2++anbn

欧式距离和曼哈坦距离 共同点

  • 距离为一个非负数值;
  • 自身距离为0;
  • 距离函数具有对称性;
  • 距离函数满足三角不等式。

明考斯基距离(Minkowski Distance) 为欧几里得距离和曼哈坦距离的概化:

d ( a , b ) = ( ( a 1 − b 1 ) p + ( a 2 − b 2 ) p + … + ( a n − b n ) p ) 1 p , p ≥ 1 d\left( a,b \right) = {(\left( a_{1} - b_{1} \right)^{p} + \left( a_{2} - b_{2} \right)^{p} + \ldots + \left( a_{n} - b_{n} \right)^{p})}^{\frac{1}{p}},p \geq 1 d(a,b)=((a1b1)p+(a2b2)p++(anbn)p)p1,p1

其中 p p p为一个正整数,当 p = 1 p = 1 p=1时,其表示曼哈坦距离, p = 2 p = 2 p=2时,其表示欧几里得距离

加权的明考斯基距离:如果对每一个变量根据其重要性赋予一个权重,就得到加权的明考斯基距离。

KNN分类直观思想

如果它走路像鸭子,叫声也像鸭子,那么他可能就是只鸭子。

KNN算法基本步骤

  • 计算已知类别数据集中每个点与当前点的距离;
  • 选取与当前点距离最小的k个点;
  • 统计前K个点中每个类别的样本出现的概率;
  • 返回前K个点出现频率最高的类别作为当前点的预测分类。

KNN算法常见问题

类别如何判定

投票法:没有考虑近邻的距离的远近,距离更近的近邻也许更应该决定最终的方案

改进方法:加权投票法。

如何选区合适的距离测量

高纬度对距离衡量的影响:变量数越多,欧式距离的区分能力就越差;

变量值域对距离的影响:值域大的变量常常会在距离计算中占据主导作用,因此应先对变量进行标准化。

训练样本是否要一视同仁

可以给不同的样本加不同的权重,加强依赖样本的权重,降低不可信赖样本的影响

性能问题

  • KNN是一种 懒惰算法(收到测试样本后才开始训练)
  • 对测试样本分类是,需要扫描全部训练样本并计算距离
  • 压缩训练样本量可以提高计算效率

优化方法

特征降维:基于 Fuzzy ART 的 K- 最近邻分类改进算法,该算法用模糊自适应共振理论(Fuzzy ART)对K-最近邻的训练样本集进行浓缩, 以改善K- 最近邻的计算速度(对样本 的 维度进行简化,提取出特征明显的维度进行计算);

模式聚合: CHI 概率统计方法进行初步特征提取和模式聚合(如果某一维在各个类别中取值基本相同, 那么此维 对 于文本分类的贡献率就相对较低);

引入CLA(Classifier’s Local Accuracy)技术进行分类可信度分析。

KNN小结

KNN算法本身简单有效,它是一种lazylearning算法;

分类器不需要使用训练集进行训练, 训练时间复杂度为0;

KNN分类的计算复杂度和训练集中的文档 数目成正比,也就是说,如果训练集中文档总数为n,那么KNN的分类时间复杂度为O(n)。

KNN不足:

  • KNN是由k值的选择驱动的,这可能是一个糟糕的选择;
  • 通常,较大的k值会降低噪声对分类的影响,但会使类之间的边界不那么明显;
  • 由于存在噪声、不相关的特征或者特征尺度与其重要性不一致,算法的准确性会严重降低;
  • 检查解决方案对不同k值的敏感性是非常重要的
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

朴素贝叶斯与KNN算法 的相关文章

随机推荐

  • Keil5/MDK结构体无法自动指示成员变量

    方法总结 1 点击魔术棒法 1条消息 MDK5的结构体变量成员不提示问题的解决办法 weixin 45722312的博客 CSDN博客 keil5结构体加点后没有提示成员https blog csdn net weixin 45722312
  • elasticsearch基础5——文档处理解析、数据入盘流程、文档分片存储

    文章目录 一 同步和异步 阻塞和非阻塞 1 1 四种组合 二 客户端 2 1 高级客户端文档解析 2 2 文档索引 2 3 构建JSON文档 2 4 文档处理过程解析 2 5 数据入盘流程 2 6 与MongoDB比较 三 文档分片存储 3
  • java 生成uuid 16位_java生成16位随机UUID数

    public void testUid for int i 0 i UUID uuid UUID randomUUID System out println uuid toString 9e0db051 5ca9 46f4 958f ebd
  • STM32CubeMX学习六 之ADC配置

    文章目录 前言 一 本地环境 二 开始 1 定时器配置 2 引脚配置 在这里插入图片描述 https img blog csdnimg cn e5b6f155a1b8468cb15046a0a9d031cd png 3 内部时钟配置 4 A
  • redis必杀命令:列表(List)

    题记 Redis列表是简单的字符串列表 按照插入顺序排序 你可以添加一个元素导列表的头部 左边 或者尾部 右边 一个列表最多可以包含 232 1 个元素 4294967295 每个列表超过40亿个元素 例如 wd wd usr local
  • idea+springboot启动报错 ERROR org.apache.catalina.core.ContainerBase

    用idea导入了一个spring boot的项目 结果启动报错 ERROR org apache catalina core ContainerBase A child container failed during start tomca
  • 【JavaScript高级】Proxy和Reflect

    文章目录 存储属性描述符监听对象 Proxy 基本使用 set和get捕获器 Proxy的其他捕获器 construct和apply捕获器 Reflect 作用 方法 举个例子 Reflect的construct Receiver 参考 存
  • React 开发一个移动端项目(1)

    技术栈 项目搭建 React 官方脚手架 create react app react hooks 状态管理 redux redux thunk UI 组件库 antd mobile ajax请求库 axios 路由 react route
  • 1)数据库系统概述

    文章目录 一 数据库概念 二 常见的数据模型 三 关系型数据库 1 关系术语 2 关系的特点 3 常见存在的关系问题 4 关系运算 四 数据库设计 1 设计步骤 2 设计实例 一 数据库概念 长期存放在计算机上有组织的可共享的数据集合 二
  • secure boot 是什么

    一 secure boot 是什么 secure boot 中文叫安全启动 是电脑行业成员共同开发的一种安全机制 用于确保电脑只能启动原装系统 如果电脑重装了其他系统 那么这个系统是启动不了的 说白了 就是垄断 所以安装完其他系统 必须关闭
  • flex伸缩布局看着一篇就够啦

    flex伸缩布局 flex弹性概念 弹性盒子是一种按行或者按列布局元素的一种布局方式 它是需要父子盒子嵌套使用的 作用在父盒子 容器 上的属性有 flex direction 改变轴方向 flex wrap 换行 flex flow 前两项
  • 项目重点问题

    面试大保健 https blog csdn net Mrerlou article details 114295888 ops request misc 257B 2522request 255Fid 2522 253A 252216786
  • Java Swing图书管理系统,界面漂亮功能全,完整源码、下载直接使用 -417

    今天为利用晚上的一小段时间为大家分享一个写的不错的窗体程序 图书管理系统 417 系统功能已经比较全面 而且界面非常漂亮 有较强的参考和使用价值 项目系统有完整源码 下载后即可以运行 希望大家可以喜欢 喜欢的帮忙点赞和关注 一起编程 一起进
  • Shell脚本运行中的停止方法

    Linux系统Shell中提交了一个脚本 但是需要停止这个进程 如何处理 方式1 killall file flume kafka 说明 killall是一个命令 不是kill all file flume kafka是脚本名 此方法简单粗
  • MyBatis-Plus 的基础增删改查

    目录 1 简介 2 准备工作 3 MyBatis Plus 实现增删改查 1 MyBatis Plus 简介 MyBatis Plus 简称 MP 是 MyBatis 的增强工具 在 MyBatis 的基础上只做增强不做改变 为简化开发 提
  • 探索APP进程的启动流程(二)完结篇

    首先回顾下冷启动的流程图 共有四个步骤 1 launcher进程通过binder请求ams启动Activity AMS进程查询内存中是否存在该进程 2 内存中无相应进程 ams通过socket发送创建进程命令和相关资料到zygote进程 3
  • [HackTheBox]WEB题目

    0x01 50 Points I know Mag1k 问题描述 Can you get to the profile page of the admin 访问分配的地址 是一个带注册的登入页面 尝试常规注入 无效 来到注册页面注册 再退出
  • Springboot 实现发送邮件功能,使用QQ邮箱

    引入依赖
  • 若依分离版 --- 设置多数据源(主mysql,从sqlserver)

    主库mysql 从库sqlserver 1 修改application druid yml配置 配至slave 修改validationQuery SELECT 1 要不然sqlserver会报错 下面是完整的配置 可直接使用 根据自己情况
  • 朴素贝叶斯与KNN算法

    朴素贝叶斯算法 数学基础 我们先举一个例子 投硬币是一个随机过程 我们不能预测任意一次投币结果是正面还是反面 我们只能谈论其下一次结果是正面或者反面的概率 如果容貌取得一些额外的数据 如硬币的精准成分 硬币的最初位置 投币的力量与方向 硬币