基本概念

k近邻法(k-nearest neighbor, k-NN)是1967年由Cover T和Hart P提出的一种基本分类与回归方法。

基本概念如下:存在一个样本数据集合,所有特征属性已知,并且样本集中每个对象都已知所属分类。对不知道分类的待测对象,将待测对象的每个特征属性与样本集中数据对应的特征属性进行比较,然后算法提取样本最相似对象(最近邻)的分类标签。一般来说,我们只选择样本数据集中前k个最相似的对象数据,这就是k-近邻算法中k的出处,通常k是不大于20的整数。最后根据这k个数据的特征和属性,判断待测数据的分类

即:一个样本与数据集中的k个样本最相似, 如果这k个样本中的大多数属于某一个类别, 则该样本也属于这个类别。

距离函数

曼哈顿距离(L1范数)

曼哈顿距离也叫”曼哈顿街区距离”。想象你在曼哈顿街道上,从一个十字路口开车到另一个十字路口,驾驶距离就是这个“曼哈顿距离”。

  • 二维平面上两点a(x1,y1),b(x2,y2)a(x_1,y_1),b(x_2,y_2)a(x1​,y1​),b(x2​,y2​)之间的曼哈顿距离公式:
    dab=∣x1−x2∣+∣y1−y2∣d_{a b}=\left|x_{1}-x_{2}\right|+\left|y_{1}-y_{2}\right| dab​=∣x1​−x2​∣+∣y1​−y2​∣
  • n维空间上两点a(x1,x2...xn),b(y1,y2...yn)a(x_1,x_2 ... x_n), b(y_1,y_2 ... y_n)a(x1​,x2​...xn​),b(y1​,y2​...yn​)的曼哈顿距离公式:
    dab=∣x1−y1∣+∣x2−y2∣+…..+∣xn−yn∣d_{a b}=\left|x_{1}-y_{1}\right|+\left|x_{2}-y_{2}\right|+\ldots . .+\left|x_{n}-y_{n}\right| dab​=∣x1​−y1​∣+∣x2​−y2​∣+…..+∣xn​−yn​∣

欧氏距离(L2范数)

  • 二维平面上两点a(x1,y1),b(x2,y2)a(x_1,y_1),b(x_2,y_2)a(x1​,y1​),b(x2​,y2​)之间的欧氏距离公式:
    dab=(x1−x2)2+(y1−y2)2d_{a b}=\sqrt{\left(x_{1}-x_{2}\right)^{2}+\left(y_{1}-y_{2}\right)^{2}} dab​=(x1​−x2​)2+(y1​−y2​)2​

  • n维空间上两点a(x1,x2...xn),b(y1,y2...yn)a(x_1,x_2 ... x_n), b(y_1,y_2 ... y_n)a(x1​,x2​...xn​),b(y1​,y2​...yn​)的欧氏距离公式:
    dab=(x1−y1)2+(x2−y2)2+…+(xn−yn)2d_{a b}=\sqrt{\left(x_{1}-y_{1}\right)^{2}+\left(x_{2}-y_{2}\right)^{2}+\ldots+\left(x_{n}-y_{n}\right)^{2}} dab​=(x1​−y1​)2+(x2​−y2​)2+…+(xn​−yn​)2​

切比雪夫距离(∞\infin∞范数)

  • 二维平面上两点a(x1,y1),b(x2,y2)a(x_1,y_1),b(x_2,y_2)a(x1​,y1​),b(x2​,y2​)之间的切比雪夫距离公式:
    dab=max⁡(∣x1−x2∣,∣y1−y2∣)d_{a b}=\max \left(\left|x_{1}-x_{2}\right|,\left|y_{1}-y_{2}\right|\right) dab​=max(∣x1​−x2​∣,∣y1​−y2​∣)

  • n维空间上两点a(x1,x2...xn),b(y1,y2...yn)a(x_1,x_2 ... x_n), b(y_1,y_2 ... y_n)a(x1​,x2​...xn​),b(y1​,y2​...yn​)的切比雪夫距离公式:
    dab=max⁡(∣x1−y1∣,∣x2−y2∣,…∣xn−yn∣)d_{a b}=\max \left(\left|x_{1}-y_{1}\right|,\left|x_{2}-y_{2}\right|, \ldots\left|x_{n}-y_{n}\right|\right) dab​=max(∣x1​−y1​∣,∣x2​−y2​∣,…∣xn​−yn​∣)

