k近邻算法的原理、示例与分析

本文深入探讨k近邻(kNN)算法,包括其在分类和回归问题中的应用,介绍算法原理、距离计算方法,并通过示例展示k值对模型复杂度和泛化能力的影响。同时,讨论了kNN的优缺点及其在大数据集上的挑战。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

k近邻算法的原理、示例与分析

代码参考书籍

Python机器学习基础教程. Andreas C.muller, Sarah Guido著(张亮 译). 北京:人民邮电出版社,2018.1(2019.6重印)

实现环境

System:Ubuntu server 20.04 (Jupyter notebook)
GPU:GeForce GTX 1080Ti(2块)
Driver Version: 450.36.06
CUDA Version: 11.0
Python Version: 3 .8.5
TensorFlow Version:2.4.1

1. 算法概述

  近邻算法是最简单的监督学习算法,它既可以用于处理分类问题,也可以用于解决回归问题;构建模型只需要保存训练数据集即可,模型容易理解,往往不需要过多调节就可以得到不错的性能;但对于训练样本大,特征向量维度大(几百)的数据集往往效果不好(计算复杂度高),对于大多数特征的取值为0的稀疏数据集,效果尤其不好。
  应用时,k越小,模型的偏差越小,泛化能力越弱;当k很小时,可能造成过拟合。反之,k越大,模型的偏差越大,对噪声数据越不敏感,泛化能力越强;当k值很大时,可能造成欠拟合。

2.算法原理

2.1 分类问题

  依据相似度确定未知对象的类别是人类对事物进行分类的最简单方法,正所谓“物以类聚人以群分”。k近邻算法(KNN算法)由Thomas等人在1967年提出[1]。它正是基于以上思想:要确定一个样本的类别,可以计算它与所有训练样本的距离,然后找出和该样本最接近的k个样本,统计出这些样本的类别并进行投票,票数最多的那个类就是分类的结果[2]
预测算法(分类)的流程如下:
(1)在训练样本集中找出距离待测样本x_test最近的k个样本,并保存至集合N中;
(2)统计集合N中每一类样本的个数 C i , i = 1 , 2 , . . . c C_{i}, i=1,2,...c Ci,i=1,2,...c
(3)最终的分类结果为 a r g m a x C i arg maxC_{i} argmaxCi(最大的对应的 C i C_i Ci那个类)。
  在上述实现过程中,k的取值尤为重要。它可以根据问题和数据特点来确定。在具体实现时,可以考虑样本的权重,即每个样本有不同的投票权重,这种方法称为带权重的k近邻算法,它是一种变种的k近邻算法。

2.2 回归问题

  假设离测试样本最近的k个训练样本的标签值为 y i y_i yi,则对样本的回归预测输出值为:
y ^ = ( ∑ i = 1 k y i ) / k (1) \hat{y}=(\sum_{i=1}^{k}y_i)/k \tag{1} y^=(i=1kyi)/k(1)
即为所有邻居的标签均值。
  带样本权重的回归预测函数为: y ^ = ( ∑ i = 1 k w i y i ) / k (2) \hat{y}=(\sum_{i=1}^{k}w_iy_i)/k \tag{2} y^=(i=1kwiyi)/k(2)其中 w i w_i wi为第个

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技术无极限

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值