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

为何使用sklearn KMeans拟合模型后数据集发生改变?

问题根源与修正方案

你的数据集变化不是KMeans导致的,是预处理阶段的独热编码操作错误,加上参数拼写问题,具体问题和解决方法如下:

核心问题

  1. 独热编码赋值错误:OneHotEncoder处理二元分类变量Private时,会生成2列结果(比如Private_Yes和Private_No),但你直接把二维数组赋值给data["Private"]这一列,导致该列每个单元格变成了长度为2的数组,直接破坏了数据集结构。
  2. KMeans参数拼写错误:代码里写的是n_cluster,正确参数名是n_clusters,运行时会直接报错。

修正后的完整代码

# 复制原数据,避免破坏原始数据集
data_processed = data.copy()

# 标准化数值变量
num_vars = data_processed.columns[1:]
scaler = StandardScaler()
data_processed[num_vars] = scaler.fit_transform(data_processed[num_vars])

# 正确执行独热编码
ohe = OneHotEncoder(sparse_output=False)
# 对Private列编码,得到二维数组
private_encoded = ohe.fit_transform(data_processed[["Private"]])
# 将编码后的列添加到数据集,用自动生成的列名(如Private_Yes、Private_No)
data_processed[ohe.get_feature_names_out(["Private"])] = private_encoded
# 删除原Private列
data_processed.drop("Private", axis=1, inplace=True)

# 初始化KMeans(修正参数名,添加random_state保证结果可复现)
km = KMeans(n_clusters=6, random_state=42)
# 用处理好的特征矩阵拟合模型
km.fit(data_processed)

# 可选:将聚类标签加入数据集
data_processed["cluster_label"] = km.labels_

补充说明

  • KMeans的fit()方法不会修改输入数据集,它只计算聚类中心和标签,你看到的数据集变化完全是预处理时错误赋值独热编码导致的。
  • 处理分类变量时,尽量避免直接修改原数据集的列结构,用复制后的数据集操作更安全。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 19:55:10