夹角余弦

  • 二维平面上两点a(x1,y1),b(x2,y2)a(x_1,y_1),b(x_2,y_2)a(x1​,y1​),b(x2​,y2​)之间的夹角余弦公式:
    cos⁡Θ=x1∗x2+y1∗y2x12+y12∗x22+y22\cos \Theta=\frac{x_{1} * x_{2}+y_{1} * y_{2}}{\sqrt{x_{1}^{2}+y_{1}^{2}} * \sqrt{x_{2}^{2}+y_{2}^{2}}} cosΘ=x12​+y12​​∗x22​+y22​​x1​∗x2​+y1​∗y2​​

  • n维空间上两点a(x1,x2...xn),b(y1,y2...yn)a(x_1,x_2 ... x_n), b(y_1,y_2 ... y_n)a(x1​,x2​...xn​),b(y1​,y2​...yn​)的夹角余弦公式:
    cos⁡Θ=x1∗y1+x2∗y2+…+xn∗ynx12+x22+…+xn2∗y12+y22+…+yn2\cos \Theta=\frac{x_{1} * y_{1}+x_{2} * y_{2}+\ldots+x_{n} * y_{n}}{\sqrt{x_{1}^{2}+x_{2}^{2}+\ldots+x_{n}^{2}} * \sqrt{y_{1}^{2}+y_{2}^{2}+\ldots+y_{n}^{2}}} cosΘ=x12​+x22​+…+xn2​​∗y12​+y22​+…+yn2​​x1​∗y1​+x2​∗y2​+…+xn​∗yn​​

KD-Tree

由于KNN算法需要计算测试样本和训练样本中最近的K个样本,线性搜索的时间成本过大。因此,常用的搜索方法是KD-Tree,其基本原理类似二分搜索树(BST),只不过特征维度更高。示意图如下:

细节这里不讲,可以参考文献[1][2]。

sklearn中提供了KD-Tree的算法。

优缺点

优点

  • 简单好用,容易理解,精度高,理论成熟,既可以用来做分类也可以用来做回归;
  • 可用于非线性分类
  • 可用于数值型数据和离散型数据(既可以用来估值,又可以用来分类)
  • 训练时间复杂度为O(n);无数据输入假定;
  • 对异常值不敏感。
  • 准确度高,对数据没有假设,对outlier不敏感;

缺点

  • 计算复杂性高;空间复杂性高;需要大量的内存
  • 样本不平衡问题(即有些类别的样本数量很多,而其它样本的数量很少);
  • 一般数值很大的时候不用这个,计算量太大。但是单个样本又不能太少,否则容易发生误分。
  • 最大的缺点是无法给出数据的内在含义。

思考

参考文献

  1. KD Tree的原理及Python实现
  2. 详解KDTree
  3. 机器学习之KNN(k近邻)算法详解

