相似性度量

2024-05-20 04:13

1. 相似性度量

一、说明
  
 相似性度量用以描述两个向量之间的相似性,是一个值域为一维的二元函数。一般情况,相似性度量本质上指距离度量,只不过数值指示刚好相反,如果是距离的话,数值越小,距离越近,而相似度越大;如果是相似度的话,数值越小,相似度越小,而距离越大。
  
 相似性度量在机器学习中是一个非常基础的概念,尤其在聚类、推荐系统等算法中。
  
 在工程应用中,也会使用一些不完全满足距离度量基本性质的“非距离度量”[1]。
  
 二、距离度量的基本性质:
  
   非负性:dist(x,y) >= 0  
  
           同一性:dist(x,x) = 0  
  
           对称性:dist(x,y) = dist(y,x)  
  
           三角不等式:dist(x,z)+dist(y,z) >= dist(x,y)  
  
 三、常用相似性度量
  
 1、闵可夫斯基距离(Minkowski Distance)
                                          
 2、曼哈顿距离(Manhattan Distance)
  
 p=1时,闵可夫斯基距离就是曼哈顿距离
                                          
 又称城市街区距离,在方正的北京大街打车,行车距离就是曼哈顿距离,如果在山城重庆就不是了。
  
 3、欧氏距离(Euclidean Distance)
  
 p=2时,闵可夫斯基距离就是欧氏距离。
                                          
 在平面几何或者立体几何中的距离,通常就是欧氏距离,所以欧氏距离也最容易理解。
  
 4、切比雪夫距离(Chebyshev Distance)
  
 p等于无穷大时,闵可夫斯基距离就是切比雪夫距离。
                                          
 若将国际象棋棋盘放在二维直角坐标系中,格子的边长定义为1,座标的x轴及y轴和棋盘方格平行,原点恰落在某一格的中心点,则王从一个位置走到其他位置需要的最少步数恰为二个位置的切比雪夫距离,因此切比雪夫距离也称为 棋盘距离 。[2]
  
 5、"加权(weighted)"闵可夫斯基距离
  
 当样本中不同属性的重要性不同时,可使用"加权距离"(weighted distance)[1]。
                                          
 6、余弦相似度(Cosine Similarity)
                                          
 余弦相似性取值[-1,1],值越趋于1,表示两个向量的相似度越高。余弦相似度与向量的幅值无关,只与向量的方向相关,在文档相似度(TF-IDF)和图片相似性(histogram)计算上都有它的身影[3]。
  
 7、皮尔逊相关系数(Pearson Correlation)
  
 余弦相似度会受到向量的平移影响,怎样才能实现平移不变性?在余弦相似度的基础上,每个向量减去这个向量均值组成的向量,也就是皮尔逊相关系数,有时候也直接叫相关系数。
                                          
 当两个向量均值都为0时,皮尔逊相对系数等于余弦相似性。
  
 8、马氏距离(Mahalanobis Distance)
  
 一个向量的不同维度如果是不同的量纲,更有甚者,维度之间是相关的,比如身高和体重组成的向量,在闵可夫斯基距离中等同对待,有时,这样是不恰当的。马氏距离利用 Cholesky transformation 消除了不同维度之间的 相关性 和 尺度不同 [3]。
                                          
 其中,S为样本的协方差矩阵。当S是单位阵的时候,马氏距离就是欧式距离;当S是对角阵的时候,马氏距离是加权欧式距离。
  
 很多时候,一个事物的有点也可能会构成它的缺点。这里马氏距离可以消除不同维度之间的不同尺度,就可能放大了变化细微维度的作用[4]。
  
 我们可以按照连续性将属性分为“连续属性”和“离散属性”;也可以按照有序性将属性分为“有序属性”和“无序属性”[1]。上面的相似性度量都是关于“连续”并“有序”属性的,下面给出几个关于“离散属性”和“无序属性”的相似性度量。
  
 9、汉明距离(Hamming Distance)
  
 两个 等长字符串 s1与s2之间的 汉明距离定义为 将其中一个变为另外一个所需要作的最小替换次数。
  
 例如:字符串“1 11 1001 1 ”与“1 00 1001 0 ”之间的汉明距离为3。
  
 汉明距离可以在通信中累计定长二进制字中发生翻转的错误数据位,所以它也被称为信号距离。汉明重量分析在包括信息论、编码理论、密码学等领域都有应用。[5]
  
 如果要比较两个不同长度的字符串,不仅要进行替换,而且要进行插入与删除的运算,在这种场合下,通常使用更加复杂的 编辑距离 等算法。[5]
  
 10、杰卡德相似系数(Jaccard Similarity)
  
 杰卡德相似系数是衡量两个集合的相似度一种指标
                                          
 杰卡德相似系数是从相似性度量的角度来表述的,从距离度量的角度,则有 杰卡德距离(Jaccard Distance) 
                                          
 杰卡德相似系数和杰卡德距离本质上是一样的,只是表述角度不同。
  
 在聚类中,杰卡德相似系数可以作为聚类的性能度量[1]。在推荐系统中,杰卡德相似系数可以度量两个购买若干商品的用户之间的相似性[3]。
  
 11、KL散度(Kullback-Leibler Divergence)
  
 又叫相对熵,表示两个随机分布之间的相似性
                                          
 可以证明,KL散度大于等于0,当p=q时等于0;KL散度不满足对称性。
  
 12、Hellinger距离(Hellinger Distance)
  
 在七月算法的课程里,还讲了一个与KL散度类似的距离,表示随机分布之间的相似性的Hellinger距离
                                          
 当α=0时
                                          
 这时,Hellinger距离就是两个随机分布取平方根之后的欧式距离,符合距离度量的四个性质,是严格的距离度量。
  
 四、参考
  
 1、《机器学习》,周志华著
  
 2、 切比雪夫距离——百度百科 
  
 3、 漫谈机器学习中的距离和相似性度量方法 
  
 4、 马氏距离——百度百科 
  
 5、 汉明距离 
    
 链接:https://www.jianshu.com/p/9b7166997a3e
  
 来源:

