算法名称: k近邻算法 (kNN: k-Nearest Neighbor)

问题提出: 根据已有对象的归类数据,给新对象(事物)归类。

核心思想:

  1. 将对象分解为特征,因为对象的特征决定了事对象的分类。
  2. 度量每个特征的程度,将其数字化。
  3. 所有特征值构成元组,作为该对象的坐标。
  4. 计算待检测对象和所有已知对象的距离,选择距离最接近的k个已知对象 (k近邻中的k来源于此)。
  5. 这k个对象中出现次数最多的分类就是待检测对象的分类。

重要前提: 需要有一批已经正确归类了的对象存在。也就是通常说的训练数据。

重要优势:

  1. 精度高,
  2. 对训练数据中的异常值不敏感

重大缺陷:

  1. 计算量大,由于每次的运算结果都对以后的判定无帮助,所以每次判定都需要利用所有的数据重新计算。
  2. 存储量大,由于每次都要重新计算,所有需要一直带着训练数据。

现实范例: 给电影分类。

算法过程:

  1. 特征化:为简化问题,假设电影只有两个分类:爱情片和动作片。 那么我们可以将电影分解为两个特征:接吻和打斗.
  2. 特征数字化: 统计每部电影,包括待检测的电影,中接吻和打斗的次数,假设分别为x和y.
  3. 坐标化: 每部电影的接吻次数和达到次数就是该电影的坐标(x,y)
  4. 计算距离: dist=sqrt((x0-x1)**2+(y0-y1)**2)
  5. k近邻:选dist最小的k个
  6. 如果这k部电影中爱情片多,那么待检测电影就是爱情片,否则为动作片。

扩展范例: 手写识别

列出这个范例的原因是,乍一看,手写识别和对象归类没有关系。但是实际上是有关系的。为了简化问题,我们把范围缩小一点,变成手写识别数字。通过回答下面几个问题,就能知道如何套用kNN算法了。

  1. 已知对象和待检测对象是什么? 回答: 已知对象:系统中存储的预先采集到的手写输入内容,待检测对象:用户的每一次手写输入内容。
  2. 输入内容具体是什么? 如何特征化? 回答: 将输入面看做一个二维矩阵,笔迹扫过的地方是1,其它地方是0。这个矩阵得有大小,可以自己确定,比如32*64, 64*128等. 特征就是这个矩阵中的所有位置。也就是说,这个矩阵包含多少个点,就算有多少个特征。
  3. 每个特征的值是什么? 既然特征表示的是矩阵中特定位置的点,那么特征的值就是这个位置的矩阵元素,为0或者为1
  4. 如何构成坐标? 回答:将矩阵所有行按顺序连接起来,构成一个巨长的行,这就是对象的坐标

扩展思维:

  1. 特征权重化,算法的核心过程,没有考虑特征的重要程度。

更多信息,请参考:https://en.wikipedia.org/wiki/K-nearest_neighbors_algorithm

