zoukankan      html  css  js  c++  java
  • 机器学习随笔01

    算法名称: 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


    文章以"现状"提供,期望但不保证内容的正确性.转载需在首行提供原文之链接.

  • 相关阅读:
    [USACO 2012 Feb B]Moo
    [Atcoder ARC124] XOR Matching 2-小思维 | 暴力
    loj数列分块入门
    2019牛客暑期多校2-Partition problem深搜
    Codeforces 1554C
    [USACO 2012 Feb G]Cow Coupons----贪心&带悔(看完稳AC)
    Codeforces 220B-Little Elephant and Array-扫描线 & 树状数组
    [AtCoder ARC098] Donation| 建图 | 树型dp
    关于幂等性以及怎么实现幂等性
    【OOM】解决思路
  • 原文地址:https://www.cnblogs.com/zhuliangxiong/p/4663579.html
Copyright © 2011-2022 走看看