KNN(K-nearest neighbors)

  • 思想简单
  • 数学所需知识少(近零)
  • 效果好
  • 可解释机器学习算法使用过程中的很多细节问题
  • 更完整的刻画机器学习应用的流程
  • 天然可解决多分类问题
  • 可解决回归问题

K近邻本质:如果两个样本足够相似,那么它们就有可能属于同一类别。

e.g. 绿色的点是新加入的点,取其最近的k(3)个点作为小团体来投票,票数高的获胜(蓝比红-3:0),所以绿点应该也是蓝点

计算距离:

最常见 -> 欧拉距离,求a, b两点的距离(二维,三维,多维):

 -> 

理解小笔记:((a样本第一个维度特征-b样本第一个维度特征)2 + (a样本第二个维度特征-b样本第二个维度特征)2 + ... ) 再开根

近乎可以说,KNN算法是机器学习中唯一一个不需要训练过程的算法。输入用例可直接送给训练数据集。

  • KNN可以被认为是没有模型的算法
  • 为和其他算法统一,可认为其训练数据集本身就是模型

使用KNN解决回归问题

绿点的值即可设为离它最近的三个点的(加权)平均值

KNN缺点

最大缺点:效率低下

如果训练集有m个样本,n个特征,则预测每一个新的数据,都需要计算它与每一个点之间的距离(共m个点),每计算一个点的距离就需要O(n)的时间复杂度。

每预测一个,共需要O(m*n)的时间复杂度。

优化,使用树的结构:KD-Tree, Ball-Tree

缺点2:高度数据相关

尽管所有的机器学习算法都是根据给定的数据集来学习,都是高度数据相关的。但KNN相对而言对outlier更加敏感。例如加入使用k=3,当预测点旁有两个错误数据就足以导致预测结果的错误。

缺点3:预测结果不具有可解释性

往往实际应用中我们只知道结果是什么是不够的,我们需要知道为什么是这样的结果从而得到某种规律可以进行推广。

缺点4:维数灾难

随维度的增加,“看似相近”的两个点之间的距离越来越大

解决方法:降维

超参数

指在算法运行前需要决定的参数。

与之相对的模型参数指:算法过程中学习的参数。

KNN算法中没有模型参数,其中K是典型的超参数。

寻找好的超参数:

  • 领域知识
  • 经验数值
  • 实验搜索:尝试测试几组不同的超参数,找到最好的配对

KNN中的其他超参数? -> 距离权重

权重一般取距离的倒数。

考虑距离权重的另一个好处:可解决平票问题

不考虑距离时,红蓝紫平票,模型会随机选一个颜色作为输出结果。但很明显这是不合理的(滑稽脸)。而加入距离权重后,则小红获胜(合情合理有理有据)。

更多的距离定义

之前说到的距离都是欧拉距离。还有一种常见的距离叫曼哈顿距离

定义为:两点在每个维度上距离的和。如上图例子中黑色两点的曼哈顿距离即它两在x方向上的差值加上y方向上的差值。所有彩线的曼哈顿距离都相同(其中绿线即欧拉距离)

推广一下可发现

  -> 曼哈顿距离

 -> 欧拉距离

 -> 明可夫斯基距离Minkowski distance

当p=1时,明可是曼哈顿距离,p=2时,变身成曼哈顿距离,p=其他数,其他距离的表示方式。

【系统提示】叮咚!又获得一个新的超参数,p

由sklearn中叫metric的超参数控制,默认为明可夫斯基距离

  • 向量空间余弦相似度 Cosine Similarity
  • 调整余弦相似度 Adjusted Cosine Similarity
  • 皮尔森相关系数 Pearson Correlation Coefficient
  • Jaccard相似系数 Jaccard Coefficient

