机器学习 之 K近邻(KNN),各种距离(范数)

本文探讨k-最近邻(kNN)算法中k的选择原则,介绍如何通过交叉验证确定最佳k值,并解析最近邻判断的方法,包括欧式范数和归一化技巧。重点讲解kNN的时间复杂度、空间复杂度,以及其作为非参数模型的特点和适用场景。

思想是在训练数据集中找到与该实例最邻近的K个实例,这K个实例的多数属于某个类,就把该输入实例分类到这个类中(这就类似于现实生活中少数服从多数的思想)。

但k怎么确定的,k为多少效果最好呢?(其实是超参数,不能用数据进行调整的,只能用交叉验证推算)

如果我们选取较小的k值,那么就会意味着我们的整体模型会变得复杂,容易发生过拟合!(容易被噪声占据优势)

如果我们选取较大的k值,就相当于用较大邻域中的训练数据进行预测,这时与输入实例较远的(不相似)训练实例也会对预测起作用,使预测发生错误,k值的增大意味着整体模型变得简单。不解释。

k值既不能过大,也不能过小,要恰当好。通常采取交叉验证法来选取最优的k值。(也就是说,选取k值很重要的关键是实验调参,类似于神经网络选取多少层这种,通过调整超参数来得到一个较好的结果)

所谓的最近邻又是如何来判断给定呢?
这个就是各种距离,两个点之间的距离还是很好计算的。

而且还有归一化的问题,这个不难(x−ab−a\frac{x-a}{b-a}baxa)。

总结:
 kNN的时间复杂度和空间复杂度都是O(n);(测试集有多少个)
 kNN是一种懒惰的学习方法,无需训练;
 kNN算法隐含的假设是:一个实例的分类与它在欧式空间中附近的实例的分类相同
 KNN是一种“非参数模型”,非参数不是说没有参数的意思,而是说参数很多,多到和样本一样多!

每日小常识:

定义中所说的最邻近是如何度量呢?也就是说,何为最近呢?这里就会引出我们几种度量俩个点之间距离的标准------也就是那几个范数,常用l2范数(欧式范数)

d=∑k=1n(x1−x2)2d=\sqrt{\sum^n_{k=1}(x_1-x_2)^2}d=k=1n(x1x2)2

具体方法:

首先这里有训练集和测试集(用于交叉验证求k),是手写数字集合。
是矩阵的欧式范数怎么做呢?相当复杂,要求特征值的,而且网上全部都是压成一行。这样就可以用普通的欧式范数了。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值