You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将相似度表转换为696×696矩阵?附数据集与需求

商品相似度矩阵生成方案(用于聚类)

数据集快照

"V1","V2","N"
16,17,0.065532029
16,30,0.070163826
17,30,0.053089888
29,30,0.068024596

数据背景

  • 预处理过程:从客户订单及订单内商品列表出发,统计同订单内商品对的共现次数,使用Jaccard Index计算商品间相似度,得到当前数据集。
  • 数据集说明:V1、V2为物料编号,N为商品间相似度指数;仅包含同订单共现的商品对,存在大量缺失对。
  • 需求目标:基于1-696共696个唯一物料编号,生成696×696的相似度矩阵,缺失商品对的相似度值设为0,用于后续商品聚类。

实现方案(Python + Pandas)

这是我常用的高效实现方式,适合快速处理这类矩阵生成需求:

import pandas as pd

# 1. 读取你的数据集(替换为实际文件路径)
# df = pd.read_csv("your_dataset.csv")
# 这里用示例数据模拟
df = pd.DataFrame({
    "V1": [16, 16, 17, 29],
    "V2": [17, 30, 30, 30],
    "N": [0.065532029, 0.070163826, 0.053089888, 0.068024596]
})

# 2. 生成全量物料编号(1到696)
all_materials = list(range(1, 697))

# 3. 构建对称数据:因为(V1,V2)和(V2,V1)的相似度是相同的
symmetric_df = pd.concat([
    df,
    df.rename(columns={"V1": "V2", "V2": "V1"})
]).drop_duplicates(subset=["V1", "V2"])

# 4. 生成相似度矩阵,缺失值填充为0
similarity_matrix = symmetric_df.pivot_table(
    index="V1",
    columns="V2",
    values="N",
    fill_value=0
)

# 5. 确保矩阵包含所有物料编号,避免遗漏无共现的商品
similarity_matrix = similarity_matrix.reindex(
    index=all_materials,
    columns=all_materials,
    fill_value=0
)

# 可选:转换为NumPy数组,方便直接传入聚类算法(如sklearn的KMeans)
similarity_array = similarity_matrix.values

关键说明

  • 为什么要构建对称数据?因为商品共现是双向的,比如商品16和17的相似度和17和16的完全一致,这样生成的矩阵才符合聚类算法的输入要求。
  • reindex步骤是核心:确保所有1-696的物料都出现在矩阵的行和列中,哪怕某个物料没有和任何其他商品共现,对应的行/列都会填充为0。
  • 生成的矩阵可以直接用于聚类,比如用sklearn.cluster.KMeans或者层次聚类算法。

内容的提问来源于stack exchange,提问作者M.A

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:57:15