当前位置: 首页 > news >正文

【机器学习】非线性分类算法(上):KNN(基于距离相似度)与朴素(特征独立)贝叶斯(基于概率统计)

文章目录

  • 一、K近邻算法(KNN):基于距离的"邻居投票"
    • 1、核心思想:物以类聚
    • 2、距离度量:欧氏距离
    • 3、工作原理:三步决策
    • 4、KNN算法的优势与局限
  • 二、朴素贝叶斯:基于概率的"专家判断"
    • 1、核心思想:贝叶斯定理的应用
    • 2、朴素假设:条件独立性
      • 特征独立性
      • 分类决策:最大后验概率
      • 概率估计:不同类型特征的处理
    • 3、工作原理:四步概率推理
    • 4、优势与适用场景
  • 三、算法对比与选择指导

在现实世界中,数据的分布往往错综复杂,远非一条直线或一个平面可以划分清楚。例如,判断一封邮件是否为垃圾邮件,涉及到内容、时间、发件人等多种因素的复杂组合。线性分类算法就像用直尺切蛋糕,难以应对蛋糕上复杂的花纹。这时,非线性分类算法就像灵活的雕刻刀,能顺应数据的"纹理"进行精准切割。

本文将深入解析两种经典的非线性分类算法:K近邻算法(KNN)和朴素贝叶斯算法。这两种算法代表了不同的分类思路——基于距离的"邻居投票"和基于概率的"专家判断"。

 

一、K近邻算法(KNN):基于距离的"邻居投票"

1、核心思想:物以类聚

KNN的核心思想非常简单直观:相似的样本应该属于同一类别。就像我们判断一个人的性格时,会参考他周围朋友的特点一样,KNN通过观察新样本的"邻居"来决定它的类别。

数学公式
对于新样本 xxx,找到训练集中距离它最近的 KKK 个邻居,然后采用多数投票决定类别:

y^=arg⁡max⁡c∑i∈NK(x)I(yi=c)\hat{y} = \arg\max_{c} \sum_{i \in N_K(x)} \mathbb{I}(y_i = c)y^=argcmaxiNK(x)I(yi=c)

其中,

  • y^\hat{y}y^:预测的类别标签
  • arg⁡max⁡c\arg\max_{c}argmaxc:选择使后面表达式最大的类别 ccc
  • ∑i∈NK(x)\sum_{i \in N_K(x)}iNK(x):对 xxxKKK最近邻居求和
  • I(yi=c)\mathbb{I}(y_i = c)I(yi=c):指示函数,判断邻居 iii 是否属于类别 ccc

 

