我试图根据一组产品的不同程度而不是相似程度来对它们进行聚类。 也就是说,如果产品 1 在第 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))
示例数据框,五种产品,包含 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)
结果似乎以图形方式工作,聚类图将不同的项目分组在一起,但我想确认使用欧几里得距离的倒数之类的东西是合适的。
如果是,您是否知道任何使用类似方法的文献?
如果没有,是否有适合此类分析的指标? 本质上,我正在寻找一种度量,可以为最不相似的向量分配较小的距离。
最佳答案
通过相异性进行聚类没有任何意义。如果a
和b
高度相似,且b
和c
高度相似,则a
和c
至少非常相似,但是如果 a
和b
非常不同,并且b
和c
非常不同,这并没有告诉我们有多么相似或不同a
和c
是。它们可能是相同的。
您的集群“指标”从根本上被破坏了。不满足三角不等式;不能保证dist(a, c) <= dist(a, b) + dist(b, c)
.
聚类在这里是错误的方法。
关于python - 如何通过不相似性而不是相似性进行聚类?使用反欧几里德距离可以接受吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55960851/