KNN算法优缺点、原理及参数最优解

2023-11-19

1. KNN算法简介

  • 1.1 简述

  • 简单地说,K-近邻算法采用测量不同特征值之间的距离方法进行分类(k-Nearest Neighbor,KNN)

  • 1.2 优缺点

    • 优点:精度高、对异常值不敏感、无数据输入假定。

    • 缺点:时间复杂度高、空间复杂度高。

    1. 当样本不平衡时,比如一个类的样本容量很大,其他类的样本容量很小,输入一个样本的时候,K个临近值中大多数都是大样本容量的那个类,这时可能就会导致分类错误。改进方法是对K临近点进行加权,也就是距离近的点的权值大,距离远的点权值小。

    2. 计算量较大,每个待分类的样本都要计算它到全部点的距离,根据距离排序才能求得K个临近点,改进方法是:先对已知样本点进行剪辑,事先去除对分类作用不大的样本。

  • 1.3 适用数据范围

    • 标称型:标称型目标变量的结果只在有限目标集中取值,如真与假(标称型目标变量主要用于分类)

    • 数值型:数值型目标变量则可以从无限的数值集合中取值,如0.100,42.001等 (数值型目标变量主要用于回归分析)

2. 工作原理

2.1 训练样本集

  • 存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据 与所属分类的对应关系。

  • 输人没有标签的新数据后,将新数据的每个特征与样本集中数据对应的 特征进行比较,然后算法提取样本集中特征最相似数据(最近邻)的分类标签。

  • 一般来说,我们 只选择样本数据集中前K个最相似的数据,这就是K-近邻算法中K的出处,通常K是不大于20的整数。 最后 ,选择K个最相似数据中出现次数最多的分类,作为新数据的分类。

2.2 电影类别的KNN分析

  • 如何进行电影分类

    • 众所周知,电影可以按照题材分类,然而题材本身是如何定义的?由谁来判定某部电影属于哪 个题材?也就是说同一题材的电影具有哪些公共特征?这些都是在进行电影分类时必须要考虑的问 题。没有哪个电影人会说自己制作的电影和以前的某部电影类似,但我们确实知道每部电影在风格 上的确有可能会和同题材的电影相近。那么动作片具有哪些共有特征,使得动作片之间非常类似, 而与爱情片存在着明显的差别呢?动作片中也会存在接吻镜头,爱情片中也会存在打斗场景,我们 不能单纯依靠是否存在打斗或者亲吻来判断影片的类型。但是爱情片中的亲吻镜头更多,动作片中 的打斗场景也更频繁,基于此类场景在某部电影中出现的次数可以用来进行电影分类。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2.3 欧几里得距离(Euclidean Distance)

  • 欧式距离是最常见的距离度量,衡量的是多维空间中各个点之间的绝对距离,公式如下:

d i s t ( X , Y ) = ∑ i = 0 n ( X i − Y i ) 2 = ( X 1 − Y 1 ) 2 + ( X 2 − Y 2 ) 2 + ( X 3 − Y 3 ) 2 + … … + ( X i − Y i ) dist(X,Y) = \sqrt{\sum_{i=0}^{n}(X_i - Y_i)^2} = \sqrt{(X_1-Y_1)^2 + (X_2-Y_2)^2+(X_3-Y_3)^2+……+(X_i-Y_i)} dist(X,Y)=i=0n(XiYi)2 =(X1Y1)2+(X2Y2)2+(X3Y3)2++XiYi

2.4 计算过程图

  • 在这里插入图片描述

2.5 kNN近邻分类算法的原理

在这里插入图片描述

  • 从上图中我们可以看到,图中的数据集都有了自己的标签,一类是蓝色的正方形,一类是红色的三角形,那个绿色的圆形是我们待分类的数据

  • 如果K=3,那么离绿色点最近的有2个红色三角形和1个蓝色的正方形,这3个点投票,于是绿色的这个待分类点属于红色的三角形.

  • 如果K=5,那么离绿色点最近的有2个红色三角形和3个蓝色的正方形,这5个点投票,于是绿色的这个待分类点属于蓝色的正方形

  • 我们可以看到,KNN本质是基于一种数据统计的方法!其实很多机器学习算法也是基于数据统计的

  • 总结:KNN是一种基于记忆的学习(memory-based learning),也是基于实例的学习(instance-based learning),属于惰性学习(lazy learning)。即它没有明显的前期训练过程,而是程序开始运行时,把数据集加载到内存后,不需要进行训练,就可以开始分类了。

