机器学习-KNN算法
2024-09-29 11:29:53
原理
KNN算法,又叫K近邻算法。就是在训练集中数据和标签已知的情况下,输入测试数据,将测试数据的特征与训练集中对应的特征进行相互比较,找到训练集中与之最为相似的前K个数据,则该测试数据对应的类别就是K个数据中出现次数最多的那个分类,其算法的描述为:
- 1)计算测试数据与各个训练数据之间的距离;
- 2)按照距离的递增关系进行排序;
- 3)选取距离最小的K个点;
- 4)确定前K个点所在类别的出现频率;
- 5)返回前K个点中出现频率最高的类别作为测试数据的预测分类。
三要素:
- k值的选择
- 距离的度量(常见的距离度量有欧式距离,曼哈顿距离等)
- 分类决策规则 (多数表决规则)
k值的选择
- k值越小表明模型越复杂,更加容易过拟合
- 但是k值越大,模型越简单,如果k=N的时候就表明无论什么点都是训练集中类别最多的那个类
所以一般k会取一个较小的值,然后用过交叉验证来确定
这里所谓的交叉验证就是将样本划分一部分出来为预测样本,比如95%训练,5%预测,然后k分别取1,2,3,4,5之类的,进行预测,计算最后的分类误差,选择误差最小的k
KNN的回归
在找到最近的k个实例之后,可以计算这k个实例的平均值作为预测值。或者还可以给这k个实例添加一个权重再求平均值,这个权重与度量距离成反比(越近权重越大)。
优缺点:
KNN算法的优点:
- 思想简单,理论成熟,既可以用来做分类也可以用来做回归;
- 可用于非线性分类;
- 训练时间复杂度为O(n);
- 准确度高,对数据没有假设,对outlier不敏感;
缺点:
- 计算量大;
- 样本不平衡问题(即有些类别的样本数量很多,而其它样本的数量很少);
- 需要大量的内存;
最新文章
- 使用Navicat Preminum时,发现的几个好用的功能
- 正则表达式的JS验证
- Python之路-python(html、css)
- 用CSS text-transform转换字母大小写
- Linux文件和目录
- [转载]Robotium API 翻译(三)——判断测试结果的方法assert、is、search
- 将Python脚本封装成exe可执行文件 转
- 怎样将某一类型标识为适合绑定到 System.Web.UI.WebControls.ObjectDataSource 对象的对象
- LR_问题_如何将场景中的用户设置为百分比形式
- 【Android 开源】:最火的Android开源项目 第02期
- OC多文件开发介绍
- Python 直接赋值、浅拷贝和深度拷贝全解析
- 记一次Debug过程
- C#正则Groups高级使用方法
- Anaconda安装python(idea兼容)
- Spring Cloud 入门教程(十):和RabbitMQ的整合 -- 消息总线Spring Cloud Netflix Bus
- Study 2 —— 格式化输出
- 使用 node 创建代码服务器
- 安装.NET Framework返回1603错误的解决办法
- java 框架 面试 2
热门文章
- readLine() 和 ";\r";,";\n"; 问题
- 17、docker多机网络通信overlay
- 测试与发布(Alpha版本)——小谷围驻广东某工业719电竞大队
- 解决MS SQL Server 使用HashBytes函数乱码问题
- 【cocos2d-x 3.0-Mac配置篇】
- Kotlin 基本语法
- Android------------fragment数据传递
- 《Python黑帽子:黑客与渗透测试编程之道》 Web攻击
- Mac 切换到行首和行末的方法
- Smarty的原理_面试