机器学习随笔01 - k近邻算法的更多相关文章

  1. 02机器学习实战之K近邻算法

    第2章 k-近邻算法 KNN 概述 k-近邻(kNN, k-NearestNeighbor)算法是一种基本分类与回归方法,我们这里只讨论分类问题中的 k-近邻算法. 一句话总结:近朱者赤近墨者黑! k ...

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

    本文来自同步博客. P.S. 不知道怎么显示数学公式以及排版文章.所以如果觉得文章下面格式乱的话请自行跳转到上述链接.后续我将不再对数学公式进行截图,毕竟行内公式截图的话排版会很乱.看原博客地址会有更 ...

  3. 机器学习实战笔记--k近邻算法

    #encoding:utf-8 from numpy import * import operator import matplotlib import matplotlib.pyplot as pl ...

  4. 机器学习 Python实践-K近邻算法

    机器学习K近邻算法的实现主要是参考<机器学习实战>这本书. 一.K近邻(KNN)算法 K最近邻(k-Nearest Neighbour,KNN)分类算法,理解的思路是:如果一个样本在特征空 ...

  5. 《机器学习实战》-k近邻算法

    目录 K-近邻算法 k-近邻算法概述 解析和导入数据 使用 Python 导入数据 实施 kNN 分类算法 测试分类器 使用 k-近邻算法改进约会网站的配对效果 收集数据 准备数据:使用 Python ...

  6. 机器学习:1.K近邻算法

    1.简单案例:预测男女,根据身高,体重,鞋码 import numpy as np import matplotlib import sklearn from skleran.neighbors im ...

  7. 《机器学习实战》——K近邻算法

    三要素:距离度量.k值选择.分类决策 原理: (1) 输入点A,输入已知分类的数据集data (2) 求A与数据集中每个点的距离,归一化,并排序,选择距离最近的前K个点 (3) K个点进行投票,票数最 ...

  8. GridSearchCV网格搜索得到最佳超参数, 在K近邻算法中的应用

    最近在学习机器学习中的K近邻算法, KNeighborsClassifier 看似简单实则里面有很多的参数配置, 这些参数直接影响到预测的准确率. 很自然的问题就是如何找到最优参数配置? 这就需要用到 ...

  9. 机器学习之K近邻算法(KNN)

    机器学习之K近邻算法(KNN) 标签: python 算法 KNN 机械学习 苛求真理的欲望让我想要了解算法的本质,于是我开始了机械学习的算法之旅 from numpy import * import ...

随机推荐

  1. python3爬虫入门程序

    适用于有且只有一点Python3和网页基础的朋友,大牛&路人请绕道 (本文很多废话,第一次在网上长篇大论,所以激动的停不下来,如果有大佬路过,也希望不要直接绕道,烦请指点一二) 感谢博客园给了 ...

  2. windows注册表解析说明

    https://www.cnblogs.com/wfq9330/p/9176654.html

  3. python3 不知文件编码情况下打开文件代码记录

    import chardet path='test.txt' bytes = min(100, os.path.getsize(path)) raw = open(path, 'rb').read(b ...

  4. mybatis的Selective接口和普通接口的区别

    举例说明: updateByPrimaryKeySelective会对字段进行判断再更新(如果为Null就忽略更新),如果你只想更新某一字段,可以用这个方法. updateByPrimaryKey对你 ...

  5. win7频繁提示资源管理器已停止工作解决办法

    方法一,重新启动资源管理器,右键点击桌面下方的“任务栏”空白区,在弹出的菜单栏中选择“任务管理器”.   进入任务管理器,点击上方的“文件”,选择新建任务.   在弹出的对话框中,输入explorer ...

  6. SpringBoot +Pom.xml工程资源文件配置

    继承spring-boot-starter-parent 要成为一个spring boot项目,首先就必须在pom.xml中继承spring-boot-starter-parent,同时指定其版本 & ...

  7. Github(远程仓库) 2

    远程仓库之前就添加好了 今天弄了简单的查看远程库,提取远程库,在线修改以及本地更新修改,推送到远程仓库,删除远程仓库,参考http://www.runoob.com/git/git-remote-re ...

  8. 【笔记】计算机原理,网络,Linux操作系统

    一,计算机原理 1,化繁为简的思想,产生二进制,产生把所有计算归结为加法运算 二,网络 1,分层思想,产生ISO七层协议,商用了TCP/IP的五层协议 三,Linux操作系统 1,分层思想,硬件-&g ...

  9. Python+Selenium学习--下载文件

    场景 webdriver 允许我们设置默认的文件下载路径.也就是说文件会自动下载并且存在设置的那个目录中,下面以firefox及chrome为例 代码 Firefox下载 为了让Firefox浏览器能 ...

  10. Willem, Chtholly and Seniorious

    Willem, Chtholly and Seniorious https://codeforces.com/contest/897/problem/E time limit per test 2 s ...