【kNN学习笔记】

前言

初学者接触机器学习难以入门的原因有以下几点:
①资料解释不全,尤其是公式符号没有给出定义,导致读者雾里看花。
②资料有误,论坛上部分帖子是发布者简单搬运,甚至有部分错误。
③实践性不足,没有合理引导读者进行代码实现。
笔者结合自己学习过程的痛点,将学习笔记分享出来。每篇文章力求短小精悍。

学习笔记包括以下六个模块:
算法描述:具象化描述算法,表达该算法的思想。
知识储备:此处会列出算法中使用到的小概念以帮助非理工科背景读者理解。
举个例子:此处会使用简单的数据并结合算法让读者深入理解细节。
实现代码:此处分为debug版本代码和第三方库实现代码。
算法分析:说明算法优缺点及适用场景。
资料引用:笔者学习过程中觉得干货满满的帖子作为补充资料。

笔者基于以下学习材料进行整理
①《机器学习实战》-作者: Peter Harrington-译者: 李锐 / 李鹏 / 曲亚东 / 王斌
此书提供python代码及简要阐明算法基本逻辑,大部分实现demon都源于此处。
②《机器学习中的数学》-作者: 孙博
此书简要阐明算法涉及的数学知识并给出实例介绍。
③b站硬核阿婆主手推各种算法原理可作为资料二的扩充。[3]
④《统计学习方法》-李航

算法描述

1.kNN思想包括近朱者赤近墨者黑和少数服从多数两大基本原则。
2.问题假设:我想探究一个小朋友的交友偏好,是喜欢跟男孩子玩还是喜欢跟女孩子玩。
3.数据输入:在某一时刻,目标小朋友的坐标位置与其他小伙伴的坐标位置。
4.算法过程:
①计算目标小朋友与其他小朋友的亲疏远近(距离)。
②按照由近及远的原则对距离排序。
③选出前k个最亲密的小朋友。
④统计这k个小朋友的性别(标签)并按照少数服从多数的原则得出结果。

知识储备

1.监督学习和无监督学习;两者的区别就是数据集是否有标签,有标签则为监督学习。在上面例子中,小伙伴的性别就是标签,所以此处为监督学习。
2.欧氏距离;两点之间的绝对距离。
假设二维空间有两个点A(1,2)和B(4,6)
则A和B的欧氏距离:
在这里插入图片描述

举个栗子

1.若目标小朋友坐标(3,0),其余小朋友位置如下表格

Data坐标标签
(0,0)
(1,0)
(0,1)
(3, 3)
(3,4)
(4,3)

2.计算目标小朋友和其他小伙伴的欧氏距离。
在这里插入图片描述
注:计算距离的方法有许多,此处仅以欧式距离举例。
3.对距离按照由近到远排序。(近朱者赤近墨者黑)
②<①=④<③=⑥<⑤
4.若k取5,则前5个小伙伴的投票结果为男生2票和女生3票,女生胜出。(少数服从多数)

实现代码

1.debug代码引用《机器学习实战》提供的demon,此书作者提供完整代码和数据集,强烈推荐。[1]
2.sklearn实现版本。[2]

算法分析

1.计算复杂;每预测一次都需要计算该数据与其他所有数据的距离并排序。
2.在debug代码有一个autoNorm函数,该函数的作用的对数据进行归一化。我们仍然以上述数据集为例,若坐标x的取值范围在[0,1],y的取值范围在[0,1000],则在计算距离的时候发现,坐标y的数值大小基本决定距离的大小,但实际情况中,我们认为x和y的重要性是等价的,所以这个时候需要归一化来磨平数值大小带来的差异。
3.
①k值的选取首先排除偶数,否则在投票时出现同票,无法满足少数服从多数。
②若标签有n个类,k的取值应大于等于n+1,原因是防止极端情况下每个类别各得一票,同样不满足少数服从多数的原则。
③关于更多k值大小的选取,笔者推荐阅读[4]中的k值选择。

资料引用

[1]GitHub:https://github.com/wzy6642/Machine-Learning-in-Action-Python3/tree/master/kNN_Project1
[2]CSDN:https://blog.csdn.net/weixin_37763870/article/details/105160899
[3]Bilibili:https://www.bilibili.com/video/BV1aE411o7qd
[4]CSDN:https://blog.csdn.net/sinat_30353259/article/details/80901746
此算法笔记会在CSDN、知乎、b站及公众号同步更新,账号名为一枚嘉应子。转载注明出处,侵权必究。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值