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

高维数据集层次聚类可视化:如何实现商品维度的聚类结果展示

层次聚类商品维度可视化解决方案

结论

层次聚类完全可以实现按商品维度展示聚类结果的需求,你的现有代码逻辑本身是正确的:你的DataFrame行索引为商品,每行的特征就是该商品在所有订单中的购买数量分布,调用sch.linkage(data)时默认就是对每行(每个商品)计算距离做聚类,生成的树状图x轴已经对应商品,本质就是商品维度的聚类结果。

现有代码优化

你的代码有几处可以调整优化,保证聚类结果和可视化一致:

  • 树状图生成的linkage方法要和后续聚类的方法保持一致,避免结果不匹配
  • 聚类结果直接赋值即可,无需额外转DataFrame

修正后代码如下:

import scipy.cluster.hierarchy as sch
from sklearn.cluster import AgglomerativeClustering
import matplotlib.pyplot as plt
import pandas as pd

# data为原始数据集,行索引为商品,列为订单
plt.figure(figsize=(16,8))
# linkage方法和后续聚类保持一致,此处用average和后面匹配
dendrogram = sch.dendrogram(sch.linkage(data, method="average"), labels=data.index.values)
plt.title('商品层次聚类树状图')
plt.xlabel('商品')
plt.ylabel('欧式距离')
plt.xticks(rotation=45) # 商品名称过长时可旋转避免重叠
plt.show()

hc = AgglomerativeClustering(n_clusters = 5, affinity = 'euclidean', linkage ='average')
y_hc = hc.fit_predict(data)
data['cluster'] = y_hc

拓展可视化方案

如果需要更直观的聚类分布展示,可以先对商品特征降维再按聚类标签着色:

t-SNE降维散点图示例

from sklearn.manifold import TSNE
import seaborn as sns

# 降维时需排除新增的cluster列
tsne = TSNE(n_components=2, random_state=42)
tsne_res = tsne.fit_transform(data.drop('cluster', axis=1))

# 绘制散点图
plt.figure(figsize=(10,8))
sns.scatterplot(
    x=tsne_res[:,0], 
    y=tsne_res[:,1],
    hue=data['cluster'],
    palette=sns.color_palette("hls", 5),
    alpha=0.8
)
# 可按需添加商品名称标签
for idx, product_name in enumerate(data.index):
    plt.text(tsne_res[idx,0], tsne_res[idx,1], product_name, fontsize=8)
plt.title('商品聚类结果t-SNE可视化')
plt.show()

聚类结果验证

可以按簇分组输出商品列表,验证聚类效果是否符合业务预期:

for cluster in range(5):
    print(f"簇{cluster}包含商品:")
    print(data[data['cluster'] == cluster].index.tolist())
    print("----------")

内容的提问来源于stack exchange,提问作者elchapo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 06:06:05