程序员数学之距离度量

第1节 为什么需要距离

距离是为了将用户进行分类的(距离越小的他们越可能是同一类人,反之就不是)。
如何得到距离呢?
可以通过不同用户对相同事物的看法(如评分)等信息,然后求出他们的距离。

第2节 欧式距离

2.1 从电影评分开始讲起

假设只有两个用户,他们只看了一部电影(误杀)。

姓名 电影(误杀)
张三 4
李四 5

如何计算他们对电影评分的距离?
程序员数学之距离度量(卢菁老师) - 图1
也就是说张三和李四之间的距离是1。
如果看了两部电影。

姓名 电影1(误杀) 电影2(反贪风暴)
张三 4 8
李四 5 7

程序员数学之距离度量(卢菁老师) - 图2
那么张三和李四在这两部电影上的距离是根号20。

2.2 欧式距离

如果张三和李四一共看了n部电影,并且在每部电影上的评分分别是xi和yi分,那么张三和李四之间的距离是多少呢?
他们的距离可以总结为以下公式(欧式距离):
程序员数学之距离度量(卢菁老师) - 图3
这个公式就是将距离从直线上的两点、平面上的两点、三维空间的两点或n维空间的两点之间的距离进行了归纳。
假设李四在最后两部电影上没有评分。

姓名 追龙 千与千寻 调音师 误杀
张三 5 4 3 3
李四 4 3 - -
王五 4 5 4 3

张三和李四的距离是:
程序员数学之距离度量(卢菁老师) - 图4
张三和王五的距离是:
程序员数学之距离度量(卢菁老师) - 图5
从计算结果来看,是不是说张三和李四的距离要比张三和王五的距离要近呢?
不能,原因在于参与评分的电影越多,可能距离就越大。

2.3 修正的欧式距离

修正的欧氏距离就是为了解决参与维数越多可能距离就越大问题。再次计算张三与李四或王五之间的距离:
张三和李四的距离:
程序员数学之距离度量(卢菁老师) - 图6
张三和王五的距离:
程序员数学之距离度量(卢菁老师) - 图7
修正的欧氏距离公式可以总结如下:
程序员数学之距离度量(卢菁老师) - 图8
修改欧氏距离公式,具体要修正的是参与维度数量不一样造成的距离误差。这个误差是指,共同维数越高,算出来的距离越大。

2.4 权重

2.4.1 权重的意义

由于每部电影在影迷们的心里重要程度不一样,好的电影往往大家的评分都很接近,对于烂片大家的评分就很随意。出于这样的原因,我们采取的办法就是人为的给片子添加权重。权重越高的电影就越好看,反之就没有那么好看。
需要注意的是,所有参与计算的电影权重相加的和等于1。
假如,追龙、千与千寻、调音师是三部经典影片,他们的权重都是0.3,而误杀是烂片,权重是0.1。

姓名 追龙 千与千寻 调音师 误杀
张三 5 4 3 3
王五 4 5 4 1
0.3 0.3 0.3 0.1

程序员数学之距离度量(卢菁老师) - 图9

2.4.2 修正权重

假如参与共同评分的电影就只有两部,那么权重如何计算呢?

追龙 千与千寻 调音师 误杀
张三 5 4 3 3
李四 4 3 - -
原始权重 0.3 0.3 0.3 0.1
修正权重 0.5 0.5

这就需要对权重进行归1化处理。修正权重的计算方式为:原始权重/所有参与计算的权重和。修正后的权重之和为1。
程序员数学之距离度量(卢菁老师) - 图10

2.5 带有权重的欧式距离

程序员数学之距离度量(卢菁老师) - 图11
修正欧式距离公式是权重欧式距离公式的一个特例,是在各个维度上的权重都一样且为1/n。

第3节 曼哈顿距离

3.1 为什么需要曼哈顿距离

先看一个场景,如下图:假如这是一个城市的地图,人通过网络打车的场景。那么车要去接人,司机应该怎么走呢?根据欧式距离(两点之间的直线距离)司机要斜着开车,这显然不可能(也就是说欧式距离在这种场景下不适用)。
程序员数学之距离度量(卢菁老师) - 图12

3.2 曼哈顿距离

曼哈顿距离就是为了解决类似上述场景的距离,如何计算呢?
程序员数学之距离度量(卢菁老师) - 图13
曼哈顿距离不仅仅只能计算两点间的距离,还能计算多维空间的距离。
程序员数学之距离度量(卢菁老师) - 图14

第4节 海明距离

4.1 字符串的距离

如何求两个字符串的距离呢?
程序员数学之距离度量(卢菁老师) - 图15

4.2 信息编码的距离

海明距离更多的是使用在信息编码上。
程序员数学之距离度量(卢菁老师) - 图16
海明距离的本质就是将异或操作的结果求和。

4.3 曼哈顿距离与海明距离

如果曼哈顿距离的每个维度要么取0要么取1,那就变成了海明距离。换句话说,海明距离是曼哈顿距离的一个特例。

第5节 长度衡量小结

欧式距离、曼哈顿距离、海明距离都是用来衡量长度上的差异。
程序员数学之距离度量(卢菁老师) - 图17

第6节 角度衡量

用角度衡量两个点差异的时候,角度距离的取值范围为0°~180°
在欧式距离或曼哈顿距离中,长度距离范围为0~正无穷
海明距离中,长度距离范围为0~n(n为维度数量)
程序员数学之距离度量(卢菁老师) - 图18

6.1 角度度量应用

假设有一个新闻网站,网名A、B、C在不同频道花费时间如下表格:

用户 军事频道花费时间 美容频道花费时间
A 20 1
B 50 4
C 2 5

问题:AB的距离近?还是AC的距离近?
假如用欧式距离计算。
程序员数学之距离度量(卢菁老师) - 图19
AB之所以远是因为B上网的时间比较长,但是通过在两个频道花费的时间比例来看,AB应该更近。还有通常而言军事频道男生看得比较多,美容频道女生看得比较多。那么这就需要度量上网时间分配比例,而不是时间长度。
程序员数学之距离度量(卢菁老师) - 图20
角度度量的距离,更多的是衡量在各个维度上的比例差异,而和绝对数值关系不大。

6.2 相似度

相似度越大,夹角越小,相似度越小,夹角越大。
也就是说相似度越大的,他们的距离就越近,越小的距离就越远。
程序员数学之距离度量(卢菁老师) - 图21
计算AB、AC的相似度

用户 军事频道花费时间 美容频道花费时间
A 20 1
B 50 4
C 2 5

夹角:
程序员数学之距离度量(卢菁老师) - 图22
相似度:
程序员数学之距离度量(卢菁老师) - 图23

6.3 相似度公式

程序员数学之距离度量(卢菁老师) - 图24

第7节 总结

距离 度量 补充
欧式距离 两点(直线上、平面上、三维空间、n维空间)间的直线距离。 有两个修正版本
1、维度不一致
2、不同电影的权重问题
曼哈顿距离 两点(直线上、平面上、三维空间、n维空间)间的实际距离。比如:比如通过网络打车的场景。他们的距离并不是直线的。
海明距离 度量不同位置的差异,不同为1,相同为0 1、它是一种特殊的曼哈顿距离。
2、常用于二进制编码,本质上是异或运算再求和
角度距离 度量两点分别直线经过原点形成的夹角。把夹角转换成相似度进行求解。 相似度的取值范围:[-1,1]
对直线长度不敏感。
主要考察在不同维度上比例的差异。