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

使用UMAP对Spotify音频特征降维时丢失信息无法区分流行度聚类问题

问题核心原因
  • 特征区分度不足:你选取的danceability、liveness、energy属于音频本身的声学属性,和流行度的关联天然较弱,不同流行度等级的曲目在这三个特征上本身就存在大量重叠,没有天然的聚类边界。
  • UMAP默认无监督特性:原生无监督UMAP降维时不会使用你已有的流行度标签信息,只会按照特征本身的相似度排布点,所以如果特征本身区分度低,降维结果自然会完全重叠。
可落地的解决方案
  1. 先做特征有效性校验
    首先计算三个特征和离散化流行度的斯皮尔曼相关系数,如果所有系数绝对值都低于0.1,说明这三个特征本身就无法解释流行度的差异,要么新增特征(如歌手热度、歌曲流派、发行时间、时长等),要么调整研究方向,不需要再浪费时间调聚类参数。
  2. 改用半监督UMAP降维
    UMAP支持传入标签做半监督降维,会主动拉大不同类别样本的距离,仅需要修改一行代码即可:
# 原代码:X_reduced = reducer.fit_transform(X)
# 修改为:
X_reduced = reducer.fit_transform(X, y=y)
  1. 调整UMAP核心参数
    你当前的参数更偏向保留局部结构,不利于全局类别区分,可以尝试以下调整:
reducer = umap.UMAP(
    n_neighbors=50, # 从10提升到30-100区间,越大越关注全局结构
    min_dist=0.4, # 从0.1提升到0.3-0.5区间,增大簇之间的间隔
    metric='cosine', # 替换默认的欧氏距离,更适配音频特征的相似度计算
    random_state=42 # 固定随机种子保证结果可复现
)
  1. 优化可视化效果
    如果降维后仍然有轻度重叠,可以调整绘图参数提升区分度:
plt.figure(figsize=(10, 5))
plt.title('Projecting %d-dimensional data to 2D' % X.shape[1])
# 分三类分别绘制,使用不同标记+半透明效果避免遮挡
plt.scatter(X_reduced[y==-1, 0], X_reduced[y==-1, 1], c='yellow', s=20, alpha=0.7, marker='o', label='popularity=-1')
plt.scatter(X_reduced[y==0, 0], X_reduced[y==0, 1], c='red', s=20, alpha=0.7, marker='^', label='popularity=0')
plt.scatter(X_reduced[y==1, 0], X_reduced[y==1, 1], c='green', s=20, alpha=0.7, marker='s', label='popularity=1')
plt.colorbar(ticks=range(3), label='popularity value')
plt.legend()
plt.show()

如果以上调整都完成后仍然没有明显的聚类边界,说明你选取的特征集本身就不存在对应流行度的聚类结构,建议放弃聚类可视化,改用逻辑回归、随机森林等模型直接计算特征对流行度的影响系数,结果会更严谨。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 09:15:04