如何通过不相似而非相似来聚类?使用逆欧几里得距离可以接受吗?

时间:2019-05-02 22:05:27

标签: python pandas dataframe seaborn hierarchical-clustering

我正在尝试根据产品的差异(strong)不同来集群产品套件,而不是根据产品的相似度进行集群。 也就是说,如果Product1在第1周卖出而不在第2周卖出,我想将其与在第1周没有卖出但在第2周卖出的产品配对。

作为最终产品,我想提出一个深海的簇图,说明产品之间的逆向关系。

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

下面的示例代码:

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

np.random.seed(0)
a = np.random.randint(2,size=(5,10))

样本数据框,五个具有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())

比较簇图,欧几里得vs逆:

sns.clustermap(df,col_cluster=False)

sns.clustermap(df,
               col_cluster=False,
              metric=invEucl)

结果似乎在图形上起作用,并且簇图将不同的项目组合在一起,但是我想确认使用诸如欧几里德距离逆的方法是合适的。

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

如果没有,那么是否存在适合此类分析的指标? 本质上,我正在寻找一种指标,该指标将为最不相似的向量分配较小的距离。

1 个答案:

答案 0 :(得分:1)

通过差异进行聚类没有任何意义。如果ab非常相似,并且bc非常相似,那么ac至少非常相似,但是如果ab高度不同,而bc高度不同,则不会告诉我们a和{{ 1}}是。它们可能是相同的。

您的聚类“指标”从根本上被破坏了。它不满足三角形不等式;无法保证c

这里的集群方法是错误的。