我正在尝试根据产品的差异(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)
结果似乎在图形上起作用,并且簇图将不同的项目组合在一起,但是我想确认使用诸如欧几里德距离逆的方法是合适的。
如果是,您是否知道使用类似方法的任何文献?
如果没有,那么是否存在适合此类分析的指标? 本质上,我正在寻找一种指标,该指标将为最不相似的向量分配较小的距离。
答案 0 :(得分:1)
通过差异进行聚类没有任何意义。如果a
和b
非常相似,并且b
和c
非常相似,那么a
和c
至少非常相似,但是如果a
和b
高度不同,而b
和c
高度不同,则不会告诉我们a
和{{ 1}}是。它们可能是相同的。
您的聚类“指标”从根本上被破坏了。它不满足三角形不等式;无法保证c
。
这里的集群方法是错误的。