3. K值最优解

  • 3.1 原因:

    • k值过大,非相似数据被包含较多,造成噪声增加而导致分类结果的降低。

    • k值过小,得到的邻近数过少,会降低分类精度,同时也会放大噪声数据的干扰。

  • 3.2 方法:

    • k一般低于训练样本数的平方根,通常采用交叉检验来确定。
  • 3.3 KNN算法参数的筛选代码

  ### 导包,加载数据

import numpy as np

from sklearn.neighbors import KNeighborsClassifier

from sklearn import datasets

# model_selection:模型选择
# cross_val_score  cross:交叉,validation:验证(测试)
# 交叉验证
from sklearn.model_selection import cross_val_score

# 通过训练样本数的开平方对k值进行参考
X,y = datasets.load_iris(True)
X.shape[0]**0.5

结果是:12.24744871391589,所以k值的取值范围是1到13

应用cross_val_score筛选最合适的邻居数量

erros = []
for k in range(1,14):
    knn = KNeighborsClassifier(n_neighbors=k)
    score = cross_val_score(knn,X,y,scoring='accuracy',cv = 6).mean()
#     误差越小,说明k选择越合适,越好
    erros.append(1 - score)
    
import matplotlib.pyplot as plt
%matplotlib inline
# k = 11时,误差最小,说明k = 11对鸢尾花来说,最合适的k值
plt.plot(np.arange(1,14),erros)

在这里插入图片描述

通过上面代码所得图,可以看出当k = 11时,误差最小,k值最好

多参数组合使用cross_val_score筛选最合适的参数组合

result = {}
weights = ['distance','uniform']
for k in range(1,14):
    for w in weights:
        knn = KNeighborsClassifier(n_neighbors=k,weights=w)
        sm = cross_val_score(knn,X,y,scoring='accuracy',cv = 6).mean()
        result[w + str(k)] = sm
result
{'uniform1': 0.9591049382716049,
 'distance1': 0.9591049382716049,
 'uniform2': 0.9390432098765431,
 'distance2': 0.9591049382716049,
 'uniform3': 0.9660493827160493,
 'distance3': 0.9660493827160493,
 'uniform4': 0.9660493827160493,
 'distance4': 0.9660493827160493,
 'uniform5': 0.9660493827160493,
 'distance5': 0.9660493827160493,
 'uniform6': 0.9729938271604938,
 'distance6': 0.9729938271604938,
 'uniform7': 0.9729938271604938,
 'distance7': 0.9729938271604938,
 'uniform8': 0.9591049382716049,
 'distance8': 0.9729938271604938,
 'uniform9': 0.9660493827160493,
 'distance9': 0.9729938271604938,
 'uniform10': 0.9729938271604938,
 'distance10': 0.9729938271604938,
 'uniform11': 0.98070987654321,
 'distance11': 0.9799382716049383,
 'uniform12': 0.9737654320987654,
 'distance12': 0.9799382716049383,
 'uniform13': 0.9737654320987654,
 'distance13': 0.9729938271604938}

通过输出结果可以看出,当weights=uniform,且k=11时,误差最小,是k和weights的最优解

如果需要得到其他参数的最优解,方法同上

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

KNN算法优缺点、原理及参数最优解 的相关文章

