机器学习-13:MachineLN之kNN

作者: MachineLP | 来源:发表于2018-01-18 09:22 被阅读21次

我想说:

其实训练模型是个力气活,有人说训练模型很简单,把数据塞进去,然后跑完就好了,哦,这样的话谁都会,关键的也就在这里,同样的数据同样的模型,有些人训练的模型在测试集上99%,有些人的则只有95%,甚至90%,其实学习最关键的也在这里,大家同时学一个知识,也都学了,但是理解的程度会大相径庭,注意trick不可不学,并且坑不得不踩。唉,前几天训练好的一个模型,再让自己复现感觉也很难搞定了,天时地利人和!!!今天开始搞传统机器学习的理论和实践,突然发现这是自己的短板,其实也不是啦:李航老师统计学看了4遍,周志华老师机器学习看了一遍,模式分类那本大厚书粗略看了一遍,经典的数据挖掘看了一遍,还看了一本机器学习的忘记名字了,吴恩达的课看了一遍,还看了一些英文资料,机器学习实践照着敲了一遍,在就是一些零零碎碎的.....,虽然做过一些实践,但是缺乏工程上的磨练。

1. kNN介绍

kNN(K Nearest Neighbor):存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一个数据与所属分类的对应关系。输入没有标签的数据后,将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征相似数据(最近邻)的分类标签,一般来说我们只选择样本数据集中前k个最相似的数据,这就是k-近邻算法中的k的出处,通常k是不大于20的整数。最后,选择k个最相似数据中出现次数最多的分类,作为新数据的分类。

看一下下图:x是未知类别的,计算与w1,w2,w3相似度(距离),下图是取5个(k个)最相似的数据,然后从5个中选择出现次数最多的类别,作为x的类别。

image

其实,k值的选择至关重要,看下图,不宜太小不宜太大:

image

2. kNN中相似度量方法:

上面提到的相似度(还有推荐中的相似度),很多时候都是用距离来衡量,计算距离的方法有:

  • 闵氏距离

    两观测点x和y间的闵氏距离是指两观测点p个变量值绝对差k次方总和的k次方根:

image
  • 欧式距离

    两观测点x和y间的欧式距离是指两观测点p个变量值绝对差平方总和的平方根:

image.png
    可以看出,欧式距离是闵氏距离在k=2时的特例。
  • 绝对(曼哈顿)距离

    两观测点x和y间的绝对(曼哈顿)距离是指两观测点p个变量值绝对之差的总和:

image
   可以看出,绝对(曼哈顿)距离是闵氏距离在k=1时的特例。
  • 切比雪夫距离

    两观测点x和y间的切比雪夫距离是指两观测点p个变量值绝对之差的最大值:

image
    可以看出,切比雪夫距离是闵氏距离在k=无穷大时的特例
  • 夹角余弦距离
image
   可以看出夹角余弦距离是从两观测的变量整体结构相似性角度测度其距离的。夹角余弦值越大,其结构相似度越高。

当然除了以上的相似度量方法还有很多,马氏距离、交叉熵、KL变换等,都是可以衡量相似度的方法,但是要注意在什么情境用什么方法;

3. 注意的问题:

实际应用中,p个维度(特征)之间可能存在数量级的差异(这里也体现了数据归一化的重要性),数量级较大的维度对距离大小的影响会大于数量级小的变量。为了消除这种影响,统计学中常见的方法有标准分数法和极差法(有的称为极大-极小值法)。

  • 标准分数法:
image
  • 极差(极大-极小值法)法:
image

另外,很多时候是这么做的,例如在DL中我们用CNN提取的特征作为kNN的样本;或者更传统一点,可以通过PCA降维后的结果作为kNN的样本;可以减少维度灾难;鄙人缺少此方便实战经验,写起来比较晦涩;

4. kNN的优缺点

KNN的优缺点:

  • 优点:

    1、思想简单,理论成熟,既可以用来做分类也可以用来做回归;

    2、可用于非线性分类;

    3、训练(计算时间)时间复杂度为O(n);

    4、准确度高,对数据没有假设,对outlier不敏感;

  • 缺点:
    1、计算量大(样本量大);
    2、样本不平衡问题(即有些类别的样本数量很多,而其它样本的数量很少);
    3、需要大量的内存;

