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

如何预处理pandas字符串数据表以适配sklearn聚类算法

原始数据样例

GroupsRoleUserOccurences
GUSDEFAULT_MPASTYP47251
RSSDEFAULT_RPASTYP27057
RRDDEFAULT_MDANART21251
NBDDEFAULT_RBONEE17933
GTSDEFAULT_QBONEE16067

问题解答

1. 能否直接对字符串类型DataFrame使用sklearn K-Means算法?

不能。K-Means聚类的核心逻辑基于特征的数值距离(通常为欧式距离)计算,字符串类型的特征无法直接参与数值运算,因此必须先将所有特征转换为数值格式后才可输入模型。

2. 无需手动维护映射字典的特征转换方法

以下两种方案均无需手动编写类别映射表,可直接输出模型可识别的数值特征:

  • 独热编码(适用于低基数分类特征,比如Groups、Role字段)
    直接调用pandas的get_dummies或者sklearn的OneHotEncoder即可自动完成分类值到数值的映射,适合类别数量较少的字段,特征可解释性强。
    代码示例:

    import pandas as pd
    from sklearn.preprocessing import OneHotEncoder
    import numpy as np
    
    # 假设df为你的原始DataFrame
    # 方法1:pandas快速实现
    encoded_df = pd.get_dummies(df, columns=['Groups', 'Role', 'User'], dtype=int)
    final_features = encoded_df.values
    
    # 方法2:sklearn实现,支持后续未知类别自动处理,更适合生产环境
    encoder = OneHotEncoder(sparse_output=False, handle_unknown='ignore')
    cat_features = encoder.fit_transform(df[['Groups', 'Role', 'User']])
    # 合并原有的数值列Occurences
    final_features = np.hstack([cat_features, df[['Occurences']].values])
    
  • 特征哈希编码(适用于高基数分类特征,比如User字段)
    如果User字段的唯一值数量较多,独热编码会导致特征维度爆炸,可使用FeatureHasher固定输出特征维度,无需维护类别映射表,内存占用更低。
    代码示例:

    from sklearn.feature_extraction import FeatureHasher
    import numpy as np
    
    # n_features可根据数据量调整,一般取2的幂次可减少哈希冲突
    hasher = FeatureHasher(n_features=128, input_type='string')
    # 转换分类字段
    cat_features = hasher.fit_transform(df[['Groups', 'Role', 'User']].astype(str).values.tolist()).toarray()
    # 合并数值列
    final_features = np.hstack([cat_features, df[['Occurences']].values])
    

优化提示:你的最终目标是得到用户维度的分组簇,建议先将原始数据按User字段聚合,统计每个用户对应各分组、角色的出现次数总和,再做编码和聚类,聚类结果会更贴合业务需求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 18:54:01