相似性度量

2. 相似性度量

相似性度量用以描述两个向量之间的相似性,是一个值域为一维的二元函数。一般情况,相似性度量本质上指距离度量,只不过数值指示刚好相反,如果是距离的话,数值越小,距离越近,而相似度越大;如果是相似度的话,数值越小,相似度越小,而距离越大。
  
 相似性度量在机器学习中是一个非常基础的概念,尤其在聚类、推荐系统等算法中。
  
 在工程应用中,也会使用一些不完全满足距离度量基本性质的“非距离度量”[1]。
  
  
           非负性:dist(x,y) >= 0  
  
           同一性:dist(x,x) = 0  
  
           对称性:dist(x,y) = dist(y,x)  
  
           三角不等式:dist(x,z)+dist(y,z) >= dist(x,y)  
                                          
 p=1时,闵可夫斯基距离就是曼哈顿距离
                                          
 又称城市街区距离,在方正的北京大街打车,行车距离就是曼哈顿距离,如果在山城重庆就不是了。
  
  
 p=2时,闵可夫斯基距离就是欧氏距离。
  
                                          
 在平面几何或者立体几何中的距离,通常就是欧氏距离,所以欧氏距离也最容易理解。
  
  
 p等于无穷大时,闵可夫斯基距离就是切比雪夫距离。
  
                                          
 若将国际象棋棋盘放在二维直角坐标系中,格子的边长定义为1,座标的x轴及y轴和棋盘方格平行,原点恰落在某一格的中心点,则王从一个位置走到其他位置需要的最少步数恰为二个位置的切比雪夫距离,因此切比雪夫距离也称为 棋盘距离 。[2]
  
 当样本中不同属性的重要性不同时,可使用"加权距离"(weighted distance)[1]。
  
                                                                                  
 余弦相似性取值[-1,1],值越趋于1,表示两个向量的相似度越高。余弦相似度与向量的幅值无关,只与向量的方向相关,在文档相似度(TF-IDF)和图片相似性(histogram)计算上都有它的身影[3]。
  
 余弦相似度会受到向量的平移影响,怎样才能实现平移不变性?在余弦相似度的基础上,每个向量减去这个向量均值组成的向量,也就是皮尔逊相关系数,有时候也直接叫相关系数。
  
                                          
 当两个向量均值都为0时,皮尔逊相对系数等于余弦相似性。
  
 一个向量的不同维度如果是不同的量纲,更有甚者,维度之间是相关的,比如身高和体重组成的向量,在闵可夫斯基距离中等同对待,有时,这样是不恰当的。马氏距离利用 Cholesky transformation 消除了不同维度之间的 相关性 和 尺度不同 [3]。
  
                                          
 其中,S为样本的协方差矩阵。当S是单位阵的时候,马氏距离就是欧式距离;当S是对角阵的时候,马氏距离是加权欧式距离。
  
 很多时候,一个事物的有点也可能会构成它的缺点。这里马氏距离可以消除不同维度之间的不同尺度,就可能放大了变化细微维度的作用[4]。
  
 我们可以按照连续性将属性分为“连续属性”和“离散属性”;也可以按照有序性将属性分为“有序属性”和“无序属性”[1]。上面的相似性度量都是关于“连续”并“有序”属性的,下面给出几个关于“离散属性”和“无序属性”的相似性度量。
  
 两个 等长字符串 s1与s2之间的 汉明距离定义为 将其中一个变为另外一个所需要作的最小替换次数。
  
 例如:字符串“1 11 1001 1 ”与“1 00 1001 0 ”之间的汉明距离为3。
  
  
 汉明距离可以在通信中累计定长二进制字中发生翻转的错误数据位,所以它也被称为信号距离。汉明重量分析在包括信息论、编码理论、密码学等领域都有应用。[5]
  
 如果要比较两个不同长度的字符串,不仅要进行替换,而且要进行插入与删除的运算,在这种场合下,通常使用更加复杂的 编辑距离 等算法。[5]
  
 杰卡德相似系数是衡量两个集合的相似度一种指标
  
                                          
 杰卡德相似系数是从相似性度量的角度来表述的,从距离度量的角度,则有 杰卡德距离(Jaccard Distance) 
  
                                          
 杰卡德相似系数和杰卡德距离本质上是一样的,只是表述角度不同。
  
  
 在聚类中,杰卡德相似系数可以作为聚类的性能度量[1]。在推荐系统中,杰卡德相似系数可以度量两个购买若干商品的用户之间的相似性[3]。
  
 又叫相对熵,表示两个随机分布之间的相似性
  
                                          
 可以证明,KL散度大于等于0,当p=q时等于0;KL散度不满足对称性。
  
 在七月算法的课程里,还讲了一个与KL散度类似的距离,表示随机分布之间的相似性的Hellinger距离
  
                                          
 当α=0时
                                          
 这时,Hellinger距离就是两个随机分布取平方根之后的欧式距离,符合距离度量的四个性质,是严格的距离度量。
  
  
 1、《机器学习》,周志华著
  
 2、 切比雪夫距离——百度百科 
  
 3、 漫谈机器学习中的距离和相似性度量方法 
  
 4、 马氏距离——百度百科 
  
 5、 汉明距离

