人工智能基础 | K近邻(三)


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ot9vMAVa-1668307153453)(https://csdn-pic-1301850093.cos.ap-guangzhou.myqcloud.com/csdn-pic/公众号横幅-1.png)]

以下内容是在学习过程中的一些笔记,难免会有错误和纰漏的地方。如果造成任何困扰,很抱歉。

最简单的机器学习算法之一,可以用于分类和回归,是一种监督学习算法。

定义

k-近邻(k-Nearest Neighbor,简称KNN)学习是一种常用的监督学习方法,其工作机制非常简单:给定测试样本,基于某种距离度量找出训练集中与其最靠近的k个训练样本,然后基于这k个“邻居”的信息来进行预测。————根据你的“邻居”判定你的类别,你周围的人决定了你是怎样的人

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pypRhuZD-1668307153453)(https://csdn-pic-1301850093.cos.ap-guangzhou.myqcloud.com/csdn-pic/两个样本之间的欧氏距离图片-1.png)]

两个样本之间的距离通过欧氏距离公式计算,公式如下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hWs48hEh-1668307153454)(https://csdn-pic-1301850093.cos.ap-guangzhou.myqcloud.com/csdn-pic/欧式距离公式-1.png)]

跟之前的学习方法相比,k-近邻是没有明显的训练过程,它是“懒惰学习”的代表,训练阶段仅仅是将样本保存,待收到测试样本后再进行处理,相对应的其它学习处理的方法,叫“急切学习”。

一、通过案例认识k-近邻

如何通过KNN推算出唐人街探案的电影类型?

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IUXjmEZd-1668307153454)(https://csdn-pic-1301850093.cos.ap-guangzhou.myqcloud.com/csdn-pic/K近邻的简单示例-1.png)]

通过KNN的算法思想,最后得到每个电影和被预测的电影的距离

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eINHGX4b-1668307153454)(https://csdn-pic-1301850093.cos.ap-guangzhou.myqcloud.com/csdn-pic/K近邻的简单示例-计算解析-1.png)]

结果如下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5kyIHfYD-1668307153455)(https://csdn-pic-1301850093.cos.ap-guangzhou.myqcloud.com/csdn-pic/K近邻的简单示例-计算解析-2.png)]

但是最终,我们不能通过单一的最近的距离结果,得到我们想要的答案,因为会可能存在的问题是,9个人觉得我帅,1个人觉得我丑,这1个人距离我最近,难道我就要听他的吗?他就是对的吗?所以一般情况下我们会根据结果的倒叙的第一、第三、第五的结果进行判别。

二、使用sk-learn实现k-近邻案例

实现API:n_neighbors,int类型,可选参数,默认值为5,功能为查询默认使用的邻居数

sklearn.neighbors.KNeighborsClassifier(n_neighbors=5)

完整代码

from sklearn.neighbors import KNeighborsClassifier

# x特征为多维数组
x = [[1], [2], [0], [0], ]
y = [1, 1, 0, 0]

# 导入算法模型
estimator = KNeighborsClassifier(n_neighbors=2)

# 数据训练
his = estimator.fit(x, y)

# 进行预测 入参依旧是多维数组
ret = estimator.predict([[3]])
print(ret)

总结

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

三、距离度量

地址
Python随记系列 —— 目录_繁依Fanyi的CSDN博客
  • 欧式距离
  • 曼哈顿距离/城市街区距离
  • 切比雪夫距离
  • 闵可夫斯基距离

曼哈顿距离

又名城市街区距离,由于有阻挡物,无法通过欧式距离进行两点间的最短距离,故而产生该距离算法得到最短街区距离

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ypL499qr-1668307153455)(https://csdn-pic-1301850093.cos.ap-guangzhou.myqcloud.com/csdn-pic/曼哈顿距离图-2.png)]

公式如下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uuRgQQby-1668307153456)(https://csdn-pic-1301850093.cos.ap-guangzhou.myqcloud.com/csdn-pic/曼哈顿距离公示图-1.png)]

切比雪夫距离

国际象棋的棋盘上,一场大战正在进行,“车”横冲直撞,干掉敌人;“皇后”肆意横行,大开杀戒;而国王,只能在自己周围的 “横”、“竖”、“斜” 几个方块里移动

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pnXvzjcK-1668307153456)(https://csdn-pic-1301850093.cos.ap-guangzhou.myqcloud.com/csdn-pic/切比雪夫距离棋盘图-1.png)]

切比雪夫距离 (Chebyshev Distance) 研究的就是关于 “国王” 移动的问题,国王从一个格子 (x1,y1) 走到 另一个格子 (x2,y2) 最少需要的步数就是 切比雪夫距离 ,数学公式为

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6IQWTgHe-1668307153456)(https://csdn-pic-1301850093.cos.ap-guangzhou.myqcloud.com/csdn-pic/切比雪夫距离公式-1.png)]

闵可夫斯基距离

闵氏距离并不是一种距离,而是一组距离的定义,是对多个距离度量公式的概括性的表述,将多个距离公式总结成为的一个公式

假设两个n维的变量

  • A( x11,x12,…,x1n )
  • B( x21,x22,…,x2n )

通过两个n维变量组成闵氏距离公式为

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LTrSfIiA-1668307153457)(https://csdn-pic-1301850093.cos.ap-guangzhou.myqcloud.com/csdn-pic/闵氏距离公式-1.png)]

咋一看,跟前面所述的“将多个距离公式总结成为的一个公式”一话并不是很相符,但是实际上,通过P值的变化,结果公式也将不同

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Hx85dflK-1668307153457)(https://csdn-pic-1301850093.cos.ap-guangzhou.myqcloud.com/csdn-pic/闵氏距离公式-分类图-1.png)]

根据P的不同,闵氏距离可以某一种的距离,它的优点在于同时能够多种距离度量,但是同时也暴露其缺点

  • 没有考虑各个分量的分布(期望,方差等)可能是不同
  • 单位相同看待

例如:身高相差10对比体重相差10的概念是不一样的

标准化欧氏距离

解决闵氏距离的一种改进,要针对变量 x 进行了修改,使其变成了标准化变量,数据各维分量的分布不一样,那就先将各个分量都标准化到均值、方差等;

假设样本集 X 的均值 (mean) 为 m ,标准差 (standard deviation) 为 s ,那么 X 的标准化变量为

带入公式后可得

从公式看还是蛮复杂的,我们引入实际案例来看

数据集 X = [  [ 1 , 1 ] ,  [ 2 , 2 ] ,  [ 3 , 3 ] ,  [ 4 , 4 ]  ]
假设两个变量的标准差为 0.5 和 1 (多维数组,最小维度索引0为x,最小维度索引1为y)

经过计算后的结果是
d = 2.2361   4.4721   6.7082   2.2361 ........

余弦距离

几何中,夹角余弦可用来衡量两个向量方向的差异;在机器学习中,用来衡量样本向量之间的差异

汉明距离

两个等长的字符串s1和s2的汉明距离:将一个字符串变成另一个字符串所需要的替换次数

杰卡德距离

用来衡量两个集合差异性的一种指标,两个集合A和B的交际元素在A,在B的并集里所占的比例,称为两个集合的杰卡德相似系数,通过符号表示为

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gOn67704-1668307153457)(https://csdn-pic-1301850093.cos.ap-guangzhou.myqcloud.com/csdn-pic/杰卡德距离公式简单图-1.png)]

马氏距离

是基于样本分布的一种距离,同时也表示数据的协方差距离,它是一种有效的计算两个位置样本集的相似度的方法

四、k值(邻居数)的选择

如果k过小:容易受到异常点的影响,k值的减小意味着整体模型将变得复杂,过拟合;

如果k过大:遭受样本均衡问题,k值的增大意味着整体模型变得简单,欠拟合;

这里涉及到统计方法论,需要通过合适的误差(近似误差、估计误差)进行判断,具体情况具体分析。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Uj2yYm47-1668307153457)(https://csdn-pic-1301850093.cos.ap-guangzhou.myqcloud.com/csdn-pic/魔方块图片-1.png)]

五、KD树(多维二叉树)

链接
KD树简介 - 知乎 (zhihu.com)

顾名思义,kd树其实就是多维二叉树, 里面储存着k维的点的信息,是对k维空间进行划分的一种数据结构。在竞赛中一般用来解决二维空间和三维空间的信息检索。

实现KNN算法时,如何对训练数据进行快速KNN搜素,在最简单的情况下,就是通过遍历穷举的方式,计算输入的实例对每个训练的实例的距离,计算存储后,再去查找KNN,简单但是效率比较低且耗时。

KD树的存在就是为了解决上述问题,为了避免每次重新计算距离,算法会把距离信息保存在一棵树里,每次计算之前先查询距离信息,避免重新计算下产生的耗时,KD树相当于多维二叉查找树,优化后的时间复杂度是O(DNlog(N))。1989年,另外一种Ball Tree的算法,在kd树的基础上对性能进行了优化。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q1ri0Wdy-1668307153458)(https://csdn-pic-1301850093.cos.ap-guangzhou.myqcloud.com/csdn-pic/唯美的树茎-1.png)]

二叉树中,入参通过不断的判断左右子节点从而找到最终的尾节点方位,而KD树对于二叉树来说,它是多维的

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qZaEIJcW-1668307153458)(https://csdn-pic-1301850093.cos.ap-guangzhou.myqcloud.com/csdn-pic/二叉树的随便一张图片-1.png)]

这里的理解较为困难我也是想了很久(由于KD树是多维的,不能太以二叉树的画面去代入思考),根据描述,黄色的点作为根节点进行平面切割,点的左右两边分别归为左右子树,再进行不断的划分,不断的分叉左右子树,分割的线叫做分割超平面,在一维中是点,二维是线,三维是面。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qb42VNbt-1668307153458)(https://csdn-pic-1301850093.cos.ap-guangzhou.myqcloud.com/csdn-pic/KD树的平面划分-1.png)]

六、关于切分点和切分域

如上述,将KD树的划分就是不断的分割平面,但是我们如何在KD树切分时选择合适的切分点和切分域?

切分域

即切分的维度方向,进行切分时,需要关注横切的方向,以及切出的子平面对立面是否分布均匀、是否存在大量过大或者过小的子平面。因此借助统计学的手段,每次切分域的选择,将计算待切分空间内的点此轮未被切分维度上的方差找方差最大的维度作为此次的切分域,找方差最大的维度作为此次的切分域。方差较大,表明在该维度上的点的分散度较高,按该维度切分分辨率比较高。

在一轮的切分中,每次切分不可切分相同的方向,即第一轮切分X轴,第二轮必须切Y轴,如果多余两个维度,则接下来依然按照剩下维度的方差值进行计算来选择切分域,直至遍历所有维度,一轮结束。

切分点

切分点的选择策略比较简单,是将带切分平面上的所有数据点按照切分域的维度进行大小排序,选择正中间的点作为切分点。如果正中间点是偶数个数,则任取中间左边或者右边的值作为切分点。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5yJ8d7lS-1668307153459)(https://csdn-pic-1301850093.cos.ap-guangzhou.myqcloud.com/csdn-pic/KNN切分点的选择的图-1.png)]

在kd树的实现过程中,切分域的选择并不一定采用方差选择方式,而可能只是简单的以 d mod n 维度的方式,来决定该层树的切分域(d代表树节点的深度,n代表维度数量,求模来确定切分域)。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A4u8JSuD-1668307153459)(https://csdn-pic-1301850093.cos.ap-guangzhou.myqcloud.com/csdn-pic/小星球-1.png)]

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值