【发布时间】:2020-03-16 00:02:00
【问题描述】:
我有 100 个用户喜欢/不喜欢 500 件商品。 所以,我用二进制值对矩阵进行了转换,也就是说,如果用户 u1 喜欢某个项目 I1,则值为 1,如果他不喜欢该项目,则值为 0。
矩阵如下所示:
所以,现在我需要对喜欢相似项目的相似用户进行聚类。我使用 K-modes 聚类对它们进行聚类,但我的轮廓分数非常低。我不确定我应该使用哪个距离度量。 欧几里得距离不是解决这个问题的好方法。如果我的数据集很大,Jaccard 距离也不是很有效。我应该使用哪个其他距离度量来降低模型的成本。
【问题讨论】:
-
严格回答问题,我建议
cosine或hammingdistance。但在此之前,我想问一下你是如何构建这个矩阵的?通常用实数代替二进制值,并通过计算“项目”和“用户”之间的相似度得分来获得这些数字。 -
我猜stats.stackexchange.com/questions/58706/…是相关的,那里的答案可以在这里使用吗?
-
@SiddhantTandon 我同时使用了余弦和汉明。价值观还是很差。我不知道如何提高我的剪影分数。为了构建矩阵,我使用了 dataset.pivot_table() 函数。而且,我使用了 preprocessing.LabelEncoder() 并将其应用于 pivot_table。如果您有兴趣,下面是代码 sn-p。
pivot_table = dataset.pivot_table(values='Checked', index='USERID', columns = 'ITEMID').fillna(0); le = preprocessing.LabelEncoder(); pivot_table = pivot_table.apply(le.fit_transform) -
@PH 因此,如果用户喜欢该项目,则您只有
yes的信息,如果不喜欢该项目,则为no。而且items没有其他信息吗?如果你有一些文本需要处理,通常你必须使用tf-idfstuff 来构造itemprofiles。 -
@SiddhantTandon。不,没有关于项目的信息。只有 itemID 和 itemName 存在。我不需要了解更多关于项目的信息,因为我正在对喜欢相似项目的用户进行聚类。所以,只有“喜欢/不喜欢”的信息就足以对它们进行聚类!此外,没有可使用的文本!很容易将 itemID 与其 itemDescription 集成。但是,我不需要知道这些。因此,我已将其从数据框中删除。
标签: python machine-learning math cluster-analysis k-means