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

基于Python的DBSCAN识别相似评分与类型偏好用户的工作流是否正确?

问题分析与解答

核心问题:单用户数据下的DBSCAN工作流合理性

你当前的工作流存在本质逻辑错误——DBSCAN是用来对**多个样本(这里指多个用户)**进行聚类的算法,而你只有1个用户的数据,根本没有可聚类的样本群体,自然无法识别“相似偏好用户”。

具体问题拆解

  1. 数据维度错误
    你的数据结构是Title | User Score | Genre,这是单用户的评分记录,而用户偏好聚类需要的是多用户维度的数据:每个样本是一个用户,特征是该用户对不同类型的偏好(比如各类型的平均评分、观看占比等),或者用户的评分向量。

  2. 编码与特征处理的偏差
    你对Genre做独热编码后按Title和Score分组求和,得到的是每部作品的类型标记+评分,这本质还是单用户的作品维度数据,不是用户维度的特征,无法用来做用户聚类。

  3. 图表形态的原因
    你生成的类水平图表,本质是因为只有1个用户的样本(或者说你误把作品当用户样本),DBSCAN无法形成有效聚类,所有点的标签要么是-1(噪声)要么是同一个簇,所以呈现水平分布。而常见的环形DBSCAN图表,是多样本、多簇的聚类结果,和你的数据场景完全不同。

正确的方向调整

如果要做用户偏好聚类,你需要:

  • 收集多个用户的评分数据,每个用户对应一条样本
  • 构建用户级特征:比如统计每个用户在不同Genre下的平均评分、评分数量、偏好权重等
  • 再用DBSCAN(或K-Means等聚类算法)对用户样本进行聚类

如果只有单用户数据,你可以做的是该用户的作品聚类:比如把该用户评分的作品按类型+评分聚类,找出用户偏好的作品组,而不是用户聚类。

修正后的示例(单用户作品聚类)

import pandas as pd
from sklearn.cluster import DBSCAN
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt

# 假设单用户数据:Title | User Score | Genre
anime_dataframe = pd.DataFrame([
    {"Title": "A", "Score": 9, "Genre": "Action"},
    {"Title": "B", "Score": 8, "Genre": "Action"},
    {"Title": "C", "Score": 5, "Genre": "Romance"},
    {"Title": "D", "Score": 6, "Genre": "Romance"},
    {"Title": "E", "Score": 10, "Genre": "Sci-Fi"}
])

# 独热编码Genre,保留Score作为特征
anime_encoded = pd.get_dummies(anime_dataframe, columns=['Genre'], prefix='Genres')
features = anime_encoded.drop('Title', axis=1)

# 标准化+PCA降维
scaler = StandardScaler()
scaled_features = scaler.fit_transform(features)
pca = PCA(n_components=2)  # 用2维方便可视化
reduced_features = pca.fit_transform(scaled_features)

# DBSCAN聚类作品
dbscan = DBSCAN(eps=0.6, min_samples=2)
labels = dbscan.fit_predict(reduced_features)

# 可视化作品聚类结果
plt.figure(figsize=(8, 6))
plt.scatter(reduced_features[:, 0], reduced_features[:, 1], c=labels, cmap='viridis', s=50)
for i, title in enumerate(anime_dataframe['Title']):
    plt.annotate(title, (reduced_features[i, 0], reduced_features[i, 1]))
plt.title('单用户作品聚类结果(按类型+评分)')
plt.xlabel('主成分1')
plt.ylabel('主成分2')
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 18:44:57