K近邻算法 (K-Nearest Neighbors, KNN)

K近邻算法 (K-Nearest Neighbors, KNN)

通俗易懂算法

K近邻算法 (K-Nearest Neighbors, KNN) 是一种简单且常用的机器学习算法,主要用于分类和回归问题。其基本思想是:给定一个数据点,找到在训练集中距离该点最近的 k k k个数据点,然后根据这 k k k个点的信息来进行预测。以下是该算法的基本步骤:

  1. 选择 k k k k k k是一个超参数,表示我们要统计的最近邻居的数量。选择合适的 k k k值非常重要,会影响算法的准确性。

  2. 计算距离:对于给定的新数据点,计算它与训练集中每一个数据点之间的距离。常用的距离度量方法包括欧氏距离、曼哈顿距离等。以欧氏距离为例,其公式为:

    d ( x , x ( i ) ) = ∑ j = 1 n ( x j − x j ( i ) ) 2 d(\mathbf{x}, \mathbf{x}^{(i)}) = \sqrt{\sum_{j=1}^{n} (x_j - x_j^{(i)})^2} d(x,x(i))=j=1n(xjxj(i))2

    其中, x \mathbf{x} x是新数据点, x ( i ) \mathbf{x}^{(i)} x(i)是训练集中第 i i i个数据点, x j x_j xj x j ( i ) x_j^{(i)} xj(i)分别表示样本的第 j j j个特征。

  3. 选择最近的 k k k个邻居:根据计算出的距离,从训练集中选择与新数据点距离最近的 k k k个数据点。

  4. 投票决策(分类)或平均(回归)

    • 对于分类问题,用这 k k k个邻居中出现次数最多的类别作为新数据点的预测类别。这种方法称为“多数投票”。
    • 对于回归问题,计算这 k k k个邻居的特征值的平均值作为新数据点的预测值。

KNN的优点在于简单易懂且无需训练阶段。其缺点是在数据量大时计算效率较低,且对噪声敏感。

通过选择不同的 k k k值和距离度量方法,我们可以调节算法的复杂度和性能。小的 k k k值可能导致过拟合,而过大的 k k k值则可能使算法欠拟合。

希望这对你理解K近邻算法有所帮助!如果有其他问题,请随时提问。

底层原理

K近邻算法(K-Nearest Neighbors,简称KNN)是一种非参数、监督式的机器学习方法,主要用于分类和回归任务。KNN算法的基本思想是:对于给定的一个未知样本,寻找在特征空间中与其最近的 K K K个训练样本,根据这 K K K个邻居的类别信息对该未知样本进行分类(或回归预测)。

数学原理

距离度量

KNN算法中一个核心概念是“距离”,一般来说,为了找到样本点的最近邻,我们需要定义样本点之间的距离。常用的距离度量包括:

  1. 欧几里得距离(Euclidean Distance)
    对于两个 d d d维向量 x = ( x 1 , x 2 , … , x d ) \mathbf{x} = (x_1, x_2, \ldots, x_d) x=(x1,x2,,xd) y = ( y 1 , y 2 , … , y d ) \mathbf{y} = (y_1, y_2, \ldots, y_d) y=(y1,y2,,yd),它们之间的欧几里得距离定义为:

    D ( x , y ) = ∑ i = 1 d ( x i − y i ) 2 D(\mathbf{x}, \mathbf{y}) = \sqrt{\sum_{i=1}^{d} (x_i - y_i)^2} D(x,y)=i=1d(xiyi)2

  2. 曼哈顿距离(Manhattan Distance)
    曼哈顿距离是各个维度上绝对差值之和:

    D ( x , y ) = ∑ i = 1 d ∣ x i − y i ∣ D(\mathbf{x}, \mathbf{y}) = \sum_{i=1}^{d} |x_i - y_i| D(x,y)=i=1dxiyi

  3. 闵可夫斯基距离(Minkowski Distance)
    这是一种比较广义的距离定义,其中 p p p是一个参数。它是欧几里得距离和曼哈顿距离的推广:

    D ( x , y ) = ( ∑ i = 1 d ∣ x i − y i ∣ p ) 1 p D(\mathbf{x}, \mathbf{y}) = \left( \sum_{i=1}^{d} |x_i - y_i|^p \right)^{\frac{1}{p}} D(x,y)=(i=1dxiyip)p1

    特别地,当 p = 2 p=2 p=2时,就是欧几里得距离;当 p = 1 p=1 p=1时,就是曼哈顿距离。

分类原理

在进行分类任务时,KNN算法的目标是确定一个未标记样本的类别。基本步骤如下:

  1. 计算未知样本与训练集中所有样本的距离。
  2. 找到距离最近的 K K K个样本。
  3. 根据这 K K K个样本的类别来决定未知样本的类别。常用的方法是“多数表决”,即选择出现次数最多的类别作为预测结果。

假设 y i y_i yi是第 i i i个最近邻的类别,经过“多数表决”得到的预测结果 y ^ \hat{y} y^为:

y ^ = arg ⁡ max ⁡ c ∑ i = 1 K I ( y i = c ) \hat{y} = \arg\max_{c} \sum_{i=1}^{K} \mathbb{I}(y_i = c) y^=argcmaxi=1KI(yi=c)

