8_分类算法-k近邻算法(KNN)

news/2024/7/3 0:54:00

文章目录

  • 1 KNN算法
    • 1.1 KNN算法原理
    • 1.2 KNN过程
    • 1.3 KNN三要素
    • 1.4 KNN分类预测规则
    • 1.5 KNN回归预测规则
    • 1.6 KNN算法实现方式(重点)
    • 1.7 k近邻算法优缺点
  • 2 KD-Tree
    • 2.1 KD Tree构建方式
    • 2.2 KD Tree查找最近邻
    • 2.3 KNN参数说明

1 KNN算法

  • 定义:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。
  • 来源:KNN算法最早是由Cover和Hart提出的一种分类算法

1.1 KNN算法原理

  • K近邻(K-nearst neighbors,KNN)是一种基本的机器学习算法,所谓k近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻居来代表。比如:判断一个人的人品,只需要观察与他来往最密切的几个人的人品好坏就可以得出,即“近朱者赤,近墨者黑";KNN算法既可以应用于分类应用中,也可以应用在回归应用中。
  • KNN在做回归和分类的主要区别在于最后做预测的时候的决策方式不同。KNN在分类预测时,一般采用多数表决法;而在做回归预测时,一般采用平均值法

1.2 KNN过程

1、从训练集合中获取K个离待预测样本距离最近的样本数据;
2、根据获取得到的K个样本数据来预测当前待预测样本的目标属性值。

1.3 KNN三要素

在KNN算法中,非常重要的主要是三个因素:

  • K值的选择:对于K值的选择,一般根据样本分布选择一个较小的值,然后通过交叉验证来选择一个比较合适的最终值;当选择比较小的K值的时候,表示使用较小领域中的样本进行预测,训练误差会减小,但是会导致模型变得复杂,容易过拟合;当选择较大的K值的时候,表示使用较大领域中的样本进行预测,训练误差会增大,同时会使模型变得简单,容易导致欠拟合;
  • 距离的度量:一般使用欧氏距离(欧几里得距离);
  • 决策规则:在分类模型中,主要使用多数表决法或者加权多数表决法;在回归模型中,主要使用平均值法或者加权平均值法。

1.4 KNN分类预测规则

在KNN分类应用中,一般采用多数表决法或者加权多数表决法。

  • 多数表决法:每个邻近样本的权重是一样的,也就是说最终预测的结果为出现类别最多的那个类,比如下图中蓝色圆圈的最终类别为红色;
  • 加权多数表决法:每个邻近样本的权重是不一样的,一般情况下采用权重和距离成反比的方式来计算,也就是说最终预测结果是出现权重最大的那个类别;比如下图中,假设三个红色点到待预测样本点的距离均为2,两个黄色点到待预测样本点距离为1,那么蓝色圆圈的最终类别为黄色。

在这里插入图片描述

1.5 KNN回归预测规则

在KNN回归应用中,一般采用平均值法或者加权平均值法。

  • 平均值法:每个邻近样本的权重是一样的,也就是说最终预测的结果为所有邻近样本的目标属性值的均值;比如上图中,蓝色圆圈的最终预测值为:2.6;
  • 加权平均值法:每个邻近样本的权重是不一样的,一般情况下采用权重和距离成反比的方式来计算,也就是说在计算均值的时候进行加权操作;比如上图中,假设上面三个点到待预测样本点的距离均为2,下面两个点到待预测样本点距离为1,那么蓝色圆圈的最终预测值为:2.43,(权重分别为:1/7和2/7)

1.6 KNN算法实现方式(重点)

KNN算法的重点在于找出K个最邻近的点,主要方式有以下几种:

  • 蛮力实现(brute):计算预测样本到所有训练集样本的距离,然后选择最小的k个距离即可得到K个最邻近点。缺点在于当特征数比较多、样本数比较多的时候,算法的执行效率比较低;
  • KD树(kd_tree):KD树算法中,首先是对训练数据进行建模,构建KD树,然后再根据建好的模型来获取邻近样本数据。

除此之外,还有一些从KD-Tree修改后的求解最邻近点的算法,比如:Ball Tree BBF Tree,MVP Tree等。

1.7 k近邻算法优缺点

优点:简单,易于理解,易于实现,无需估计参数,无需训练

缺点:

  • 懒惰算法,对测试样本分类时的计算量大,内存开销大
  • 必须指定K值,K值选择不当则分类精度不能保证

