概述
邻近算法,或者说K最邻近(KNN,K-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一。所谓K最近邻,就是K个最近的邻居的意思,说的是每个样本都可以用它最接近的K个邻近值来代表。近邻算法就是将数据集合中每一个记录进行分类的方法。
KNN是一个基本的分类和回归的算法,它是属于监督学习中分类方法的一种。
KNN算法流程
- 给定训练集和测试集,根据训练集来进行模型的构建
- 在测试集中依次选取每一个元素,选取距离最近的K个元素
- 统计K个元素中每个类别的数量,将此元素归类为数量最多的类别
KNN算法核心思想
KNN算法是一个分类算法,一般常用于分类或回归问题。当预测一个样本应该归为哪个类时,根据它距离最近的 K 个样本点是什么类别来判断该新样本属于哪个类别(多数投票)。
绿色的点是新加入的点,当K=3时,选择距离最近的3个点,其中有2个蓝色,1个红色,则会被分类为蓝色,
当K=5时,选择距离最近的5个点,其中有3个红色,2个蓝色,则会被分类为红色
其中,主要考虑的两个问题分别是K值选取和距离计算
KNN中需要考虑的三个问题
K值选取
显然,K值并不是越小越好也不是越大越好,而是差不多才好,
如果K值太小,分类的错误率会比较高,
如果K值太大,那么分类就会一直向其中某一类靠,
所以,K值取一个合适的值是最重要的,这个值怎么选取是我们需要思考的,
使用交叉验证来确定K值选取
交叉验证:在给定的建模样本中,拿出大部分样本进行建模型,留小部分样本用刚建立的模型进行预报,并求这小部分样本的预报误差,记录它们的平方加和。
也就是说,在给定的数据集中,拿出大部分比例的数据进行模型的构建,保留小部分的数据进行模型的验证,来对错误率进行记录。
距离计算
KNN中,一般采用欧式距离或者曼哈顿距离来进行计算
欧氏距离算法:
d ( x , y ) : = ( x 1 − y 1 ) 2 + ( x 2 − y 2 ) 2 + ⋯ + ( x n − y n ) 2 = ∑ i = 1 n ( x i − y i ) 2 d(x,y):=\sqrt{\left(x_1-y_1\right)^2+\left(x_2-y_2\right)^2+\cdots+\left(x_n-y_n\right)^2}=\sqrt{\sum_{i=1}^n\left(x_i-y_i\right)^2} d(x,y):=(x1−y1)2+(x2−y2)2+⋯+(xn−yn)2=∑i=1n(xi−yi)2
曼哈顿距离算法:
d ( x , y ) : = ∣ x 1 − x 2 ∣ + ⋯ + ∣ y n − y n ∣ d(x,y):=\mid x_{1}-x_{2}\mid+\cdots+\mid y_{n}-y_{n}| d(x,y):=∣x1−x2∣+⋯+∣yn−yn∣
欧式距离和曼哈顿距离都是闵可夫斯基距离,
闵可夫斯基距离:
ρ ( A , B ) = ( ∑ i = 1 n ∣ a i − b i ∣ p ) 1 p \rho(A,B)=(\sum_{i=1}^n|a_i-b_i|^p)^{\frac1p} ρ(A,B)=(∑i=1n∣ai−bi∣p)p1
当p=1时,变成曼哈顿距离;
当p=2时,变成欧式距离;
当p趋于无穷时,变成切比雪夫距离;
决策规则
确定如何将新的未分类数据点分配到已知的类别中。这通常是通过投票机制实现的,一般为将新点的预测标签设置为最多数量的类别的标签。
KNN优缺点
优点:
- 算法逻辑简单。
- 很少的训练,或者说不需要训练。
- 无特定数据分布假设。不对数据分布作出假设,完全基于距离度量对样本特征进行提取
- 预测效果较好,容错能力强。对于异常值的处理能力较强,不易受异常值的影响
- 适用于多类别问题。既可以用于分类,也可以用于回归问题,且可以进行非线性分类;
缺点:
- 内存要求高。在进行预测时,需要存储所有的训练数据在内存中
- 计算成本高。当特征数较多时,计算的成本会很大
- K值选取重要。对于上文所说的K值选取如果不当,会出现很大的误差
- 样本不平衡问题。当某些类别的样本数量极不均匀时,KNN算法可能无法正确分类
KNN应用场景
图像分类:识别人脸、车牌等。
文本分类:垃圾邮件过滤、情感分析等。
推荐系统:根据用户的历史行为推荐商品、音乐等。
数据挖掘:寻找异常值、聚类等。
生物信息学:基因分类、蛋白质分类等。
财务分析:预测股票价格、评估信用风险等。
参考:
https://blog.csdn.net/m0_74405427/article/details/133714384
https://cloud.tencent.com/developer/techpedia/1686/11502
https://cloud.tencent.com/developer/article/1719993