其中 I \mathbb{I} I是指示函数,当括号内的条件成立时, I \mathbb{I} I取值为 1 1 1,否则为 0 0 0

回归原理

对于回归问题,KNN算法的预测结果是最近 K K K个邻居的目标值的平均值。设 y i y_i yi为第 i i i个最近邻的目标值,则预测结果 y ^ \hat{y} y^为:

y ^ = 1 K ∑ i = 1 K y i \hat{y} = \frac{1}{K} \sum_{i=1}^{K} y_i y^=K1i=1Kyi

超参数 K K K

K K K的值是KNN算法中的一个重要超参数。选择较小的 K K K值可能导致模型对噪声数据过于敏感,而选择较大的 K K K值可能导致模型过于平滑,丧失对细节模式的捕捉。因此, K K K的选择通常依赖于验证集或交叉验证技术。

常用面试考点

K近邻算法(K-Nearest Neighbors,简称KNN)是一种简单的、用于分类或回归的非参数机器学习算法。其基本思想是,通过计算待预测样本与已知样本集中的每个样本之间的距离,选择距离最近的 k k k个样本,以这些样本的标签通过某种方式(如投票或平均)决定待预测样本的标签。以下从面试考点出发,讲解KNN算法的关键要素:

1. 核心概念

  • 训练阶段:KNN算法不需要显式的训练过程,只需存储训练数据。这个特征使KNN成为一种惰性学习算法(Lazy Learning)。

  • 预测阶段:对于新输入的样本,KNN通过以下步骤进行预测:

    1. 计算新样本与训练集所有样本之间的距离。
    2. 选择距离最近的 k k k个邻居。
    3. 对于分类任务,通过这 k k k个邻居的多数投票决定新样本的类别。
    4. 对于回归任务,取这 k k k个邻居标签的平均值作为预测结果。

2. 距离度量

KNN算法常用的距离度量方式有:

  • 欧氏距离(Euclidean Distance)

    d ( x i , x j ) = ∑ m = 1 n ( x i m − x j m ) 2 d(x_i, x_j) = \sqrt{\sum_{m=1}^{n} (x_{im} - x_{jm})^2} d(xi,xj)=m=1n(ximxjm)2

    其中, x i x_i xi x j x_j xj是两个样本, n n n是特征维度。

  • 曼哈顿距离(Manhattan Distance)

    d ( x i , x j ) = ∑ m = 1 n ∣ x i m − x j m ∣ d(x_i, x_j) = \sum_{m=1}^{n} |x_{im} - x_{jm}| d(xi,xj)=m=1nximxjm

  • 明可夫斯基距离(Minkowski Distance)

    d ( x i , x j ) = ( ∑ m = 1 n ∣ x i m − x j m ∣ p ) 1 p d(x_i, x_j) = \left( \sum_{m=1}^{n} |x_{im} - x_{jm}|^p \right)^{\frac{1}{p}} d(xi,xj)=(m=1nximxjmp)p1

    p = 2 p=2 p=2时,等价于欧氏距离;当 p = 1 p=1 p=1时,等价于曼哈顿距离。

  • 余弦相似度:用于衡量两个向量之间的角度相似性:

    cos ⁡ ( θ ) = x i ⋅ x j ∥ x i ∥ ∥ x j ∥ \cos(\theta) = \frac{x_i \cdot x_j}{\|x_i\| \|x_j\|} cos(θ)=xi∥∥xjxixj

    在需要使用相似度而非距离时,余弦值可以作为一种选择。

3. 选择合适的 k k k

  • 交叉验证:使用交叉验证方法选取 k k k值,以确保模型在验证集上表现良好。

  • 过小的 k k k:容易受到噪声数据的影响,导致模型过拟合。

  • 过大的 k k k:可能包含过多不同类别的样本,导致模型泛化能力下降。

4. 加权KNN

在某些情况下,对邻居以距离的倒数进行加权,使得距离近的邻居对结果的影响更大:

f ( x ) = ∑ i = 1 k 1 d ( x , x i ) ⋅ y i ∑ i = 1 k 1 d ( x , x i ) f(x) = \frac{\sum_{i=1}^k \frac{1}{d(x, x_i)} \cdot y_i}{\sum_{i=1}^k \frac{1}{d(x, x_i)}} f(x)=i=1kd(x,xi)1i=1kd(x,xi)1yi

其中, y i y_i yi是邻居的实际标签。

5. 算法优缺点

  • 优点

    • 简单且易于理解、实现。
    • 对于小规模数据和特征不多的情况下效果较好。
    • 适合多分类问题。
  • 缺点

    • 计算复杂度高,特别是大规模数据集。
    • 存储每个训练样本需要大量内存。
    • 对不相关或冗余特征较为敏感。

总结

KNN算法由于其简单性和直观性,在分类或回归的基本场景中仍然被广泛使用。理解其核心原理、实现细节以及适用场景,是在面试中遇到相关问题时的制胜法宝。选择合适的距离度量方式、最佳的 k k k值,以及进行特征缩放,都可能显著影响KNN模型的性能。

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值