3. 常见相似度衡量方法

参考邹博的PPT对5种常见的相似度的衡量方法进行一下汇总。
   1、  Minkowski distance :
                                          
 
  
 2、  Jaccard distance :
                                          
 
  
 3、  cosine similarity :
                                                                                  
 
  
 4、  pearson correlation coefficient :
                                          
 
  
 关于欧式距离、余弦相似度和pearson系数的关系可以查看 知乎上的讨论 。总结的说:
   a、 在数据标准化后,Pearson相关性系数、余弦相似度、欧式距离的平方可认为是等价的。
   b、 pearson相关系数是余弦相似度在维度值缺失情况下的一种改进。
  
 5、  Kullback-Leibler divergence(相对熵、KL散度) 
                                          
 
  
 a、 KL散度是不对称的,即P到Q的距离不等于Q到P的距离;
   b、 KL散度不满足三角距离公式,两边之和大于第三边,两边之差小于第三边。
  
 参考文献:
   1、  https://en.wikipedia.org/wiki/Minkowski_distance 
   2、  https://en.wikipedia.org/wiki/Simple_matching_coefficient 
   3、  https://en.wikipedia.org/wiki/Jaccard_index 
   4、  https://en.wikipedia.org/wiki/Cosine_similarity 
   5、  https://en.wikipedia.org/wiki/Pearson_correlation_coefficient 
   6、  https://en.wikipedia.org/wiki/Kullback%E2%80%93Leibler_divergence 
   7、  https://blog.csdn.net/u012885320/article/details/81059915 
   8、  https://blog.csdn.net/zb1165048017/article/details/48937135 
   9、  https://www.zhihu.com/question/19734616 
   10、  https://www.zhihu.com/question/41252833

