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

基于用户ID数据集应用PCA聚类报ValueError的解决方案咨询

用户学习行为聚类PCA降维问题

基础信息

  • 数据集维度:(27884 行, 8933 列)
  • 全量数据包含27884名学生用户,8932个书籍章节学习行为字段,字段命名规则为b1~b8932
  • 字段规则:
    • user_iD:用户唯一身份标识
    • b1~b8932:单元格数值代表学生学习对应章节的先后顺序,数值0表示该学生未学习对应章节

数据集预览(小样本)

user_iDb1b2b3b4b5b6b7b8b9b10b11
117238040605
2781246591030
300001523406
417238050604
504706153002
610230540067

报错信息

执行PCA代码时抛出如下错误:

ValueError: Found array with 0 feature(s) (shape=(22307, 0)) while a minimum of 1 is required.

原问题中使用的错误实现代码如下:

df3 = pd.read_feather('Bundles.ftr')

X = df3['user_iD']
y = df3.loc[:, df3.columns != 'user_iD']

# Splitting the X and Y into the
# Training set and Testing set
from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 0)

# performing preprocessing part
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train= X_train.values.reshape(-1, 1)
X_test = X_test.values.reshape(-1, 1)
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)
# Applying PCA function on training
# and testing set of X component
from sklearn.decomposition import PCA

pca = PCA(n_components = 2)

X_train = pca.fit_transform(X_train)
X_test = pca.transform(X_test)

explained_variance = pca.explained_variance_ratio_
报错核心原因

原代码存在两处逻辑错误:

  1. 列赋值完全颠倒:把仅作为用户标识的单维度user_iD列赋值给了本该存放行为特征的变量X,反而把8932个章节学习特征全部赋值给了无意义的标签变量y,后续所有预处理、PCA计算都只在单列用户ID上执行,完全没有用到真正的行为特征,最终触发维度错误。
  2. 场景适配错误:用户学习行为聚类是无监督任务,不存在需要预测的标签,不需要做训练集、测试集拆分,全量样本直接参与降维即可。
正确实现方案
import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA

# 1. 加载数据
df3 = pd.read_feather('Bundles.ftr')

# 2. 分离用户ID和行为特征:ID列不参与降维计算
user_ids = df3['user_iD']
X = df3.drop(columns=['user_iD'])

# 3. 特征标准化:PCA对特征尺度敏感,必须执行标准化避免大数值特征干扰结果
sc = StandardScaler()
X_scaled = sc.fit_transform(X)

# 4. 执行PCA降维,若需要可视化可先设为2维,也可传入0.9自动保留90%方差
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_scaled)

# 5. 查看方差解释率,评估降维后的信息保留程度
explained_variance = pca.explained_variance_ratio_
print(f"各主成分方差解释率: {explained_variance}, 累计解释率: {explained_variance.sum():.2f}")

注意事项

  • 数据中数值0代表“未学习对应章节”,是有明确业务含义的有效值,不需要做缺失值填充,直接参与计算即可
  • 如果2个主成分的累计方差解释率低于50%,说明信息损失过多,可将n_components参数调整为0.8~0.9区间的数值,让PCA自动选择满足方差保留要求的最小维度数
  • 降维输出的X_pca矩阵可以直接输入KMeans、DBSCAN等聚类模型,完成用户学习行为分群

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 06:12:13