2.2 K最近邻算法

  • 什么是K最近邻算法
    • 最近邻算法

      • 先输入标注好的训练集,然后啥也不干。测试集的每个样本进来,找到最近的训练集样本,贴上和它一样的标签,就像下图绿色应该为三角形。
        绿色应该为三角形

      • 如何定义最近/距离?

        • L1和L2空间的区别
          • L1受坐标系影响L2不受
          • 通常情况下如果向量参数有具体的实际意义,比如薪资年龄,L1可能比L2更好,但一般推荐两者都试一试,取效果好的。
            在这里插入图片描述
    • K-最近邻算法

      • 最近邻算法只找最近的一个样本,容易被噪声干扰,就像下图红色应该被判别为方块而不是黑点。KNN的算法是我找附近的K个训练集样本,然后少数服从多数。
        在这里插入图片描述

      • K值为1会受噪声干扰,但是K值太大也不行,过大的K值将会导致模型过于简单,如果K值=训练集大小 也就意味着测试集将被贴上同一个标签。

      • 什么K值是最好的?要根据样本情况来定,通常先取一个较小的值,通过交叉验证来定。

  • 归一化
    • 归一化重要性
      • 目的是让每个要素的权重相同。因为计算欧式距离的时候大数会贡献更多。
    • 归一化的方法
      • 每个维度都降到0~1之间,分母是max-min,分子是x-min
  • 评价算法和调整超参的正确方式
    • 如果只有训练集和测试集,用测试集来不断优化超参数是十分糟糕的,因为那意味着你在让算法更加适合这个特定的测试集,而不是适用于一个普遍的分类问题。测试集应该只能在最后使用一次,相当于是一个未见的新数据,我们不应当也不能对测试集做出任何的算法优化,这样才能保证我们的算法是普适的,而不是针对某个特定测试集过拟合的。
    • 正确的做法是把数据分三个部分(或者说是把测试集分成两个部分):训练集,验证集,测试集。训练集用来训练模型,验证集用来调参。等到一切就绪之后才能用到测试集,充当未见的新数据来评价算法好坏,然后不能做任何的算法更改。
      在这里插入图片描述
  • 缺点
    • 训练模型时间短,测试样本时间长,完全违背机器学习的意义
    • L2距离并不适合图像识别,因为它不能很好的衡量图像的相似性
    • 维度灾难
      • KNN算法相当于是把空间分成很多块,每一块是一个标签。这就需要训练样本密集的分布在空间中才可以,但随着维度的增加,“密集”所需要的样本数量是呈指数增长的,我们可能没有那么多的数据。
        在这里插入图片描述

参考资料

一文搞懂k近邻(k-NN)算法(一)
cs231n 2.2

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值