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

如何整合多类型数据转换器实现KMeans无监督聚类?

解决方案:用ColumnTransformer整合多类型特征预处理并接入KMeans

核心思路

不同类型的列需要独立做针对性预处理,sklearn的ColumnTransformer专门用来处理这种多列不同转换的场景,再配合Pipeline把预处理流程和KMeans聚类串联起来,形成完整的端到端聚类流程。

完整代码示例

假设你的自定义DateTransformer已经实现了sklearn转换器接口(即包含fit()和transform()方法,输出数值型特征,比如将日期转为时间差、月份、季度等数值)。

import pandas as pd
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.cluster import KMeans
# 导入你自定义的日期转换器
from your_script import DateTransformer

# 1. 加载CSV数据
df = pd.read_csv("your_dataset.csv")

# 2. 定义不同类型的列(替换成你实际的列名)
numeric_cols = ["数值列A", "数值列B"]
text_cols = ["文本列"]
date_cols = ["日期列"]

# 3. 配置各列的预处理规则
preprocessor = ColumnTransformer(
    transformers=[
        # 数值列:标准化处理
        ("numeric_transform", StandardScaler(), numeric_cols),
        # 文本列:TF-IDF转换,限制最大特征数避免维度爆炸
        ("text_transform", TfidfVectorizer(max_features=1000), text_cols[0]),
        # 日期列:用自定义转换器处理
        ("date_transform", DateTransformer(), date_cols)
    ])

# 4. 构建完整聚类管道:预处理 + KMeans
cluster_pipeline = Pipeline(steps=[
    ("preprocess", preprocessor),
    ("kmeans", KMeans(n_clusters=3, random_state=42))  # 聚类数可根据业务需求调整
])

# 5. 拟合数据并生成聚类标签
cluster_pipeline.fit(df)
df["cluster_label"] = cluster_pipeline.predict(df)

# 查看聚类结果分布
print(df["cluster_label"].value_counts())

关键细节说明

  • ColumnTransformer的作用:分别对指定列应用对应转换器,自动将所有转换后的特征拼接成统一的二维特征矩阵,供KMeans输入。
  • TfidfVectorizer注意事项:该转换器默认只处理单文本列,若有多个文本列,需为每个列单独定义TF-IDF转换规则。
  • 自定义DateTransformer要求:必须输出二维数值数组(形状为(样本数, 特征数)),比如提取日期的年份、月份两个特征时,输出应为(n_samples, 2),才能和其他特征正常拼接。
  • Pipeline的优势:将预处理和聚类打包成一个整体,避免手动处理时出现的数据泄露问题,后续若需交叉验证也能直接复用管道。

调试建议

如果出现特征拼接错误,可通过以下步骤排查:

  • 单独运行preprocessor.fit_transform(df),查看转换后特征矩阵的形状,确认各部分特征数之和等于总特征数。
  • 检查DateTransformer的transform输出是否为二维数组,若为一维数组,可通过reshape(-1, 1)转换为二维格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 17:45:07