KNN-K近邻算法(1)的更多相关文章

  1. 基本分类方法——KNN(K近邻)算法

    在这篇文章 http://www.cnblogs.com/charlesblc/p/6193867.html 讲SVM的过程中,提到了KNN算法.有点熟悉,上网一查,居然就是K近邻算法,机器学习的入门 ...

  2. 第四十六篇 入门机器学习——kNN - k近邻算法(k-Nearest Neighbors)

    No.1. k-近邻算法的特点 No.2. 准备工作,导入类库,准备测试数据 No.3. 构建训练集 No.4. 简单查看一下训练数据集大概是什么样子,借助散点图 No.5. kNN算法的目的是,假如 ...

  3. KNN K~近邻算法笔记

    K~近邻算法是最简单的机器学习算法.工作原理就是:将新数据的每一个特征与样本集中数据相应的特征进行比較.然后算法提取样本集中特征最相似的数据的分类标签.一般来说.仅仅提取样本数据集中前K个最相似的数据 ...

  4. KNN (K近邻算法) - 识别手写数字

    KNN项目实战——手写数字识别 1. 介绍 k近邻法(k-nearest neighbor, k-NN)是1967年由Cover T和Hart P提出的一种基本分类与回归方法.它的工作原理是:存在一个 ...

  5. kNN(k近邻)算法代码实现

    目标:预测未知数据(或测试数据)X的分类y 批量kNN算法 1.输入一个待预测的X(一维或多维)给训练数据集,计算出训练集X_train中的每一个样本与其的距离 2.找到前k个距离该数据最近的样本-- ...

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

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

  7. 机器学习——KNN算法(k近邻算法)

    一 KNN算法 1. KNN算法简介 KNN(K-Nearest Neighbor)工作原理:存在一个样本数据集合,也称为训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据与所属分 ...

  8. k近邻算法(KNN)

    k近邻算法(KNN) 定义:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别. from sklearn.model_selection ...

  9. 1. K近邻算法(KNN)

    1. K近邻算法(KNN) 2. KNN和KdTree算法实现 1. 前言 K近邻法(k-nearest neighbors,KNN)是一种很基本的机器学习方法了,在我们平常的生活中也会不自主的应用, ...

  10. 机器学习:k-NN算法(也叫k近邻算法)

    一.kNN算法基础 # kNN:k-Nearest Neighboors # 多用于解决分裂问题 1)特点: 是机器学习中唯一一个不需要训练过程的算法,可以别认为是没有模型的算法,也可以认为训练数据集 ...

随机推荐

  1. 题解报告:hdu 2062 Subset sequence

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2062 Problem Description 考虑集合An = {1,2,...,n}. 例如,A1 ...

  2. 题解报告:hdu 1570 A C

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1570 Problem Description Are you excited when you see ...

  3. 循环队列 分类: c/c++ 2014-10-10 23:28 605人阅读 评论(0) 收藏

    利用线性表实现队列,为了有效利用空间,将其设计为循环结构,防止假溢出:牺牲一个存储单元以区分队空.队满. 设front队头,rear队尾,N为顺序表大小 队空:rear==front 队满:(rear ...

  4. iOS 集成银联支付(绕过文档的坑,快速集成)-转

    本文是投稿文章,作者:南栀倾寒当初集成支付宝的时候,觉得见了这么丑的代码,加上这么难找的下载地址,在配上几乎为零的文档,寒哥就要吐血了. 下午去集成银联,才知道血吐的早了. 下载地址:https:// ...

  5. php 静态绑定

    简介 编辑 后期静态绑定 从PHP 5.3.0开始,PHP增加了一个叫做后期静态绑定的功能,用于在继承范围内引用静态调用的类. 该功能从语言内部角度考虑被命名为”后期静态绑定“.”后期绑定“的意思是说 ...

  6. jquery readio checked

    今天太鬼火了为这个难问题搜了一下午了到最后还是csdn的朋友给了我正确的答案http://bbs.csdn.net/topics/300162450谢谢这位朋友 // $("#ISOK1&q ...

  7. TCP协议三次握手和四次握手

    前言 先说一下IP协议和TCP协议,IP协议是无连接的通信协议,IP不会占用两个设备之间通信的线路,IP实际上主要负责将每个数据包路由至目的地,但是IP协议并没有能够确保数据包是否到达,传过去的数据包 ...

  8. SELECT TOP 100 PERCENT * 的含义

    --返回符合条件的100%的记录,即所有符合条件的记录SELECT TOP 100 PERCENT * --返回符合条件的100条记录,即只返回符合条件的100条记录SELECT TOP 100 * ...

  9. inux 软件编译、安装、删除

    640?wx_fmt=otherimage.png 本文学习内容 手动安装软件 手动安装下载源码的软件 源码编译3步骤 deb包-包依赖管理 dekg -l 查看所以安装deb的包 apt-get仓库 ...

  10. Java加密简介

    加密算法: 1.对称加密 DES   AES 2.非对称加密 RSA 3.散列函数算法加密 (单项加密)::MD5.SHA.Mac 4.数字签名算法:RSA.DSA 其中,前三种主要完成数据的加解密: ...