K-Nearest Neighbor(KNN)

邻近算法与K近邻详解
本文深入探讨邻近算法(Nearest Neighbor)及K近邻算法(K-Nearest Neighbor)的概念与应用,解析L1与L2距离计算方法,并讨论算法优缺点与超参数选择的重要性。

邻近算法(Nearest Neighbor)

概念原理

    邻近算法(Nearest Neighbor)的思想实际上十分简单,就是将测试图片和储存起来的训练集一一进行相似度计算,计算出最相近的图片,这张图片的标签便是赋给测试图片的分类标签。

那么如何比较两组数据之间的相似长度呢?

算法分析

    最常用的两种方式: 

①L1距离(Manhattan distance)
②L2距离(Euclidean distance)

Manhattan distance

计算公式:
在这里插入图片描述

在图片上的具体反映:

在这里插入图片描述

在上述图片中最右侧的数字就是distance

两张图片使用L1距离来进行比较。逐个像素求差值,然后将所有差值加起来得到一个数值。如果两张图片一模一样,那么L1距离为0,但是如果两张图片很是不同,那L1值将会非常大。

K近邻算法(K-Nearest Neighbor)

概念原理

    在邻近算法(Nearest Neighbor)的思想中,我们只计算最相近的图片的标签。但是,在实际上,为了更好的效果,我们可以找最相似的K张图片,然后用这K张图片中数量最多的标签作为测试图片的分类标签。

算法分析

    最常用的两种方式: 
    ①L1距离(Manhattan distance)
     ②L2距离(Euclidean  distance)                  ----其实么得变化

只是将一张图片扩增为K张图片。

那么在K-NN中,K的值应该如何选出呢?

在这里,需要指出的是,K-NN的K值与我们所选择的计算图像距离的方式L1或者L2一样,我们尚且思考,在计算距离时,我们到底是应该选择L1还是L2呢?当你发出这样的提问时,你就会发现,这就如同思考,K的取值一般。K可以是2、3、4,那为什么不能是5、6、7呢?所以,这实际上,是以最后的结果好坏为导向性的。这一类在training中无法learn到,需要人为设置的参数,称之为超参数(hyperparameter),与参数不同,参数是在整个训练过程中可以不断优化得到最终结果的,超参数只能一开始就认为设置。

那么怎么才能确定自己选择的超参数是好的呢?

一遍遍的不断尝试,通过结果好坏进行分析。(要不怎么说人工智能,首先要有人工才能有智能呢,小声bb…)

优缺点分析:

缺点:
其实基本上,在图像识别上,是基本不会用到KNN的,因为KNN的最终结果很大程度上是以背景为导向的。

举一个栗子:

这时一只草地上的小狗:
在这里插入图片描在这里插入图片描述述
这时一只在沙发上的小猫:
在这里插入图片描述

那么,当我们有一只在草地上的猫咪时,会如何呢?

在这里插入图片描述

使用KNN的话,基本上,会认为是与上面左边的在草地上的狗最相似,因为,两张图片上,有着更多的相似像素点,这样一来,距离也就更加相近。你可以认为是,KNN记住了绿色的背景。所以说,他是以背景为导向的。

还有就是,由于KNN的计算特殊性,在所谓的训练阶段,KNN只是简单的储存所有的训练集,然后在检测阶段,进行一一的对比。这样就造成一个问题,那就是在检测阶段花费时间太长,使得基本不可能商用(也就是约等于没用233)。

优点:
但是其实,优点还是有的,因为使用了KNN总比你瞎猜强。

原文链接:https://blog.youkuaiyun.com/weixin_38419133/article/details/90814431

### K-Nearest Neighbor (KNN) 分类算法原理 K-Nearest Neighbor (KNN) 是一种基于实例的学习方法,属于监督学习的范畴。它通过计算样本之间的距离来判断新样本所属的类别。KNN 的核心思想是:给定一个测试样本,根据其在特征空间中的 K 个最近邻训练样本的类别信息,对测试样本进行分类[^1]。 #### 距离度量 KNN 算法通常使用欧几里得距离(Euclidean Distance)作为样本之间的距离度量公式: ```math d(x_i, x_j) = \sqrt{\sum_{k=1}^{m} (x_{ik} - x_{jk})^2} ``` 其中 \(x_i\) 和 \(x_j\) 表示两个样本点,\(m\) 是特征维度的数量[^1]。 #### 分类决策规则 对于一个测试样本 \(x_q\)KNN 算法首先找到训练集中与 \(x_q\) 最近的 K 个样本,然后根据这些样本的类别信息决定 \(x_q\) 的类别。常见的决策规则包括以下两种: 1. **多数投票法**:选择 K 个最近邻样本中出现次数最多的类别作为测试样本的预测类别。 2. **加权投票法**:为每个最近邻样本赋予一个权重,权重与距离成反比。例如,可以使用以下公式计算权重: ```math w_i = \frac{1}{d(x_q, x_i)} ``` 其中 \(d(x_q, x_i)\) 是测试样本 \(x_q\) 和训练样本 \(x_i\) 之间的距离[^1]。 #### KNN 算法步骤 尽管 KNN 算法简单,但其实现过程需要明确以下几点: - 初始化参数 \(K\),即选择多少个最近邻样本参与分类。 - 计算测试样本与所有训练样本的距离。 - 根据选定的决策规则(如多数投票法或加权投票法)确定测试样本的类别。 #### KNN 的优缺点 - **优点**: - 简单易实现。 - 对于小规模数据集表现良好。 - **缺点**: - 计算复杂度较高,尤其是当训练集较大时。 - 对于高维数据,距离度量可能会失效(即“维度灾难”问题)。 ```python from sklearn.neighbors import KNeighborsClassifier import numpy as np # 示例代码 X_train = np.array([[1, 2], [2, 3], [3, 1]]) y_train = np.array([0, 0, 1]) X_test = np.array([[2.5, 2]]) knn = KNeighborsClassifier(n_neighbors=3) knn.fit(X_train, y_train) prediction = knn.predict(X_test) print("Prediction:", prediction) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值