5. 一些思考:

  • 一个是机器学习,算法基本上都比较简单,最难的是数学建模,把那些业务中的特性抽象成向量的过程,另一个是选取适合模型的数据样本。这两个事都不是简单的事。算法反而是比较简单的事。

  • 对于KNN算法中找到离自己最近的K个点,是一个很经典的算法面试题,需要使用到的数据结构是“较大堆——Max Heap”,一种二叉树。你可以看看相关的算法。

下一遍: kNN实践 python代码+详细注释

推荐阅读:

推荐阅读:

  1. 机器学习-1:MachineLN之三要素

  2. 机器学习-2:MachineLN之模型评估

  3. 机器学习-3:MachineLN之dl

  4. 机器学习-4:DeepLN之CNN解析

  5. 机器学习-5:DeepLN之CNN权重更新(笔记)

  6. 机器学习-6:DeepLN之CNN源码

  7. 机器学习-7:MachineLN之激活函数

  8. 机器学习-8:DeepLN之BN

  9. 机器学习-9:MachineLN之数据归一化

  10. 机器学习-10:MachineLN之样本不均衡

  11. 机器学习-11:MachineLN之过拟合

  12. 机器学习-12:MachineLN之优化算法

  13. 机器学习-13:MachineLN之kNN

  14. 机器学习-14:MachineLN之kNN源码

  15. 机器学习-15:MachineLN之感知机

  16. 机器学习-16:MachineLN之感知机源码

  17. 机器学习-17:MachineLN之逻辑回归

  18. 机器学习-18:MachineLN之逻辑回归源码

image

版权声明:本文为博主原创文章,未经博主允许不得转载。有问题可以加微信:lp9628(注明CSDN)。

相关文章

  • 机器学习-13:MachineLN之kNN

    我想说: 其实训练模型是个力气活,有人说训练模型很简单,把数据塞进去,然后跑完就好了,哦,这样的话谁都会,关键的也...

  • 机器学习-14:MachineLN之kNN源码

    我想说: 其实你坚持的东西都是有意义的,就好比给代码加注释,你真去做了就知道了;另外建议大家建立一个自己的工具箱,...

  • 机器学习-3:MachineLN之dl

    开篇废话: 嫌废话太多可以直接跳到正文哦。 对外人提起人工智能感觉很牛逼很了不起、高大上或者一些其他的吹捧、羡慕的...

  • 机器学习-22:MachineLN之RL

    我想说: 其实很多事情找对方法很重要,可以事半功倍,就好比学习; 原本打算将机器学习基础写完以后再写深度学习、强化...

  • 机器学习之KNN

    @[toc] 机器学习相关概念 出现的代码资源和jupyter记事本源代码戳这边下载源码和数据) 机器学习定义  ...

  • 机器学习之KNN

    KNN:采用测量不同特征值间的距离或相似度的方法进行分类。算法原理:如果一个样本在特征空间的K个最相似(最邻近)的...

  • 机器学习之深入理解K-means、与KNN算法区别及其代码实现

    机器学习之深入理解K-means、与KNN算法区别及其代码实现

  • 机器学习实战-knn

    机器学习实战笔记-knn算法实战 本文内容源于《机器学习实战》一书,主要介绍了knn(k-nearest neig...

  • 机器学习-7:MachineLN之激活函数

    很长一段时间都在想,有些问题不去弄明白为什么,遇到瓶颈就傻逼了,一个bug整你一个月,原来只是一个细节问题,就好如...

  • 机器学习-2:MachineLN之模型评估

    开篇废话: 很多文章其实都是将书中的东西、网上课程、或者别人的论文的东西总结一下,发出来,但是个人感觉还是加入个人...

网友评论

    本文标题:机器学习-13:MachineLN之kNN

    本文链接:https://www.haomeiwen.com/subject/kdeioxtx.html