Python 一个集群如何通过差异而不是相似性来划分?使用逆欧几里德距离是否可以接受?

Python 一个集群如何通过差异而不是相似性来划分?使用逆欧几里德距离是否可以接受?,python,pandas,dataframe,seaborn,hierarchical-clustering,Python,Pandas,Dataframe,Seaborn,Hierarchical Clustering,我试图根据产品的不同程度,而不是相似程度,对一套产品进行分类。 也就是说,如果Product1在第1周销售而在第2周未销售,我想将其与在第1周未销售但在第2周销售的产品配对 作为最终产品,我想展示一个seaborn clustermap,说明产品之间的反向关系 我尝试使用欧几里德距离的倒数作为聚类度量,而不是欧几里德距离。为了完成这项任务 示例代码如下: import numpy as np import seaborn as sns import pandas as pd np.random

我试图根据产品的不同程度,而不是相似程度,对一套产品进行分类。 也就是说,如果Product1在第1周销售而在第2周未销售,我想将其与在第1周未销售但在第2周销售的产品配对

作为最终产品,我想展示一个seaborn clustermap,说明产品之间的反向关系

我尝试使用欧几里德距离的倒数作为聚类度量,而不是欧几里德距离。为了完成这项任务

示例代码如下:

import numpy as np
import seaborn as sns
import pandas as pd

np.random.seed(0)
a = np.random.randint(2,size=(5,10))
示例dataframe,五个产品,包含10“周”的数据。1=销售额,0=无销售额

df = pd.DataFrame(a, 
                  index='Product1 Product2 Product3 Product4 Product5'.split(),
                  columns=np.arange(1,11))
定义距离度量,欧氏距离的倒数:

invEucl = lambda u, v: 1 / np.sqrt(((u-v)**2).sum())
比较聚类图,欧几里德与逆:

sns.clustermap(df,col_cluster=False)

sns.clustermap(df,
               col_cluster=False,
              metric=invEucl)
结果似乎是图形化的,clustermap将不同的项目分组在一起,但我想确认使用欧几里德距离的倒数是合适的

如果是,您是否知道有任何文献使用类似的方法

如果没有,是否有适合此类分析的指标?
本质上,我在寻找一个度量,它将为最不相似的向量分配一个较低的距离。

通过不相似性进行聚类没有任何意义。如果
a
b
高度相似,并且
b
c
高度相似,那么
a
c
至少是非常相似的,但是如果
a
b
高度不同,并且
b
c
高度不同,这并没有告诉我们
a
c
有多相似或不同。它们可能是相同的


您的集群“度量”从根本上被打破了。它不满足三角形不等式;不能保证通过相异性进行的dist(a,c)聚类没有任何意义。如果
a
b
高度相似,并且
b
c
高度相似,那么
a
c
至少是非常相似的,但是如果
a
b
高度不同,并且
b
c
高度不同,这并没有告诉我们
a
c
有多相似或不同。它们可能是相同的。通常我会建议对相似的项目进行聚类,然后从检测到的聚类中检测异常值,以找到那些“不属于”且与所有聚类都相距较远的点。或者,您可能只是在距离矩阵中查找N个最大值。