数据挖掘-knn

KNN算法

KNN算法是机器学习里较为简单和初级的算法,也称为最近邻算法。可以算的上是学习数据挖掘的入门算法,在大赛中,该算法一般用来作为插值来用,一般不会直接使用该算法来进行预测。
众所周知,对于KNN算法可以这样理解,该算法是基于一种现有的数据分布来作为判别依据,当一条数据进来时,通过之前确定的参数k去统计,距离这个点最近的k个点的类别,选择次数最多的类别作为新数据的类别。
对于这种算法,下述图片能很好的说明:

在上述的图片中,A、B、C、D为已有数据的类型,当新数据x进入时,如果用户将k定为4,那么将统计最近4个点的类别,即蓝圈内的类别,出现次数最高的是A,那么新数据x的类别将被判定为A。如果用户将k定为8,那么将统计最近8个点的类别,即红圈内的类别,出现次数最高的是B,那么新数据x的类别将被判定为B。

所以对于k的选取是非常重要的,而根据实际的数据集,选取的k是不一样的。从某种意义来说,k的值不是越大越好,应该取某个范围内,建议k取值为2~10。
从另一个方面来说,如何衡量距离当前点最近的标准也是非常重要的。因为距离的计算公式将直接决定哪些点是最近的。距离的公式有很大,比如曼哈顿距离(绝对值之差)、平方距离、三次方距离、几何平均距离等。这些距离本质上是1-范数、2-范数、3-范数、p-范数。一般比赛采用曼哈顿距离和平方距离较多,因为计算量较小且较为稳定。

在这个基础上,我们发现其实对于新数据类别的判定是一种基于策略的结果。即k的选取和距离公式会最终影响新数据的类别,一般会把这两者进行结合。现在从更高的角度去看这个问题,统计次数是一种简单的计数,是把最近的k个点对于新数据的影响一视同仁。而如果我们对于更近的点赋予更高的权重,更远的点赋予更小的权重,从某种意义上来说,可以更为准确的决定新数据的类别。在python自带的knn方法中,就有这个参数,用户可以把这个参数设置为distance,即基于距离的倒数去决定该权重。距离越近的权重越大,距离越远的权重越小。这也是比较合乎逻辑的优化方法。
KNN方法本质上来说是不需要进行训练的,即无法通过训练数据直接得到参数,只能凭借数据的实际情况去决定k值等参数。并且该方法计算量非常大,当数据本身角度且特征非常多时,计算量很大,得到的结果往往会被数据本身所影响。下面从两个角度说明:
(1)数据量很大,且每个特征的值范围差距很大。
比如当前班里40人,新来一个学生,不知道对方性别。现在用全班同学的身高、体重去预测新学生的性别,那么由于体重的数值和身高的范围不在一个数量级,很容易会导致体重大的人影响最终的判断。
在这种情况下,可以对数据进行标准化,将数据转化为同一个范围的数值,再使用KNN算法会得到较为信服的结果。
(2)数据维度很高
比如当前班里40人,新来一个学生,不知道对方性别。现在用全班同学的身高、体重、脚长、臂展、胸围、腰围、手指长度去预测新学生的性别,那么由于数据的维度较高,涉及的变量较多,如果直接进行KNN预测,那么会导致预测的结果不准确。
在这种情况下,可以对变量进行筛选或降维,可以基于用户经验对变量进行筛选或使用主成分分析进行数据降维,再使用KNN算法会得到较好的结果。

总的来说,KNN算法是比较简单的方法,并且对于数据的要求较高,如果数据的维度很高、数据量很大、数据类别的容量不平衡等情况下,不建议直接使用KNN算法。并且直接通过距离对各个变量一视同仁的时候,很难找出究竟是哪一个变量较为显著的影响了最终的类别。因此在写论文或比赛时,可以把这种方法当作一种简单的尝试,但不能作为最终的直接解决方法,尽量结合其他机器学习算法一起构造模型解决问题。

