一、k近邻法基础知识
1. 特征空间中两个实例点的距离反应了两个实例点的相似程度。
2. k近邻模型三要素 = 距离度量(有不同的距离度量所确定的最邻近点不同)+k值的选择(应用中,k值一般取一个比较小的值,通常采用交叉验证法来确定最优k值)+分类决策规则(往往是多数表决规则(majority voting rule),此规则等价于经验风险最小化)
3. 在训练数据量太大或者是维数很高时,显然线性扫描(linear scan)耗时太大,不可取。其中一个办法就是构建kd树(空间划分树,实际上是一种平衡二叉树)实现对训练数据的快速k近邻搜索。
二、距离度量相关

Note:根据数据特性的不同,可以采用不同的度量方法。一般而言,定义一个距离函数 d(x,y), 需要满足下面几个准则:
1) d(x,x) = 0 // 到自己的距离为0
2) d(x,y) >= 0 // 距离非负
3) d(x,y) = d(y,x) // 对称性: 如果 A 到 B 距离是 a,那么 B 到 A 的距离也应该是 a
4) d(x,k)+ d(k,y) >= d(x,y) // 三角形法则: (两边之和大于第三边)

  1. 闵可夫斯基距离(Minkowski Distance)又称Lp距离,闵氏距离不是一种距离,而是一组距离的定义。
    两个n维变量a(x11,x12,…,x1n)与 b(x21,x22,…,x2n)间的闵可夫斯基距离定义为:

    其中p是一个变参数,根据变参数的不同,闵氏距离可以表示一类的距离。
    当p=1时,就是曼哈顿距离,又称L1距离或者是程式区块距离(city block distance)等。
    当p=2时,就是欧氏距离,又称L2距离,是直线距离。
    当p→∞时,就是切比雪夫距离

    闵氏距离,包括曼哈顿距离、欧氏距离和切比雪夫距离都存在明显的缺点。
      举个例子:二维样本(身高,体重),其中身高范围是150~190,体重范围是50~60,有三个样本:a(180,50),b(190,50),c(180,60)。那么a与b之间的闵氏距离(无论是曼哈顿距离、欧氏距离或切比雪夫距离)等于a与c之间的闵氏距离,但是身高的10cm真的等价于体重的10kg么?因此用闵氏距离来衡量这些样本间的相似度很有问题。
    简单说来,闵氏距离的缺点主要有两个:(1)将各个分量的量纲(scale),也就是“单位”当作相同的看待了。(2)没有考虑各个分量的分布(期望,方差等)可能是不同的。
  2. 欧式距离
    两个n维向量a(x11,x12,…,x1n)与 b(x21,x22,…,x2n)间的欧氏距离:

      也可以用表示成向量运算的形式:
  3. 标准化欧氏距离(Standardized Euclidean distance )
    标准化欧氏距离是针对简单欧氏距离的缺点而作的一种改进方案。标准欧氏距离的思路:既然数据各维分量的分布不一样,那先将各个分量都“标准化”到均值、方差相等。
    假设样本集X的数学期望或均值(mean)为m,标准差(standard deviation,方差开根)为s,那么X的“标准化变量”X*表示为:(X-m)/s,而且标准化变量的数学期望为0,方差为1。
    即,样本集的标准化过程(standardization)用公式描述就是:

    经过简单的推导就可以得到两个n维向量a(x11,x12,…,x1n)与 b(x21,x22,…,x2n)间的标准化欧氏距离的公式:  

    如果将方差的倒数看成是一个权重,这个公式可以看成是一种加权欧氏距离(Weighted Euclidean distance)。
  4. 夹角余弦(Cosine) ,几何中夹角余弦可用来衡量两个向量方向的差异,机器学习中借用这一概念来衡量样本向量之间的差异。
    (1)在二维空间中向量A(x1,y1)与向量B(x2,y2)的夹角余弦公式:

    (2) 两个n维样本点a(x11,x12,…,x1n)和b(x21,x22,…,x2n)的夹角余弦
    类似的,对于两个n维样本点a(x11,x12,…,x1n)和b(x21,x22,…,x2n),可以使用类似于夹角余弦的概念来衡量它们间的相似程度。  

    即:

    夹角余弦取值范围为[-1,1]。夹角余弦越大表示两个向量的夹角越小,夹角余弦越小表示两向量的夹角越大。当两个向量的方向重合时夹角余弦取最大值1,当两个向量的方向完全相反夹角余弦取最小值-1。
    举一个具体的例子,假如新闻X和新闻Y对应向量分别是: x1, x2, …, x6400 和 y1, y2, …, y6400。则,它们之间的余弦距离可以用它们之间夹角的余弦值来表示:

    当两条新闻向量夹角余弦等于1时,这两条新闻完全重复(用这个办法可以删除爬虫所收集网页中的重复网页);当夹角的余弦值接近于1时,两条新闻相似(可以用作文本分类);夹角的余弦越小,两条新闻越不相关。
  5. 余弦距离与欧式距离对比

    余弦距离使用两个向量夹角的余弦值作为衡量两个个体间差异的大小。
    相比欧氏距离,余弦距离更加注重两个向量在方向上的差异。

    借助三维坐标系来看下欧氏距离和余弦距离的区别:

    从上图可以看出,欧氏距离衡量的是空间各点的绝对距离,跟各个点所在的位置坐标直接相关;而余弦距离衡量的是空间向量的夹角,更加体现在方向上的差异,而不是位置。

    如果保持A点位置不变,B点朝原方向远离坐标轴原点,那么这个时候余弦距离cosθ是保持不变的(因为夹角没有发生变化),而A、B两点的距离显然在发生改变,这就是欧氏距离和余弦距离之间的不同之处。
    欧氏距离和余弦距离各自有不同的计算方式和衡量特征,因此它们适用于不同的数据分析模型:
    欧氏距离能够体现个体数值特征的绝对差异,所以更多的用于需要从维度的数值大小中体现差异的分析,如使用用户行为指标分析用户价值的相似度或差异。
    余弦距离更多的是从方向上区分差异,而对绝对的数值不敏感,更多的用于使用用户对内容评分来区分兴趣的相似度和差异,同时修正了用户间可能存在的度量标准不统一的问题(因为余弦距离对绝对数值不敏感)。

  6. 调整余弦相似度算法(Adjusted Cosine Similarity)
    余弦相似度更多的是从方向上区分差异,而对绝对的数值不敏感,因此没法衡量每个维度上数值的差异,会导致这样一种情况:
    用户对内容评分,按5分制,X和Y两个用户对两个内容的评分分别为(1,2)和(4,5),使用余弦相似度得到的结果是0.98,两者极为相似。但从评分上看X似乎不喜欢2这个 内容,而Y则比较喜欢,余弦相似度对数值的不敏感导致了结果的误差,需要修正这种不合理性就出现了调整余弦相似度,即所有维度上的数值都减去一个均值,比如X和Y的评分均值都是3,那么调整后为(-2,-1)和(1,2),再用余弦相似度计算,得到-0.8,相似度为负值并且差异不小,但显然更加符合现实。

  7. 杰卡德相似系数(Jaccard similarity coefficient)
    广义Jaccard相似度可参考,此处略:http://blog.csdn.net/xceman1997/article/details/8600277
    1) 杰卡德相似系数
    两个集合A和B的交集元素在A,B的并集中所占的比例,称为两个集合的杰卡德相似系数,用符号J(A,B)表示。 

    杰卡德相似系数是衡量两个集合的相似度一种指标。
    2)杰卡德距离
    与杰卡德相似系数相反的概念是杰卡德距离(Jaccard distance)。
    杰卡德距离可用如下公式表示:  

    杰卡德距离用两个集合中不同元素占所有元素的比例来衡量两个集合的区分度。
    3) 杰卡德相似系数与杰卡德距离的应用
    可将杰卡德相似系数用在衡量样本的相似度上。
    样本A与样本B是两个n维向量,而且所有维度的取值都是0或1。
    例如:A(0111)和B(1011)。我们将样本看成是一个集合,1表示集合包含该元素,0表示集合不包含该元素。
    p :样本A与B都是1的维度的个数
    q :样本A是1,样本B是0的维度的个数
    r :样本A是0,样本B是1的维度的个数
    s :样本A与B都是0的维度的个数
    那么样本A与B的杰卡德相似系数可以表示为:这里p+q+r可理解为A与B的并集的元素个数,而p是A与B的交集的元素个数。而样本A与B的杰卡德距离表示为:

    这里p+q+r可理解为A与B的并集的元素个数,而p是A与B的交集的元素个数。
    4)杰卡德相似度算法分析
    杰卡德相似度算法没有考虑向量中潜在数值的大小,而是简单的处理为0和1,不过,做了这样的处理之后,杰卡德方法的计算效率肯定是比较高的,毕竟只需要做集合操作。

