KNN算法的介绍


K-近邻算法

一、K-近邻算法简介

K Nearest Neighbor算法又叫KNN算法,这个算法是机器学习里面比较经典的算法。

1、定义

如果一个样本在特征空间中的k个最相似(即特征空间中最近邻)的样本中大多数属于某一个类别,则该样本也属于这个类别。

2、常见的距离公式

2.1欧式距离(Euclidean Distance):

两个样本的距离可以通过一下的公式进行计算,又叫欧氏距离,
在这里插入图片描述

二维平面上点a ( x 1 , y 1 ) (_{x1},_{y1} ) (x1,y1)与b ( x 2 , y 2 ) (_{x2},_{y2} ) (x2,y2)间的欧式距离:
d 12 = ( x 1 − x 2 ) 2 + ( y 1 − y 2 ) 2 _{d12} =\sqrt{\left(_{x1} -_{x2} \right) ^2+\left (_{y1}- _{y2} \right ) ^2} d12=(x1x2)2+(y1y2)2
三维平面上点a ( x 1 , y 1 , z 1 ) (_{x1},_{y1} ,_{z1} ) (x1,y1,z1) ( x 2 , y 2 , z 2 ) (_{x2},_{y2} ,_{z2} ) (x2,y2,z2)间的欧式距离:
d 12 = ( x 1 − x 2 ) 2 + ( y 1 − y 2 ) 2 + ( z 1 − y z ) 2 _{d12} =\sqrt{\left(_{x1} -_{x2} \right) ^2+\left (_{y1}- _{y2} \right ) ^2+\left (_{z1}- _{yz} \right ) ^2} d12=(x1x2)2+(y1y2)2+(z1yz)2

n维平面上点a ( x 11 , x 12 . . . , x 1 n ) (_{x11},_{x12}...,_{x1n} ) (x11,x12...,x1n)与b ( x 21 , x 22 . . . , x 2 n ) (_{x21},_{x22}...,_{x2n} ) (x21,x22...,x2n)间的欧式距离(两个n维向量):
d 12 = ( ∑ k = 1 n ( x 1 k − x 2 k ) )  ⁣ ⁣ 2 _{d12} =\sqrt{\left( \sum_{k=1}^n (_{x1k}-_{x2k} )\right)^{\!\!2}} d12=(k=1n(x1kx2k))2

2.2曼哈顿距离(Manhanttan Distance):

在曼哈顿街区要从一个十字路口开车到另一个十字路口,驾驶距离显然不是连点之间的直线距离,这个时机驾驶距离就是“曼哈顿距离”。曼哈顿距离也称为“城市街区距离”(City Block distance)。
在这里插入图片描述
二维平面上点a ( x 1 , y 1 ) (_{x1},_{y1} ) (x1,y1)与b ( x 2 , y 2 ) (_{x2},_{y2} ) (x2,y2)间的曼哈顿距离:
d 12 = ∣ x 1 − x 2 ∣ + ∣ y 1 − y 2 ∣ _{d12} =\left | _{x1}-_{x2} \right | +\left | _{y1}-_{y2} \right | d12=x1x2+y1y2

n维平面上点a ( x 11 , x 12 . . . , x 1 n ) (_{x11},_{x12}...,_{x1n} ) (x11,x12...,x1n)与b ( x 21 , x 22 . . . , x 2 n ) (_{x21},_{x22}...,_{x2n} ) (x21,x22...,x2n)间的曼哈顿距离:
d 12 = ∑ k = 1 n ∣ x 1 k − x 2 k ∣ _{d12} =\sum_{k=1}^{n} \left | _{x1k}-_{x2k} \right | d12=k=1nx1kx2k

2.3切比雪夫距离(Chebyshev Distance):

国际象棋中,国王可以直行、横行、斜行,所以国王一部可以移动到相邻8个方格中等任意一个。国王从格子 ( x 1 , y 1 ) (_{x1},_{y1} ) (x1,y1)走到 ( x 2 , y 2 ) (_{x2},_{y2} ) (x2,y2)最少需要多少步?这个距离就叫切比雪夫距离。
在这里插入图片描述二维平面上点a ( x 1 , y 1 ) (_{x1},_{y1} ) (x1,y1)与b ( x 2 , y 2 ) (_{x2},_{y2} ) (x2,y2)间的切比雪夫距离:
d 12 = m a x ( ∣ x 1 − x 2 ∣ , ∣ y 1 − y 2 ∣ ) _{d12} =max(\left | _{x1}-_{x2} \right | ,\left | _{y1}-_{y2} \right |) d12=max(x1x2y1y2)