随机推荐

  • 51单片机入学第三课——数码管静态与动态显示

    文章目录 数码管的应用 数码管显示的原理 静态与动态显示 静态显示 动态显示 锁存器工作原理 实践编程 静态显示 动态显示 总结 补充 数码管的应用 来自百度 数码管 也称作辉光管 是一种可以显示数字和其他信息的电子设备 玻璃管中包括一个金
  • elementui table 动态表头表格(根据后台返回显示动态数据)

    让后台返回的数据格式 tabledData tableNmae 姓名 tableCode name tableNmae 性别 tableCode Gender tableNmae a tableCode a tableNmae b tabl
  • 炒期权的资金门槛是多少 ?

    期权是一种合约 买方向卖方支付一定费用后有权利在特定的时间 以特定的价格买入或卖出一定数量的特定资产 卖方需履行相应义务 期权开户支持线上和零门槛开头 下文介绍炒期权的资金门槛是多少 本文来自 期权酱 一 期权一般投入多少钱 其实在期权市场
  • 分享20个高匿代理IP

    49 88 114 117 22001 60 169 62 244 25008 106 116 64 162 22024 42 177 70 145 22019 180 108 97 22 22014 27 157 129 62 29003
  • C#中String类型转换为Vector3类型

    俗话说的好 基础不牢地动山摇 本人今天做服务器和客户端通信 需要将服务器转发的String类型转换为Vector类型 做了半天才做好 我在想这不是最基础的内容吗 当时学基础这么学的 哈哈哈 接下来实现从String到Vector3类型的转换
  • nginx日志报错:No such file or directory

    2023 04 01 17 15 02 error 2832 2832 6 open usr local openresty nginx html api item 1001 failed 2 No such file or directo
  • [转]如何解决下载的CHM文件无法显…

    如何解决下载的CHM文件无法显示网页问题 问题症状 打开CHM文件 左边目录齐全 可右边边框里却是无法显示网页 解决方法 方法一 修改注册表 1 新建一个文本文件 2 添加如下内容 REGEDIT4 HKEY LOCAL MACHINE S
  • 使用jupyter notebook连接服务器中docker container

    服务器中 新起容器 docker run it p 服务器端口 8888 name 容器名 v 服务器地址 容器地址 如果用gpu这里加上 device IMAGE REPOSITORY IMAGE TAG 查看本地镜像 docker im
  • 51单片机——舵机的原理及应用

    一 舵机介绍 舵机是一种位置伺服的驱动器 适用那些需要角度不断变换并能够保持的控制系统 如果我们想要完成遥控转头风扇这么一个项目 那么转头的工作由舵机来实现就最好不过了 二 舵机的工作原理 标准的舵机有三条引线 分别是电源线Vcc 地线GN
  • leetcode算法面试题:对称二叉树、对链表进行插入排序、多数元素

    对称二叉树问题 给定一个二叉树 检查它是否是镜像对称的 例如 二叉树 1 2 2 3 4 4 3 是对称的 1 2 2 3 4 4 3 但是下面这个 1 2 2 null 3 null 3 则不是镜像对称的 1 2 2 3 3 参考答案 c
  • 视频质量诊断&&视频质量分析

    一 随着平安城市 大安防的发展 监控摄像机数量的不断增加 给监控系统的维护工作带来了新的挑战 如何及时了解前端视频设备的运行情况 发现故障并检测恶意遮挡与破坏的不法行为已成为视频监控系统运行的首要迫切问题 对于成千上万个监控摄像机 依靠人工
  • MySQL根据某一个或者多个字段查找重复数据,并且保留某字段值最大的记录

    问题场景 当系统没有处理好并发操作的情况下 操作人员同时操作一张表的情况下 数据库有可能被插入相同记录 这些会带来隐藏的bug 解决思路一 解决并发操作的冲突 解决思路二 对数据库 MySQL 某张表去重 首先确定你的业务是否允许重复 不允
  • gojs 实用高级用法

    本文介绍的是在使用 gojs 制作图的过程中 你可能会碰到的问题的一些解决方案 gojs 是一个非常强大的可视化关系的js库 1 取消更新动画 问题 更新数据的时候 会触发渲染 有渲染动画 用户体验不好 方案 初始数据绘制 有动画 更新数据
  • disabled_button 攻防世界

    1 第一步还是看题目 重要知识点 按钮按不下去 前端知识 例如下面的代码
  • 【基础语法篇】Java必备基础(思维导图+代码)

    文章目录 基本语法 初识JDK 输入与输出 条件与循环 一维数组与二维数组 函数及其他补充 Java常用类 Number Math类 Arrays类 String类 关于 和equals 其他类 Object 异常处理 常见异常 异常的处理
  • 邻接表无向图--- C++

    邻接表无向图的介绍 邻接表无向图是指通过邻接表表示的无向图 上面的图G1包含了 A B C D E F G 共7个顶点 而且包含了 A C A D A F B C C D E G F G 共7条边 上图右边的矩阵是G1在内存中的邻接表示意图
  • CesiumJS 中文学习手册

    1 Getting Started 入门 2 Developer Guides 开发人员指南 Creating Entities 创建实体 Imagery 图层 Terrain 地形 3D Models 3D 模型 Camera
  • 短视频矩阵系统:批量剪辑+矩阵分发+线索收集产品开发搭建

    短视频矩阵系统是一种综合性的短视频营销链路 通过在不同平台上传布 推广和转载短视频内容 以达到品牌宣传的效果 通过不同平台的内容进行组合 剪辑 形成全方位 多渠道的短视频推广网络链路 一 短视频矩阵系统搭建常见问题 1 抖去推的短视频AI矩
  • go grpc环境安装

    1 安装protoc编译器 protoc可执行文件用于编译 protocolbuf proto文件 和 protobuf 运行时 它是 C 写的 其可以将proto文件翻译为指定语言的代码 比较简单的安装方式是直接下载编译好的二进制文件 仓
  • KNN算法优缺点、原理及参数最优解

    文章目录 1 KNN算法简介 1 1 简述 1 2 优缺点 1 3 适用数据范围 2 工作原理 2 1 训练样本集 2 2 电影类别的KNN分析 如何进行电影分类 在这里插入图片描述 2 3 欧几里得距离 Euclidean Distanc