(五) K-Nearest Neighbor (临近取样,KNN算法)

  1. 综述
  • 1.1 Cover和Hart在1968年提出了最初的邻近算法
  • 1.2 分类(classification)算法
  • 1.3 归属于输入基于实例的学习(instance-based learning), 懒惰学习(lazy learning)。在处理训练集的时候,我们并没有建任何的模型,而是对于一个未知的实例,我们开始归类的时候,我们才来看,根据它和我们已知类型的比较,来给他归类,也就是说,在开始并不建什么广泛的模型,而是在我们要进行测试,要对测试集的每一个数进行归类的时候,我们才具体的比较他和训练集之间的关系,给他及时的进行分类,这就是所谓的懒惰学习
    1. 归类出动作片还是爱情片:
      这里写图片描述
      2.未知电影属于什么类型?
      这里写图片描述
    2. 算法详述

步骤:

1.为了判断未知实例的类别,以所有已知类别的实例作为参照
2.选择参数K个已知实例(最近实例的个数)
3.计算未知实例与所有已知实例的距离
4.根据少数服从多数的投票法则(majority-voting),让未知实例归类为K个最邻近样本中最多数的类别
这里写图片描述

细节:关于距离的衡量方法

  • Euclidean Distance 定义
    这里写图片描述
    以上是二维定义,python源码如下:
import math

def ComputeEuclideanDistance(x1, y1, x2, y2):
    distance = math.sqrt(math.pow((x1 - x2), 2) + math.pow((y1 - y2), 2))
    return distance
  • 可以推广到多维,每个维度求差平方之后求和之后在开方(分别计算个点与未知点的Euclidean距离)
    其他距离衡量:余弦值(cos), 相关度 (correlation), 曼哈顿距离 (Manhattan distance)
    这里写图片描述
  • k若取值3 ,则 取 d_ag, d_bg, d_cg,而这三个点 所属的实例为爱情片,故未知实例为爱情片

举例(缺点,如下图Y,根据K值的选择,,而且一般选1357等奇数,因为要进行少数服从多数的投票)

这里写图片描述

算法优缺点:

  • 算法优点
    1.简单
    2.易于理解
    3.容易实现
    4.通过对K的选择可具备丢噪音数据的健壮性

  • 算法缺点
    这里写图片描述
    1.需要大量空间储存所有已知实例(空间)
    2.算法复杂度高(需要比较所有已知实例与要分类的实例)
    3.当其样本分布不平衡时,比如其中一类样本过大(实例数量过多)占主导的时候,新的未知实例容4.易被归类为这个主导样本,因为这类样本实例的数量过大,但这个新的未知实例实际并木接近目标样本

    1. 改进版本
      考虑距离,根据距离加上权重
      比如: 1/d (d: 距离)离他近的点,会得到一个好的权重

猜你喜欢

转载自blog.csdn.net/changerjjlee/article/details/80561377