n维平面上点a ( x 11 , x 12 . . . , x 1 n ) (_{x11},_{x12}...,_{x1n} ) (x11,x12...,x1n)与b ( x 21 , x 22 . . . , x 2 n ) (_{x21},_{x22}...,_{x2n} ) (x21,x22...,x2n)间的切比雪夫距离:
d 12 = m a x ( ∣ x i − 2 i ∣ ) _{d12} =max(\left | _{xi}-_{2i} \right |) d12=max(xi2i)

2.4“连续属性”和“离散属性”的距离计算

我们常将属性划分为“连续属性”(continuous attribute)和“离散属性”(categorical attribute),前者在定义域上有无穷多个可能性的取值,后者在定义域上是有限个取值。
1)若属性之间存在有序关系,则可以将其转化为连续值,例如:身高属性“高”“中等”“矮”,可转化为{1,0.5,0}。
2)若属性间不存在有序关系,则通常转化为向量形式,例如:性别属性“男”“女",可转化为{(1,0),(0,1)}。

二、数据准备

数据准备:这包括收集、清洗和预处理数据。预处理可能包括归一化或标准化特征,以确保所有特征在计算距离时具有相等的权重。

1、特征预处理定义

特征预处理就是通过一些转换函数将特征数据转换成更加适合算法模型的特征数据过程。
在这里插入图片描述

  • 为什么要进行归一化/标准化?
    • 特征的单位或者大小相差较大,或者某特征的方差相比其他的特征要大出几个数量级,容易影响(支配)目标结果,是的这些算法无法学习但其他特征。

2、归一化

2.1定义

归一化就是通过对原始数据进行变换八数据映射到(默认为[0,1])之间。

2.2公式

X ′ = x − m i n m a x − m i n {X}' =\frac{x-min}{max-min} X=maxminxmin
X ′ ′ = X ′ ∗ ( m x − m i ) + m i {X}'' ={X}'*(mx-mi)+mi X′′=X(mxmi)+mi
( m a x max max为一列的最大值, m i n min min为一列的最小值, X ′ ′ {X}'' X′′为最终结果, m x mx mx m i mi mi分别为指定区间,值默认 m x mx mx为1, m i mi mi为0)
举例说明:
在这里插入图片描述

三、KNN算法——K值的选择

1.、K值选择说明

举例说明:
在这里插入图片描述
K值大小的选择对模型也有一定的影响。例如图上的案例,当k=5时,我们可以看出与目标电影——唐人街探案距离最近的5个电影,其中3个为喜剧片,2个为爱情片,所以我们可以预测唐人街探案为喜剧片。但是当k=6时,距离唐人街探案最近的6个电影其中3个为喜剧片,3个为爱情片,此时这个训练模型也判断不出目标电影的类型。

  • K值过小:
    • 容易受到异常点的影响
  • K值过大:
    • 受到样本均衡的问题

2、k值的选择

2.1选择较小的K值

就相当于用较小的领域中的训练实例进行预测,“学习”近似误差会减小,只有与输入实例较近或相似的训练实例才会对预测结果起作用,与此同时带来的问题是“学习”的估计误差会增大,换句话说,K值的减小就意味着整体模型变得复杂,容易发生过拟合

2.2选择较大的K值

就相当于用较大领域中的训练实例进行预测,其优点是可以减少学习的估计误差,但缺点是学习的近似误差会增大。这时候,与输入实例较远(不相似的)训练实例也会对预测器作用,使预测发生错误,且K值的增大就意味着整体的模型变得简单

2.3K=N(N为训练样本个数)

K=N(N为训练样本个数),则完全不足取,因为此时无论输入实例是什么,都只是简单的预测它属于在训练实例中最多的类,模型过于简单,忽略了训练实例中大量有用信息。
在实际应用中,值一般取一个比较小的数值,例如采用交叉验证法(简单来说,就是把训练数据在分成两组:训练集和验证集)来选择最优的K值。


3、近似误差与估计误差

  • 近似误差:
    • 对现有训练集的训练误差,关注训练集。
    • 如果近似误差过小可能会出现过拟合的现象,对现有的训练集能有很好的预测,但是对未知的测试样本将会出现较大偏差的预测。
    • 模型本身不是最接近最佳模型。
  • 估计误差:
    • 可以理解为对测试集的测试误差,关注测试集。
    • 估计误差小说明对未知数据的预测能力好。
    • 模型本身最接近最佳模型。

四、KNN算法流程

1)计算已知类别数据集中的点与当前点之间的距离
2)按距离递增排序
3)选取与当前点距离最近的k个点
4)统计前k个点所在的类别出现的频率
5)返回前k个点出现频率最高的类别作为当前点的预测类别

KNN算法是一种基于实例的学习方法,适用于特征维度较少、样本规模较小的情况。在实际应用中,还需要进行数据预处理、特征选择和模型评估等步骤,以获得更好的预测效果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值