常见相似度衡量方法

4. 相关度的相关度

 对于消费者来讲,你所销售的品牌、百货定位与所搜所得到的结果一致,并且在你得平台能够找到消费者所需求的商品,就有机会提高转化率或者产生二次、三次访问的机会,另外,相关度还体现在平台的风格、图片、设计上,甚至于一个文字连接的关联度、一个广告、一个标示都是体现相关度达成销售的结果。而对于国内的电子商务平台而言,相关度越高的,差异化和核心竞争力势必比其他平台一定要强,所以卖得好的平台我们因该多去虚心学习。 关于相关度,还它还直接会影响到可信度,我们也可理解为公信力。

5. 常见的相似度度量算法

        
   本文目录:
          
     定义在两个向量(两个点)上:点x和点y的欧式距离为:
                                             常利用欧几里得距离描述相似度时,需要取倒数归一化,sim = 1.0/(1.0+distance),利用numpy实现如下:
    python实现欧式距离 
     从名字就可以猜出这种距离的计算方法了。想象你在曼哈顿要从一个十字路口开车到另外一个十字路口,驾驶距离是两点间的直线距离吗?显然不是,除非你能穿越大楼。实际驾驶距离就是这个“曼哈顿距离”。而这也是曼哈顿距离名称的来源, 曼哈顿距离也称为城市街区距离(City Block distance)。
     (1)二维平面两点a(x1,y1)与b(x2,y2)间的曼哈顿距离
                                             (2)两个n维向量a(x11,x12,…,x1n)与 b(x21,x22,…,x2n)间的曼哈顿距离
                                              python实现曼哈顿距离: 
     
     国际象棋玩过么?国王走一步能够移动到相邻的8个方格中的任意一个。那么国王从格子(x1,y1)走到格子(x2,y2)最少需要多少步?自己走走试试。你会发现最少步数总是max( | x2-x1 | , | y2-y1 | ) 步 。有一种类似的一种距离度量方法叫切比雪夫距离。
     (1)二维平面两点a(x1,y1)与b(x2,y2)间的切比雪夫距离
                                             (2)两个n维向量a(x11,x12,…,x1n)与 b(x21,x22,…,x2n)间的切比雪夫距离
                                              python实现切比雪夫距离: 
     
     闵氏距离不是一种距离,而是一组距离的定义。
     两个n维变量a(x11,x12,…,x1n)与 b(x21,x22,…,x2n)间的闵可夫斯基距离定义为:
                                             其中p是一个变参数。
     当p=1时,就是曼哈顿距离
     当p=2时,就是欧氏距离
     当p→∞时,就是切比雪夫距离
     根据变参数的不同,闵氏距离可以表示一类的距离。
     闵氏距离,包括曼哈顿距离、欧氏距离和切比雪夫距离都存在明显的缺点。
     举个例子:二维样本(身高,体重),其中身高范围是150 190,体重范围是50 60,有三个样本:a(180,50),b(190,50),c(180,60)。那么a与b之间的闵氏距离(无论是曼哈顿距离、欧氏距离或切比雪夫距离)等于a与c之间的闵氏距离,但是身高的10cm真的等价于体重的10kg么?因此用闵氏距离来衡量这些样本间的相似度很有问题。
     简单说来,闵氏距离的缺点主要有两个:
     (1)将各个分量的量纲(scale),也就是“单位”当作相同的看待了。
     (2)没有考虑各个分量的分布(期望,方差等)可能是不同的。
     
     标准欧氏距离的定义
     标准化欧氏距离是针对简单欧氏距离的缺点而作的一种改进方案。标准欧氏距离的思路:既然数据各维分量的分布不一样,好吧!那我先将各个分量都“标准化”到均值、方差相等吧。均值和方差标准化到多少呢?这里先复习点统计学知识吧,假设样本集X的均值(mean)为m,标准差(standard deviation)为s,那么X的“标准化变量”表示为:
     而且标准化变量的数学期望为0,方差为1。因此样本集的标准化过程(standardization)用公式描述就是:
                                             标准化后的值 =  ( 标准化前的值  - 分量的均值 ) /分量的标准差
     经过简单的推导就可以得到两个n维向量a(x11,x12,…,x1n)与 b(x21,x22,…,x2n)间的标准化欧氏距离的公式:
                                             如果将方差的倒数看成是一个权重,这个公式可以看成是一种加权欧氏距离(Weighted Euclidean distance)。
     
     有M个样本向量X1~Xm,协方差矩阵记为S,均值记为向量μ,则其中样本向量X到u的马氏距离表示为:
                                             而其中向量Xi与Xj之间的马氏距离定义为:
                                             若协方差矩阵是单位矩阵(各个样本向量之间独立同分布),则公式就成了:
                                             也就是欧氏距离了。
     若协方差矩阵是对角矩阵,公式变成了标准化欧氏距离。
     马氏距离的优缺点:量纲无关,排除变量之间的相关性的干扰。
     
     几何中夹角余弦可用来衡量两个向量方向的差异,机器学习中借用这一概念来衡量样本向量之间的差异。
     在二维空间中向量A(x1,y1)与向量B(x2,y2)的夹角余弦公式:
                                             两个n维样本点a(x11,x12,…,x1n)和b(x21,x22,…,x2n)的夹角余弦
     类似的,对于两个n维样本点a(x11,x12,…,x1n)和b(x21,x22,…,x2n),可以使用类似于夹角余弦的概念来衡量它们间的相似程度。
                                             即:
                                             夹角余弦取值范围为[-1,1]。夹角余弦越大表示两个向量的夹角越小,夹角余弦越小表示两向量的夹角越大。当两个向量的方向重合时夹角余弦取最大值1,当两个向量的方向完全相反夹角余弦取最小值-1。
    python实现余弦相似度: 
     
     两个等长字符串s1与s2之间的汉明距离定义为将其中一个变为另外一个所需要作的最小替换次数。例如字符串“1111”与“1001”之间的汉明距离为2。
     应用:信息编码(为了增强容错性,应使得编码间的最小汉明距离尽可能大)。
    python实现汉明距离: 
     
     两个集合A和B的交集元素在A,B的并集中所占的比例,称为两个集合的杰卡德相似系数,用符号J(A,B)表示。
                                             杰卡德相似系数是衡量两个集合的相似度一种指标。
     与杰卡德相似系数相反的概念是杰卡德距离(Jaccard distance)。杰卡德距离可用如下公式表示:
                                             杰卡德距离用两个集合中不同元素占所有元素的比例来衡量两个集合的区分度。
     可将杰卡德相似系数用在衡量样本的相似度上。
     样本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的维度的个数
     这里p+q+r可理解为A与B的并集的元素个数,而p是A与B的交集的元素个数。
     而样本A与B的杰卡德距离表示为:
                                             
     皮尔逊相关系数即为相关系数 ( Correlation coefficient )与相关距离(Correlation distance)
     相关系数的定义
                                             相关系数是衡量随机变量X与Y相关程度的一种方法,相关系数的取值范围是[-1,1]。相关系数的绝对值越大,则表明X与Y相关度越高。当X与Y线性相关时,相关系数取值为1(正线性相关)或-1(负线性相关)。
                                                            
   1. 机器学习中的相似性度量 
   2. 推荐算法入门(1)相似度计算方法大全 
   3. Python Numpy计算各类距离 
   4. 皮尔逊积矩相关系数 