泛统计理论初探——KNN相关推荐

  1. 泛统计理论初探——初探Gibbs采样

    统计学习-Gibbs采样简介 初探Gibbs采样方法     在上一篇文章中,我们介绍了MCMC抽样和MH抽样的方法,在本次文章中将会介绍Gibbs抽样方法,这种方法其实是基于MCMC抽样的一种优化方 ...

  2. 泛统计理论初探——初探MCMC采样和MH采样

    统计学习-MCMC采样与MH采样简介 初探MCMC采样方法和MH采样方法     在之前介绍的文章中,我们介绍了基本的采样方法.在了解简单的采样方法后,本次文章将会介绍MCMC采样方法与优化的MH采样 ...

  3. 泛统计理论初探——余弦距离简介

    统计学习-余弦距离简介 介绍余弦距离 在衡量变量之间距离的时候,我们发现可以用欧式距离.绝对值距离,本文我们将来介绍另一种距离,即余弦距离.余弦距离在实际问题中经常用到,由于它的计算方法是把各个维度的 ...

  4. 泛统计理论初探——孤立森林简介

    数据挖掘-孤立森林方法 孤立森林算法简介 孤立森林是一种用于异常检测的算法,本文将对该算法进行简介,包括算法的理念.步骤.以及使用场景.常见的异常检测方法主要是统计学课本上学到一些方法,比如六西格玛方 ...

  5. 【StatLearn】统计学习中knn算法实验(2)

    接着统计学习中knn算法实验(1)的内容 Problem: Explore the data before classification using summary statistics orvisu ...

  6. UA MATH567 高维统计 专题0 为什么需要高维统计理论?——高维统计理论的常用假设

    UA MATH567 高维统计 专题0 为什么需要高维统计理论?--高维统计理论的常用假设 延续前三讲对线性判别分析的讨论,在高维时,根据中心极限定理 n(Xˉ−μ)→dN(0,Id)\sqrt{n} ...

  7. UA MATH567 高维统计 专题0 为什么需要高维统计理论?——理解稀疏向量与hard-threshold

    UA MATH567 高维统计 专题0 为什么需要高维统计理论?--理解稀疏向量与hard-threshold 稀疏向量的soft-threshold与hard-threshold近似 引入hard- ...

  8. UA MATH567 高维统计 专题0 为什么需要高维统计理论?——协方差估计的高维效应与Marcenko-Pastur规则

    UA MATH567 高维统计 专题0 为什么需要高维统计理论?--协方差估计的高维效应与Marcenko-Pastur规则 上一讲我们介绍了在实验中,线性判别分析的判别误差会随着维度的上升而上升,而 ...

  9. UA MATH567 高维统计 专题0 为什么需要高维统计理论?——以线性判别分析为例

    UA MATH567 高维统计 专题0 为什么需要高维统计理论?--以线性判别分析为例 线性判别分析基础 理论 算法 线性判别分析基础 理论 我们回顾一下二元假设检验问题,它的目标是判断某一个obse ...

最新文章

  1. 微信9年:张小龙指明方向,微信AI全面开放NLP能力
  2. 实例 | 利用犯罪记录聚类和分类暴力行为(附步骤解析)
  3. Android Crash战斗日记(一、原理篇)
  4. 他读博期间连发3篇Science,28岁任武大教授后再发Nature!
  5. 用机器指令和汇编指令编程(修改版)
  6. python 3.5.2页面_Python 3.5.2实现websocket服务端
  7. 【Python3网络爬虫开发实战】 3.2-使用requests
  8. 苹果iPhone系列成交额5秒破亿;荣耀回应:没有安卓授权是假消息;魅族宣布将接入鸿蒙系统|极客头条...
  9. 重磅!Google ARCore 和京东 AR 联合举办消费应用创新大赛
  10. 那些年,我们一起踩过的 “Android 坑”
  11. Window笔记本触摸板手势大全
  12. 解决NIVIDIA控制面板开启不了的问题
  13. 公链Sui Layer1网络
  14. .NET Core容器化(Docker)
  15. Elasticsearch+cerebro部署文档
  16. linux的normal模式,解决grub rescue问题时发现grub/目录下没有文件normal.mod怎么办?...
  17. 计算机退出安全模式,电脑安全模式的进入与退出的方法
  18. Vue路由懒加载(resolve),嵌套路由 3
  19. python:文件读取和存储
  20. 用python画玫瑰花的简笔画-只用C++和Python,让你的简笔画实时动起来!

热门文章

  1. mysql查询这一周数据库_mysql如何查询当前时间是星期几?
  2. jquery滑入滑出
  3. fullpage.js 滑入滑出滚屏动画, 纯css方式。利用css权重,无需js操作dom
  4. 【深度学习实验】第二次:Python财政收入影响因素分析及预测
  5. 计算机网络在结构上可分为什么不同,计算机等级考试三级网络精选习题及详细解答(一)...
  6. JAVA这个符号 是什么
  7. 0基础学习VR全景平台篇第46篇:底部菜单- 【开场地图】与【高清矩阵】的对比
  8. 如何扩展Web应用程序
  9. java object 转实体类_JAVA怎么把object怎么转换成实体类
  10. 在Mac上打pxl的安装包