《菜鸟搞科研》2:度量——教你如何计算自己和高富帅之间的距离

《搬砖搞科研》正式改名为《菜鸟搞科研》。
换汤不换药,我们依然延续咱民工界简单粗暴的风格,还是熟悉的配方,还是熟悉的味道。
今天要给大家带来的可以说是计算机科学最核心的一部分,什么?你不信,这么快就迎来了最核心的内容。不但如此,通过这期的学习,你很快就能算出你和高富帅之间的距离,也能简单知晓谷歌和百度视图的基本原理。是不是有点小激动,那么这一期你一定不能错过.

视频地址

http://v.youku.com/v_show/id_XMjc0MDkwNTM1Ng==.html?spm=a2h0k.8191407.0.0&from=s1.8-1-1.2

代码地址

http://7xl8wi.com1.z0.glb.clouddn.com/02-metrics-code.rar

 

各位网友大家好,我是砖家魏骁勇,砖是砖头的砖!

上次我们介绍了特征向量和特征空间,我们看到当我们把对象都投射到特征空间以后,很多属性都一目了然。

那我们今天继续搬砖,在上次特征空间的基础上,我们再加一块新的砖,叫做“度量”。

在特征空间里面,我们发现离得近的对象之间总是比离得远的对象更加相似一些。这个发现的过程是我们人类与生俱来的一种能力,它非常地快,快到连我们都不知道具体的计算过程是什么样子的。那对于计算机来说,是怎么判断这种相似或者不相似度的呢?为了方便计算,计算机需要用一个数值来标识这种相似或者不相似度。那么获取这个值的过程就叫做度量。英文叫做Metrics或Measures。

我们再来看看度量黑盒吧,这个黑盒的输入是两个特征向量,输出是一个值,这个值可能是距离,也可能是相似度,这是两个相对的概念。

我们先讲距离的度量,因为它是我们在二维空间中,也就是在一个平面上能够得到的最直观的印象。

在这一张坐标系当中,我们如果要计算高富帅和屌丝之间的距离,我们可以采用平面几何里面的方法,也就是我们可以计算这个三角形的长边的长,那么首先我们需要知道另外两条直角边的长度是多少。

为了得到这两条直角边的长度,我们需要回到特征表格中来寻找对象的坐标,这个时候我们就会发现这两条直角边的长度对应的是两个对象在相应维度上坐标差异的绝对值。

好了现在我们回到特征空间里面,根据勾股定理我们现在可以很容易地计算出三角形长边的长,它也就是高富帅和屌丝之间的差距。如果你感兴趣的话,你也可以把自己的数据投到这个空间里面,你就知道自己离高富帅到底有多远了。那么新的问题也来了,因为以上例子我们都是在二维空间当中做的,那么当特征向量是多维的时候该怎么办呢?

其实计算的方法差不多,假设我们现在多了一维,也就是特征表格里面多了一列,那么我们只需要如法炮制,把每一列的差异计算出来,求平方,然后开根就可以了。

这样做的几何意义非常直观,在3维空间里面,它计算的其实是立方体对角线的长度,我们把它泛化到多维空间里面,这样得到的距离就叫做欧几里德距离。

距离度量的是不相似度,相对的概念就是相似度。一种常用的方法叫做余弦相似度,也就是cosine similarity。

这里我们先要回到特征空间里面看一下每个对象的特征向量,虽然一直以来我们使用了向量这个术语,但实际我们在传递的是一个点的概念,它在每个维度上都具有坐标。我们高中学过,一个向量应该是具有方向和长度的东西,那么我们这里可以简单地从坐标轴原点到相应的特征点画一个箭头,它就变成一个向量了。这就是当前对象的特征向量。对于初级民工来说,暂时不用特别区分特征到底是一个点还是一个向量,现在大家可以看到这个向量的指向其实表明了一种趋向,当它指向高富帅的时候,那么对象的特征就更趋向高富帅,当它指向土豪的时候,当前对象更像土豪。所以,对于两个对象的特征向量,我们可以用它们的指向差异来衡量它们的相似度。最直观的方式其实就是看它们之间的夹角大小,越小越相似。为了衡量的方便,我们通常计算夹角的余弦值。

在计算余弦相似度的时候,我们可以利用向量分析的优势来避免使用复杂的平面几何方法。这里我们就先直接给出公式,有兴趣的网友可以自行推导一下它跟平面几何方法之间的关系。公式的分子部分其实就是两个向量的内积,也就是在它们相应维度上的值相乘然后相加,分母部分其实是两个向量的长度,也就是一个向量从原点到顶点的欧几里德距离。

好了,到这里关于度量我们就介绍完了。恭喜大家,你已经掌握了计算机科学里面最核心的问题。听起来有点不可思议,但其实大部分计算机科学的问题到最后都是在衡量对象之间的相似或者不相似度。计算机科学家的任务就是要根据不同的情况来选择不同的度量,或者对已有的度量进行改进来适应新的情况。如果没有特殊的要求,今天我们介绍的两个度量就完全够用了。

现在我们就来检验一下,利用我们已经学到的知识来做一个简单的图像检索引擎,Google和百度都有类似的功能,只要给定一副图像作为查询的条件,系统会返回一系列跟这个查询条件相似的图片作为结果。

为了演示的目的,这个系统非常的简单。首先我们提取所有待查图像的颜色矩特征,然后当用户给定一个查询条件的时候,也就是一幅新的图片,我们再提取它的颜色矩特征,然后用这个特征跟我们数据库中所有的图像特征进行度量,最后根据相似度或者距离来排序,把相应的结果展示出来就可以了。

好了,由于时间的关系,我们先介绍这么多。相应的代码和图片可以从我们的公众号下载,当然也欢迎大家提出宝贵的意见,我们下次再见。

Leave a Reply

Your email address will not be published. Required fields are marked *