原理

KNN算法,又叫K近邻算法。就是在训练集中数据和标签已知的情况下,输入测试数据,将测试数据的特征与训练集中对应的特征进行相互比较,找到训练集中与之最为相似的前K个数据,则该测试数据对应的类别就是K个数据中出现次数最多的那个分类,其算法的描述为:

  • 1)计算测试数据与各个训练数据之间的距离;
  • 2)按照距离的递增关系进行排序;
  • 3)选取距离最小的K个点;
  • 4)确定前K个点所在类别的出现频率;
  • 5)返回前K个点中出现频率最高的类别作为测试数据的预测分类。

三要素:

  1. k值的选择
  2. 距离的度量(常见的距离度量有欧式距离,曼哈顿距离等)
  3. 分类决策规则 (多数表决规则)

k值的选择

  1. k值越小表明模型越复杂,更加容易过拟合
  2. 但是k值越大,模型越简单,如果k=N的时候就表明无论什么点都是训练集中类别最多的那个类

所以一般k会取一个较小的值,然后用过交叉验证来确定
这里所谓的交叉验证就是将样本划分一部分出来为预测样本,比如95%训练,5%预测,然后k分别取1,2,3,4,5之类的,进行预测,计算最后的分类误差,选择误差最小的k

KNN的回归

在找到最近的k个实例之后,可以计算这k个实例的平均值作为预测值。或者还可以给这k个实例添加一个权重再求平均值,这个权重与度量距离成反比(越近权重越大)。

优缺点:

KNN算法的优点:

  1. 思想简单,理论成熟,既可以用来做分类也可以用来做回归;
  2. 可用于非线性分类;
  3. 训练时间复杂度为O(n);
  4. 准确度高,对数据没有假设,对outlier不敏感;

缺点:

    1. 计算量大;
    2. 样本不平衡问题(即有些类别的样本数量很多,而其它样本的数量很少);
    3. 需要大量的内存;

最新文章

  1. 使用Navicat Preminum时,发现的几个好用的功能
  2. 正则表达式的JS验证
  3. Python之路-python(html、css)
  4. 用CSS text-transform转换字母大小写
  5. Linux文件和目录
  6. [转载]Robotium API 翻译(三)——判断测试结果的方法assert、is、search
  7. 将Python脚本封装成exe可执行文件 转
  8. 怎样将某一类型标识为适合绑定到 System.Web.UI.WebControls.ObjectDataSource 对象的对象
  9. LR_问题_如何将场景中的用户设置为百分比形式
  10. 【Android 开源】:最火的Android开源项目 第02期
  11. OC多文件开发介绍
  12. Python 直接赋值、浅拷贝和深度拷贝全解析
  13. 记一次Debug过程
  14. C#正则Groups高级使用方法
  15. Anaconda安装python(idea兼容)
  16. Spring Cloud 入门教程(十):和RabbitMQ的整合 -- 消息总线Spring Cloud Netflix Bus
  17. Study 2 —— 格式化输出
  18. 使用 node 创建代码服务器
  19. 安装.NET Framework返回1603错误的解决办法
  20. java 框架 面试 2

热门文章

  1. readLine() 和 "\r","\n" 问题
  2. 17、docker多机网络通信overlay
  3. 测试与发布(Alpha版本)——小谷围驻广东某工业719电竞大队
  4. 解决MS SQL Server 使用HashBytes函数乱码问题
  5. 【cocos2d-x 3.0-Mac配置篇】
  6. Kotlin 基本语法
  7. Android------------fragment数据传递
  8. 《Python黑帽子:黑客与渗透测试编程之道》 Web攻击
  9. Mac 切换到行首和行末的方法
  10. Smarty的原理_面试