1. 指示函数是一个简单的判断函数:
I(yi=c)={1如果 yi=c0如果 yi≠c\mathbb{I}(y_i = c) = \begin{cases} 1 & \text{如果 } y_i = c \\ 0 & \text{如果 } y_i \neq c \end{cases}I(yi=c)={10如果 yi=c如果 yi=c

假设我们有5个邻居,它们的类别分别是:[A, B, A, A, B]

  • 对于类别A:I(y1=A)=1\mathbb{I}(y_1 = A) = 1I(y1=A)=1, I(y2=A)=0\mathbb{I}(y_2 = A) = 0I(y2=A)=0, I(y3=A)=1\mathbb{I}(y_3 = A) = 1I(y3=A)=1, I(y4=A)=1\mathbb{I}(y_4 = A) = 1I(y4=A)=1, I(y5=A)=0\mathbb{I}(y_5 = A) = 0I(y5=A)=0
  • 对于类别B:I(y1=B)=0\mathbb{I}(y_1 = B) = 0I(y1=B)=0, I(y2=B)=1\mathbb{I}(y_2 = B) = 1I(y2=B)=1, I(y3=B)=0\mathbb{I}(y_3 = B) = 0I(y3=B)=0, I(y4=B)=0\mathbb{I}(y_4 = B) = 0I(y4=B)=0, I(y5=B)=1\mathbb{I}(y_5 = B) = 1I(y5=B)=1

 

2. 求和部分 ∑i∈NK(x)I(yi=c)\sum_{i \in N_K(x)} \mathbb{I}(y_i = c)iNK(x)I(yi=c)

这部分计算的是在 KKK 个最近邻居中,属于类别 ccc 的邻居数量。

继续上面的例子:

  • 类别A的票数:∑i=15I(yi=A)=1+0+1+1+0=3\sum_{i=1}^{5} \mathbb{I}(y_i = A) = 1 + 0 + 1 + 1 + 0 = 3i=15I(yi=A)=1+0+1+1+0=3
  • 类别B的票数:∑i=15I(yi=B)=0+1+0+0+1=2\sum_{i=1}^{5} \mathbb{I}(y_i = B) = 0 + 1 + 0 + 0 + 1 = 2i=15I(yi=B)=0+1+0+0+1=2

 
3. arg⁡max⁡c\arg\max_{c}argmaxc 的作用

arg⁡max⁡c\arg\max_{c}argmaxc 表示选择使后面表达式达到最大值的类别 ccc

在例子中:

  • 类别A的票数:3
  • 类别B的票数:2

arg⁡max⁡c\arg\max_{c}argmaxc 会选择票数最多的类别,即类别A

 

这个公式实际上就是在说:

  1. 找到新样本的 KKK 个最近邻居
  2. 统计这些邻居中每个类别有多少个
  3. 选择出现次数最多的类别作为预测结果

这个公式基于一个基本假设:相似的样本应该属于同一类别。如果新样本的邻居大多属于类别A,那么新样本也很可能属于类别A。这种直觉在大多数情况下都是成立的,即少数服从多数的原则。

 

2、距离度量:欧氏距离

欧氏距离就是我们在几何学中学到的"两点之间的直线距离"。在KNN中,我们将每个样本看作特征空间中的一个点,然后计算这些点之间的距离来衡量相似性。

数学公式

d(x1,x2)=∑j=1n(x1j−x2j)2d(x_1, x_2) = \sqrt{\sum_{j=1}^n (x_{1j} - x_{2j})^2}d(x1,x2)=j=1n(x1jx2j)2

各部分含义:

  • x1,x2x_1, x_2x1,x2:两个样本
  • x1j,x2jx_{1j}, x_{2j}x1j,x2j:第 jjj 个特征的值

 

3、工作原理:三步决策

KNN的工作流程可以概括为三个步骤:

  1. 距离计算:对于每个测试样本,计算它与所有训练样本的距离
  2. 邻居选择:选择距离最近的 KKK 个训练样本作为"邻居"
  3. 投票决策:根据这 KKK 个邻居的多数类别进行预测

 

为什么这样有效?

KNN基于"相似样本有相似标签"的假设。如果两个样本在特征空间中距离很近,那么它们很可能属于同一类别。这种直觉在大多数情况下都是成立的,特别是在数据分布相对均匀的情况下。

 
K值的选择直接影响算法的性能:

  • K值过小:容易受噪声影响,模型不稳定
  • K值过大:可能包含太多不同类别的样本,降低分类精度
  • 经验法则:通常选择 K=nK = \sqrt{n}K=n,其中 nnn 是训练样本数

 

4、KNN算法的优势与局限

核心优势
KNN算法具有三个主要优势:无需训练适应性强直观易懂。它不需要复杂的模型训练过程,直接基于距离计算进行分类,能够处理各种类型的数据,只要能够定义合适的距离度量。

适用场景
KNN最适合处理小到中等规模的数据集,因为其计算复杂度为 O(n)O(n)O(n),数据量过大时计算效率会显著下降。它在特征相似性明显的数据中表现优异,比如推荐系统中的用户相似性判断,以及需要快速验证想法的场合。

主要局限
KNN面临三个关键挑战:维度灾难特征尺度敏感性噪声敏感性。在高维空间中,距离度量失去区分能力;不同特征的值域差异会导致距离计算被大值域特征主导异常值会显著影响分类结果。这些局限要求在使用KNN时进行适当的数据预处理,如特征标准化和降维处理

 

二、朴素贝叶斯:基于概率的"专家判断"

1、核心思想:贝叶斯定理的应用

朴素贝叶斯算法基于贝叶斯定理,通过计算后验概率来进行分类。其核心假设是特征之间条件独立(这就是"朴素"的含义)。

贝叶斯定理:
P(y∣x)=P(x∣y)P(y)P(x)P(y|x) = \frac{P(x|y)P(y)}{P(x)}P(yx)=P(x)P(xy)P(y)

这个公式告诉我们:要计算样本 xxx 属于类别 yyy 的概率,我们需要知道:

  1. 类别 yyy 的先验概率 P(y)P(y)P(y)
  2. 在类别 yyy 下观察到特征 xxx 的条件概率 P(x∣y)P(x|y)P(xy)

各部分含义:

  1. P(y∣x)P(y|x)P(yx) - 后验概率

    • 含义:在观察到特征 xxx 的条件下,样本属于类别 yyy 的概率
    • 例子:已知邮件包含"免费"、"中奖"等词,这封邮件是垃圾邮件的概率
  2. P(y)P(y)P(y) - 先验概率

    • 含义:在没有任何信息的情况下,样本属于类别 yyy 的概率
    • 例子:所有邮件中垃圾邮件的比例
  3. P(x∣y)P(x|y)P(xy) - 似然概率

    • 含义:在类别 yyy 的条件下,观察到特征 xxx 的概率
    • 例子:在垃圾邮件中,包含"免费"、"中奖"等词的概率
  4. P(x)P(x)P(x) - 证据概率

    • 含义:观察到特征 xxx 的总概率
    • 例子:所有邮件中包含"免费"、"中奖"等词的概率

 

2、朴素假设:条件独立性

为什么朴素假设有效?

虽然特征独立性假设在现实中往往不成立,但朴素贝叶斯仍然表现良好,原因包括:

  • 排序而非绝对概率:我们关心的是类别排序,而不是绝对概率值
  • 误差抵消:特征之间的相关性往往被先验概率和条件概率的乘积效应所抵消
  • 高维稀疏数据:在文本分类等高维稀疏数据中,独立性假设相对合理

特征独立性

朴素贝叶斯的关键在于"朴素"假设:所有特征在给定类别下是条件独立的。这意味着:

P(x1,x2,...,xn∣y)=P(x1∣y)×P(x2∣y)×...×P(xn∣y)P(x_1, x_2, ..., x_n|y) = P(x_1|y) \times P(x_2|y) \times ... \times P(x_n|y)P(x1,x2,...,xny)=P(x1y)×P(x2y)×...×P(xny)

简单理解:在给定类别 yyy 的条件下,所有特征的概率等于各个特征概率相乘。

例子

  • 在垃圾邮件中,包含"免费"的概率是80%
  • 在垃圾邮件中,包含"中奖"的概率是60%
  • 朴素假设认为:在垃圾邮件中,同时包含"免费"和"中奖"的概率 = 80% × 60% = 48%

虽然这个假设在现实中往往不成立,但朴素贝叶斯仍然表现良好。这是因为我们关心的是类别排序,而不是绝对概率值。

 

分类决策:最大后验概率

在朴素假设下,分类公式(计算样本属于某个类别的概率)变为:

P(y∣x1,x2,...,xn)∝P(y)∏j=1nP(xj∣y)P(y|x_1, x_2, ..., x_n) \propto P(y) \prod_{j=1}^n P(x_j|y)P(yx1,x2,...,xn)P(y)j=1nP(xjy)

正比于解释:

  • 垃圾邮件概率:0.3×0.8×0.6P(x)=0.144P(x)\frac{0.3 \times 0.8 \times 0.6}{P(x)} = \frac{0.144}{P(x)}P(x)0.3×0.8×0.6=P(x)0.144
  • 正常邮件概率:0.7×0.1×0.05P(x)=0.0035P(x)\frac{0.7 \times 0.1 \times 0.05}{P(x)} = \frac{0.0035}{P(x)}P(x)0.7×0.1×0.05=P(x)0.0035

比较大小:

  • 0.144P(x)>0.0035P(x)\frac{0.144}{P(x)} > \frac{0.0035}{P(x)}P(x)0.144>P(x)0.0035
  • 等价于:0.144>0.00350.144 > 0.00350.144>0.0035

所以我们可以直接比较分子,省略分母。

 

例子

判断邮件是否为垃圾邮件

  • 基础概率:垃圾邮件30%,正常邮件70%
  • 特征概率:包含"免费"在垃圾邮件中80%,在正常邮件中10%
  • 特征概率:包含"中奖"在垃圾邮件中60%,在正常邮件中5%

计算:

  • 垃圾邮件概率:30% × 80% × 60% = 14.4%
  • 正常邮件概率:70% × 10% × 5% = 0.35%

 

我们选择后验概率最大的类别(选择概率最大的类别)作为预测结果:

y^=arg⁡max⁡yP(y)∏j=1nP(xj∣y)\hat{y} = \arg\max_{y} P(y) \prod_{j=1}^n P(x_j|y)y^=argymaxP(y)j=1nP(xjy)

例子

  • 垃圾邮件概率:14.4%
  • 正常邮件概率:0.35%
  • arg⁡max⁡\arg\maxargmax 选择:垃圾邮件(因为14.4% > 0.35%)

 

概率估计:不同类型特征的处理

连续特征(高斯朴素贝叶斯):
对于连续特征,我们假设它们服从正态分布:如下是正态分布的概率密度函数,用来计算连续特征的概率。

P(xj∣y)=12πσ2exp⁡(−(xj−μ)22σ2)P(x_j|y) = \frac{1}{\sqrt{2\pi\sigma^2}} \exp\left(-\frac{(x_j - \mu)^2}{2\sigma^2}\right)P(xjy)=2πσ21exp(2σ2(xjμ)2)

其中,μ\muμσ2\sigma^2σ2 分别是类别 yyy 下特征 jjj 的均值和方差。

各部分含义

  • μ\muμ:平均值
  • σ2\sigma^2σ2:方差
  • xjx_jxj:特征值
  • exp⁡()\exp()exp():自然指数函数 exe^xex

 

为什么用这个公式?

  • 对于连续特征(如年龄、收入),我们不能像离散特征那样直接算频率
  • 我们假设连续特征服从正态分布
  • 用正态分布公式计算概率

 

离散特征(多项式朴素贝叶斯):
对于离散特征,我们使用频率估计:

P(xj∣y)=count(xj,y)+αcount(y)+α∣V∣P(x_j|y) = \frac{count(x_j, y) + \alpha}{count(y) + \alpha|V|}P(xjy)=count(y)+αVcount(xj,y)+α

其中,α\alphaα 是平滑参数,∣V∣|V|V 是特征 jjj 的可能取值数量。

 

3、工作原理:四步概率推理

朴素贝叶斯的工作流程包括四个步骤:

  1. 先验概率计算:根据训练数据计算每个类别的先验概率 P(y)P(y)P(y)
  2. 条件概率估计:估计在给定类别下每个特征的条件概率 P(xj∣y)P(x_j|y)P(xjy)
  3. 后验概率计算:使用贝叶斯定理计算新样本属于每个类别的后验概率
  4. 分类决策:选择后验概率最大的类别作为预测结果

 

4、优势与适用场景

核心优势
朴素贝叶斯算法具有训练快速输出概率处理缺失值支持增量学习四大优势。其时间复杂度仅为 O(n×d)O(n \times d)O(n×d),能够高效处理大规模数据,同时提供概率输出而非简单的类别预测,这使得它在需要不确定性评估的场景中表现突出。

适用场景
该算法特别适合文本分类医疗诊断推荐系统高维稀疏数据处理。在这些场景中,特征数量往往远大于样本数量,朴素贝叶斯的独立性假设相对合理,能够有效捕捉特征与类别之间的关系。

主要局限
朴素贝叶斯面临三个关键挑战:特征强相关会违反独立性假设,连续特征较多时高斯假设可能不成立,以及需要复杂特征交互的场合。这些局限要求在使用时仔细考虑数据特征,必要时进行特征工程或选择其他更适合的算法。
 

三、算法对比与选择指导

特性KNN朴素贝叶斯
核心思想距离度量+投票贝叶斯定理+条件独立
训练时间无需训练O(n×d)O(n \times d)O(n×d)
预测时间O(n)O(n)O(n)O(d)O(d)O(d)
内存需求存储所有训练数据存储概率参数
可解释性中等
处理缺失值困难天然支持
特征尺度敏感性

选择指导:

  • 选择KNN的情况

    • 数据规模较小(<1000样本)
    • 特征相似性明显
    • 需要快速原型验证
    • 对模型可解释性要求不高
  • 选择朴素贝叶斯的情况

    • 文本分类等高维稀疏数据
    • 需要概率输出
    • 计算资源有限
    • 数据包含缺失值
http://www.lryc.cn/news/608324.html

相关文章:

  • 排序算法-堆排序
  • SQL 四大语言分类详解:DDL、DML、DCL、DQL
  • 分布在内侧内嗅皮层的层Ⅱ或层Ⅲ的头部方向细胞(head direction cells)对NLP中的深层语义分析的积极影响和启示
  • 智能制造——解读CMMM评估手册【附全文阅读】
  • MyBatis 批量操作 XML 实现方式
  • 信创应用服务器TongWeb安装教程、前后端分离应用部署全流程
  • 元宇宙重构未来交通新图景
  • linux source命令使用详细介绍
  • 空间平面旋转与xoy平行
  • Node.js中path模块的使用指南
  • QT中使用OpenCV保姆级教程
  • 1分钟临时共享空间在线小工具实现
  • 安卓自动点击器:设置点击周期 / 滑动,抢票、游戏刷日常秒会
  • 2025牛客多校第六场 D.漂亮矩阵 K.最大gcd C.栈 L.最小括号串 个人题解
  • C++入门基础(三):const引用、指针和引用的关系、inline(修饰内联函数)替代宏、nullptr代替null
  • Rust进阶-part1-智能指针概述-box指针
  • Java中Lambda 表达式的解释
  • 机器学习实战:KNN算法全解析 - 从原理到创新应用
  • 机器学习消融实验:方法论演进、跨领域应用与前沿趋势
  • 大模型(五)MOSS-TTSD学习
  • 【MATLAB】(四)函数运算
  • 【MATLAB】(五)向量
  • C语言第八章指针一
  • MybatisPlus生成代码
  • MQTT协议测试环境部署
  • MybatisPlus-自动生成代码
  • 洛谷刷题8.2
  • 【AI学习】RadioDiff:代码学习
  • 福彩双色球第2025088期篮球号码分析
  • Leetcode-141.环形链表