参考:
余弦距离、欧氏距离和杰卡德相似性度量的对比分http://www.cnblogs.com/chaosimple/archive/2013/06/28/3160839.html
不同相关性度量方法的线上效果对比与分析 http://blog.sina.com.cn/s/blog_4b59de07010166z9.html
从K近邻算法、距离度量谈到KD树、SIFT+BBF算法http://blog.csdn.net/v_july_v/article/details/8203674
机器学习中的相似性度量http://www.cnblogs.com/heaad/archive/2011/03/08/1977733.html
漫谈:机器学习中距离和相似性度量方法http://www.cnblogs.com/daniel-D/p/3244718.html

《统计学习方法》学习笔记(4)--k近邻法及常用的距离(or 相似度)度量相关推荐

  1. 统计学习方法第三章 k近邻法

    文章目录 第三章 k近邻法 k近邻算法 k近邻模型的距离划分 k值的选择 k近邻分类决策规则 第三章 k近邻法 只讨论分类问题的k近邻法 k近邻三个基本要素: k值选择 距离度量 分类决策规则 k近邻 ...

  2. 统计学习方法 学习笔记(1)统计学习方法及监督学习理论

    统计学习方法及监督学习理论 1.1.统计学习 1.1.1.统计学习的特点 1.1.2.统计学习的对象 1.1.3.统计学习的目的 1.1.4.统计学习的方法 1.1.5.统计学习的研究 1.1.6.统 ...

  3. 【资源分享】今日学习打卡--k近邻法 (k Nearest Neighbor Method)

    他来了他来了,他带着礼物走来了. 今天继续学习打卡 今天给大家分享的是k近邻法,是监督学习中的最基本的分类问题模型. 博主从自己看的几个比较好的视频中,分享了一些自己认为比较好的视频.希望能在大家和博 ...

  4. 统计学习方法 学习笔记(十):决策树

    这一个学习笔记将要了解决策树,在研一上机器学习这门课的时候,老师在讲到这一节的时候,举了一个例子我现在还能记得:你们坐在这里上课,就像这个决策树一样,在你人生中的每一个重要结点,你都做出了选择,经过多 ...

  5. 逻辑斯蒂回归_逻辑斯蒂回归详细解析 | 统计学习方法学习笔记 | 数据分析 | 机器学习...

    本文包括: 重要概念 逻辑斯蒂回归和线性回归 二项逻辑斯谛回归模型 逻辑斯蒂回顾与几率 模型参数估计 多项逻辑斯谛回归 其它有关数据分析,机器学习的文章及社群 1.重要概念: 在正式介绍逻辑斯蒂回归模 ...

  6. 统计学习方法 学习笔记(五):支持向量机(下)

    通过支持向量机(上)和支持向量机(中)的介绍,对支持向量机应该有点感性的认识啦!在这个学习笔记中,来继续探寻带核函数的支持向量机(解决如下图所示的问题) 对解线性分类问题,线性分类支持向量机是一种非常 ...

  7. 统计机器学习【3】- K近邻法(三)Ball Tree

    在计算机科学中,球树(ball tree)是一种空间划分数据结构,用于组织在多维空间中的点.球数之所有得到此名,是因为它将数据点划分为一组嵌套的超球体.这种类型的数据结构特征使其在很多方面都有用,特别 ...

  8. 《统计学习方法》读书笔记——K近邻法(原理+代码实现)

    传送门 <统计学习方法>读书笔记--机器学习常用评价指标 <统计学习方法>读书笔记--感知机(原理+代码实现) <统计学习方法>读书笔记--K近邻法(原理+代码实现 ...

  9. 机器学习理论《统计学习方法》学习笔记:第三章 k近邻法

    机器学习理论<统计学习方法>学习笔记:第三章 k近邻法 3 k近邻法 3.1 K近邻算法 3.2 K近邻模型 3.2.1 模型 3.2.2 距离度量 3.2.3 K值的选择 3.2.4 分 ...

最新文章

  1. 灵光一现的trick
  2. 观点 | 云原生时代来袭 下一代云数据库技术将走向何方?
  3. map分组后取前10个_人口净流入排名前10的城市,在这10个城市买房,只涨不跌
  4. SAP PP模块调研问卷
  5. 1.Hadoop的学习(Linux的基础命令)
  6. Tuple VS ValueTuple
  7. 算法导论2nd 10.1-7
  8. 1.5 编程基础之循环控制(45题)
  9. 基于SpringBoot+webSocket实现扫码登录功能
  10. myeclipse 配置 SVN
  11. Everything常见问题及搜索技巧
  12. android高效简洁的代码实现直播礼物效果
  13. IDEA环境下yml文件不显示小绿叶(不被识别为配置文件)
  14. 微信wifi服务器地址,微信连WIFI服务器时钟不同步
  15. 天猫菜鸟强势宣布!春节不休,年货照常买照常送!
  16. java调用浏览器_Java调用浏览器打开网页实例完整版
  17. Vs2017搭建qt开发环境
  18. 机器学习——概率图模型
  19. 教你做一个送别人女友的网页相册(一)(HTML+CSS+JS实现)
  20. ②计算机病毒实验实验报告

热门文章

  1. Python中复数取.imag的问题
  2. 搭建Ubuntu 10.04系统(嵌入式开发) (重要)
  3. 3D游戏的碰撞检测是如何实现的?
  4. 【ICPC-369】uva 12096 The SetStack Computer
  5. 如何使用SQL对数据进行分析和可视化
  6. win10 1809版本手动安装WSL和ubuntu 18.04
  7. [爬虫实战]利用python快速爬取NCBI中参考基因组assembly的相关信息
  8. QML之ubuntu下编译安装虚拟键盘中文输入法
  9. Debezium同步之DB2数据到Kafka的同步
  10. linux 内核模块 编写例子,LINUX内核模块编程8