使用场景:小数据场景,几千~几万样本,具体场景具体业务去测试

2 KD-Tree

  • KD Tree是KNN算法中用于计算最近邻的快速、便捷构建方式。
  • 当样本数据量少的时候,我们可以使用brute这种暴力的方式进行求解最近邻,即计算到所有样本的距离。但是当样本量比较大的时候,直接计算所有样本的距离,工作量有点大,所以在这种情况下,我们可以使用kd tree来快速的计算。

2.1 KD Tree构建方式

KD树采用从m个样本的n维特征中,分别计算n个特征取值的方差,用方差最大的第k维特征nk作为根节点。对于这个特征,选择取值的中位数nkv作为样本的划分点,对于小于该值的样本划分到左子树,对于大于等于该值的样本划分到右子树,对左右子树采用同样的方式找方差最大的特征作为根节点,递归即可产生KD树。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.2 KD Tree查找最近邻

当我们生成KD树以后,就可以去预测测试集里面的样本目标点了。

对于一个目标点,我们首先在KD树里面找到包含目标点的叶子节点。

以目标点为圆心,以目标点到叶子节点样本实例的距离为半径,得到一个超球体,最近邻的点一定在这个超球体内部。

然后返回叶子节点的父节点,检查另一个子节点包含的超矩形体是否和超球体相交,如果相交就到这个子节点寻找是否有更加近的近邻,有的话就更新最近邻。如果不相交那就简单了,我们直接返回父节点的父节点,在另一个子树继续搜索最近邻。当回溯到根节点时,算法结束,此时保存的最近邻节点就是最终的最近邻。
在这里插入图片描述
在这里插入图片描述

2.3 KNN参数说明

在这里插入图片描述


http://lihuaxi.xjx100.cn/news/1475348.html

相关文章

利用torchvision库实现目标检测与语义分割

一、介绍 利用torchvision库实现目标检测与语义分割。 二、代码 1、目标检测 from PIL import Image import matplotlib.pyplot as plt import torchvision.transforms as T import torchvision import numpy as np import cv2 import randomCOCO_INSTANCE_CATEGORY_NAMES …

视频集中存储/直播点播平台EasyDSS内核无法启动是什么原因?

视频推拉流EasyDSS视频直播点播平台,集视频直播、点播、转码、管理、录像、检索、时移回看等功能于一体,可提供音视频采集、视频推拉流、播放H.265编码视频、存储、分发等视频能力服务。 有用户反馈,下载了视频直播点播平台EasyDSS最新版本&a…

STM32F103C8T6引脚图及引脚功能说明

内容部分引用STM32F103C8T6引脚图_karwen2020的博客-CSDN博客_stm32引脚图

Unity血条制作

一、使用UGUI制作血条 我一般使用image制作血条,当然,也可以使用滑动组件Slider。image的具体操作步骤如下 普通血条 1、在Hierarchy面板中,创建两个image组件,将其中一个设置为另外一个的子节点 2、在Inspector面板中&#…

【Eclipse】汉化简体中文教程(官方汉化包,IDE自带软件安装功能),图文详情

目录 0.环境 1.步骤 1)查看eclipse的版本 2)在官网找语言包,并复制链接 3)将链接复制到eclipse中 4)汉化完成 0.环境 windows11,64位; eclipse 2021-6版本 1.步骤 思路:在官网找…

数据结构 day1

1>x.mind 2>间接定义结构体数组,进行4种方式的定义和初始化 3>定义结构体存储10辆车(车的信息:品牌、单价、颜色) 1.定义函数,实现循环输入 2.定义函数,实现排序 3.定义函数,计算红色车…

自学设计模式(简单工厂模式、工厂模式、抽象工厂模式)

使用工厂模式来生产某类对象(代码简化且容易维护,类之间有血缘关系,可以通过工厂类进行生产); 简单工厂模式(用于创建简单对象) 对于简单工厂模式,需要的工厂类只有一个&#xff1…

c++ java rgb与nv21互转

目录 jni函数 c++ rgb转nv21,可以转,不报错,但是转完只有黑白图 java yuv420保存图片,先转nv21,再保存ok: c++ yuv420月bgr互转,测试ok jni函数 JNIEXPORT void JNICALL Java_com_tencent_blazefacencnn_BlazeFaceNcnn_encode(JNIEnv *env,jobject thiz, jobject in…