机器学习基础:K近邻算法(Machine Learning Fundamentals: KNN)相关推荐

  1. 机器学习算法基础——k近邻算法

    23.k-近邻算法以及案例预测入住位置 24.K-近邻算法案例 分类算法-k近邻算法(KNN) 定义:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本 ...

  2. 机器学习:K近邻算法

    一.K-近邻算法简介 1 什么是K-近邻算法 根据你的"邻居"来推断出你的类别 1.1 K-近邻算法(KNN)概念 K Nearest Neighbor算法又叫KNN算法,这个算法 ...

  3. 机器学习:k近邻算法(KNN)介绍

    k近邻算法是一种最简单最经典的机器学习算法之一.该算法的原理为:当对测试样本进行分类时,首先通过扫描训练样本集,找到与该测试样本最相似的k个训练样本,根据这个样本的类别进行投票确定测试样本的类别.也可 ...

  4. 机器学习之K近邻算法原理+应用实例

    1. 基本原理 K最近邻(K-Nearest Neighbor,KNN)分类算法是最简单的机器学习算法之一,其基本思路与"近朱者赤,近墨者黑"的原理类似,当对未分类样本进行分类时, ...

  5. 机器学习:K近邻算法(K-NN)

    K近邻(K-Nearest Neighbor, KNN)是一种最经典和最简单的有监督学习方法之一,它非常有效而且易于掌握. 1 K近邻算法概述 一个样本与数据集中的k个样本最相似, 如果这k个样本中的 ...

  6. C++实现的简单k近邻算法(K-Nearest-Neighbour,K-NN)

    C++实现的简单的K近邻算法(K-Nearest Neighbor,K-NN) 前一段时间学习了K近邻算法,对K近邻算法有了一个初步的了解,也存在一定的问题,下面我来简单介绍一下K近邻算法.本博客将从 ...

  7. 机器学习--从K近邻算法、距离度量谈到KD树、SIFT+BBF算法

    引言 最近在面试中,除了基础 &  算法 & 项目之外,经常被问到或被要求介绍和描述下自己所知道的几种分类或聚类算法(当然,这完全不代表你将来的面试中会遇到此类问题,只是因为我的简历上 ...

  8. 机器学习之k近邻算法

    本文的代码基于书本<机器学习实战> 概念 k-近邻算法采用测量不同特征值之间距离的方法进行分类.工作原理是:存在一个样本数据集合,称作训练样本集,样本中每个数据都存在标签.输入没有标签的新 ...

  9. 【机器学习】K近邻算法(K-NearestNeighbors , KNN)详解 + Java代码实现

    文章目录 一.KNN 基本介绍 二.KNN 核心思想 三.KNN 算法流程 四.KNN 优缺点 五.Java 代码实现 KNN 六.KNN 改进策略 一.KNN 基本介绍 邻近算法,或者说K最邻近(K ...

  10. python机器学习---1. K近邻算法

    机器学习的方法是基于数据产生的"模型" (model) 的算法,也称"学习算法" (learning algorithm).包括有监督学习(supervised ...

最新文章

  1. 举个例子,如何用GCN图卷积神经网络实现摔倒监测?
  2. 【oracle】查看数据库最近执行了哪些sql语句
  3. CABasicAnimation fillMode和removedOnCompletion
  4. bzoj1231 [Usaco2008 Nov]mixup2 混乱的奶牛——状压DP
  5. hdu 5023 线段树染色问题
  6. Leetcode 931.下降路径最小和
  7. 步步为营 .NET三层架构解析 三、SQLHelper设计
  8. Utrack声卡和机架包的调试
  9. 软件性能分析与优化详解
  10. c语言字符串把小写转换大写字母,c语言将字符串中的小写字母转换成大写字母...
  11. 工商银行近20年实时大数据平台建设历程
  12. 2008年IT行业10大热门职业调查结果出炉
  13. android studio Statistic插件不显示
  14. 父子id mysql,一道关于数据库(经典父子级 ID 关联)更新题
  15. Python 在线编译器简单实现
  16. Android学习日记(yzy):通过自定义View实现新手指导功能(蒙板效果)
  17. 广州互联网公司面试地图
  18. 数据可视化:利用Python和Echarts制作“用户消费行为分析”可视化大屏
  19. EXCL模板报盘数据导入
  20. jQuery之图片显示篇A

热门文章

  1. No module named MYSQLdb 问题解决
  2. 正则化与数据先验分布的关系
  3. 【转】7个顶级心理预言
  4. Go语言学习之8 goroutine详解、定时器与单元测试
  5. 总结-变量命名变量提升运算符判断函数数组对象数据类型
  6. 多线程编程核心技术日记
  7. 原生JavaScript事件详解
  8. 程序员求职之道(《程序员面试笔试宝典》)之民间的企业排名的可信度到底有多大?...
  9. Linux的10个经典彩蛋
  10. 文件系统[HDU-1413]