常见的相似度度量算法

6. 相关性分析 相关系数多少有意义?

 在数据分析的问题中, 经常会遇见的一种问题就是 相关的问题。 
   比如:抖音短视频的产品经理经常要来问留存(是否留下来)和观看时长, 收藏的次数, 转发的次数, 关注的抖音博主数等等是否有相关性, 相关性有多大。
   因为 只有知道了哪些因素和留存比较相关, 才知道怎么去优化从产品的方向去提升留存率 。
   比如:如果留存和收藏的相关性比较大 那么我们就要引导用户去收藏视频, 从而提升相关的指标,
                                           除了留存的相关性计算的问题, 还有类似的需要去计算相关性的问题。
   比如淘宝的用户,他们的付费行为和哪些行为相关, 相关性有多大, 这样我们就可以挖掘出用户付费的关键行为。
    这种问题就是相关性量化, 我们要找到一种科学的方法去计算这些因素和留存的相关性的大小。 
   这种方法就是相关性分析。
    01 
    什么是相关性分析 
   相关性分析是指对两个或多个具备相关性的变量元素进行分析,从而衡量两个变量因素的相关密切程度。相关性的元素之间需要存在一定的联系或者概率才可以进行相关性分析(官方定义)
   简单来说, 相关性的方法主要用来分析两个东西他们之间的相关性大小。 
   相关性大小用相关系数r来描述,关于r的解读:(从知乎摘录)
   (1) 正相关: 如果x,y变化的方向一致,如身高与体重的关系,r>0;一般:
   |r|>0.95 存在显著性相关;
   |r|≥0.8 高度相关;
   0.5≤|r|<0.8 中度相关;
   0.3≤|r|<0.5 低度相关;
   |r|<0.3 关系极弱,认为不相关
   (2) 负相关 :如果x,y变化的方向相反,如吸烟与肺功能的关系,r<0;
   (3) 无线性相关: r=0, 这里注意, r=0 不代表他们之间没有关系, 可能只是不存在线性关系。
   下面用几个图来描述一下,不同的相关性的情况:
                                           第一张图r=-0.92 0.8 来看, 说明两组数据的相关性高度相关。
   同样的, 第二张图 r=0.88 >0 说明纵轴和横轴的数据呈现正向的关系, 随着横轴数据的值越来越大, 纵轴的值也随之变大, 并且两组数据也是呈现高度相关。
    02 
    如何实现相关性分析 
   前面已经讲了什么是相关性分析方法,  那么我们怎么去实现这种分析方法呢 , 以下先用python 实现 :
    1. 首先是导入数据集, 这里以tips 为例 
   import numpy asnpimport pandas aspdimport matplotlib.pyplot aspltimport seaborn assns%matplotlib inline## 定义主题风格sns. set(style= "darkgrid")## 加载tipstips = sns.load_dataset( "tips")
    2. 查看导入的数据集情况 
   字段分别代表:
   total_bill: 总账单数
   tip: 消费数目
   sex: 性别
   smoker: 是否是吸烟的群众
   day: 天气
   time: 晚餐 dinner, 午餐lunch
   size: 顾客数
   tips.head # 查看数据的前几行
                                            3. 最简单的相关性计算 
   tips.corr
                                            4. 任意看两个数据之间相关性可视化,比如看 total_bill 和 tip 之间的相关性,就可以如下操作进行可视化 
                                           从散点图可以看出账单的 数目和消费的数目基本是呈正相关 , 账单的总的数目越高, 给得消费也会越多。
    5. 如果要看全部任意两两数据的相关性的可视化: 
   sns.pairplot(tips)
                                            6. 如果要分不同的人群, 吸烟和非吸烟看总的账单数目total_bill和小费tip 的关系。 
   sns.relplot(x= "total_bill", y= "tip", hue= "smoker", data=tips)# 利用 hue进行区分 plt.show
                                           7. 区分抽烟和非抽烟群体看所有数据之间的相关性,我们可以看到:
   对于男性和女性群体, 在小费和总账单金额的关系上, 可以同样都是账单金额越高的时候, 小费越高的例子上, 男性要比女性给得小费更大方。
   在顾客数量和小费的数目关系上, 我们可以发现, 同样的顾客数量, 男性要比女性给得小费更多。
   在顾客数量和总账单数目关系上, 也是同样的顾客数量, 男性要比女性消费更多。
   sns.pairplot(tips ,hue = 'sex')
                                            03 
    实战案例 
    问题: 
   影响B 站留存的相关的关键行为有哪些?
   这些行为和留存哪一个相关性是最大的?
    分析思路: 
   首先规划好完整的思路, 哪些行为和留存相关, 然后利用这些行为+时间维度 组成指标, 因为不同的时间跨度组合出来的指标, 意义是不一样的, 比如登录行为就有 7天登录天数, 30天登录天数
                                           第二步计算这些行为和留存的相关性, 我们用1 表示会留存 0 表示不会留存
   那么就得到 用户id + 行为数据+ 是否留存 这几个指标组成的数据
   然后就是相关性大小的计算
   import matplotlib.pyplot aspltimport seaborn assnsretain2 = pd.read_csv( "d:/My Documents/Desktop/train2.csv") # 读取数据retain2 = retain2. drop(columns=[ 'click_share_ayyuid_ucnt_days7']) # 去掉不参与计算相关性的列plt.figure(figsize=( 16, 10), dpi= 80)# 相关性大小计算sns.heatmap(retain2.corr, xticklabels=retain2.corr.columns, yticklabels=retain2.corr.columns, cmap= 'RdYlGn', center= 0, annot=True)# 可视化plt.title( 'Correlogram of retain', fontsize= 22)plt.xticks(fontsize= 12)plt.yticks(fontsize= 12)plt.show
                                           图中的数字值就是代表相关性大小 r 值,所以从图中我们可以发现:
   留存相关最大的四大因素:

7. (转)各种类型的数据的相异度(相似度)的度量

  1.对于标量 
   标量也就是无方向意义的数字,也叫标度变量。现在先考虑元素的所有特征属性都是标量的情况。例如,计算X={2,1,102}和Y={1,3,2}的相异度。一种很自然的想法是用两者的欧几里得距离来作为相异度,欧几里得距离的定义如下:
                                           其意义就是两个元素在欧氏空间中的集合距离,因为其直观易懂且可解释性强,被广泛用于标识两个标量元素的相异度。将上面两个示例数据代入公式,可得两者的欧氏距离为:
                                           除欧氏距离外,常用作度量标量相异度的还有曼哈顿距离和闵可夫斯基距离,两者定义如下:
                                           欧氏距离和曼哈顿距离可以看做是闵可夫斯基距离在p=2和p=1下的特例。另外这三种距离都可以加权,这个很容易理解,不再赘述。
   下面要说一下标量的规格化问题。上面这样计算相异度的方式有一点问题,就是 取值范围大的属性对距离的影响高于取值范围小的属性 。例如上述例子中第三个属性的取值跨度远大于前两个,这样不利于真实反映真实的相异度,为了解决这个问题,一般要对属性值进行规格化。所谓规格化就是将各个属性值按比例映射到相同的取值区间,这样是为了平衡各个属性对距离的影响。通常将各个属性均映射到[0,1]区间,映射公式为:
                                           其中max(ai)和min(ai)表示所有元素项中第i个属性的最大值和最小值。例如,将示例中的元素规格化到[0,1]区间后,就变成了X’={1,0,1},Y’={0,1,0},重新计算欧氏距离约为1.732。
    2.对于二元变量 
   所谓二元变量是只能取0和1两种值变量,有点类似布尔值,通常用来标识是或不是这种二值属性。对于二元变量,上一节提到的距离不能很好标识其相异度,我们需要一种更适合的标识。一种常用的方法是用元素相同序位同值属性的比例来标识其相异度。
   设有X={1,0,0,0,1,0,1,1},Y={0,0,0,1,1,1,1,1},可以看到,两个元素第2、3、5、7和8个属性取值相同,而第1、4和6个取值不同,那么相异度可以标识为3/8=0.375。一般的,对于二元变量,相异度可用“取值不同的同位属性数/单个元素的属性位数”标识。
   上面所说的相异度应该叫做对称二元相异度。现实中还有一种情况,就是我们只关心两者都取1的情况,而认为两者都取0的属性并不意味着两者更相似。例如在根据病情对病人聚类时,如果两个人都患有肺癌,我们认为两个人增强了相似度,但如果两个人都没患肺癌,并不觉得这加强了两人的相似性,在这种情况下,改用“取值不同的同位属性数/(单个元素的属性位数-同取0的位数)”来标识相异度,这叫做非对称二元相异度。如果用1减去非对称二元相异度,则得到非对称二元相似度,也叫Jaccard系数,是一个非常重要的概念。
    3.对于分类变量 
   分类变量是二元变量的推广,类似于程序中的枚举变量,但各个值没有数字或序数意义,如颜色、民族等等,对于分类变量,用“取值不同的同位属性数/单个元素的全部属性数”来标识其相异度。
    4.对于序数变量 
   序数变量是具有序数意义的分类变量,通常可以按照一定顺序意义排列,如冠军、亚军和季军。对于序数变量,一般为每个值分配一个数,叫做这个值的秩,然后以秩代替原值当做标量属性计算相异度。
    5、向量 
   
   
                                           其中||X||表示X的欧几里得范数。
    要注意,余弦度量度量的不是两者的相异度,而是相似度! 
   参考文献:   算法杂货铺——k均值聚类(K-means) - T2噬菌体 - 博客园   http://www.cnblogs.com/leoo2sk/archive/2010/09/20/k-means.html    [各种类型的数据的相异度(相似度)的度量 #
    各种类型的数据的相异度(相似度)的度量    ]( http://blog.csdn.net/u010451580/article/details/53163634 )

(转)各种类型的数据的相异度(相似度)的度量

8. 相关度的概述

对搜索引擎来讲,就是指搜索请求(比如关键字)和搜索结果(比如网页)之间的关联程度。相关度计算是搜索引擎最重要的技术之一,例如有向量空间模型或者概率模型等计算方法。可以说,搜索引擎赢得了相关度技术,就赢得了用户;赢得了用户,就赢得了市场。对于垂直搜索引擎来说,除了常规的相关度算法,由于垂直搜索引擎植根于一个特定的领域,与特定领域的信息结合起来,发掘分析其中的深度数据,以实现更为精确的相关度算法,从而极大提升用户查询的准确度。