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

PyCaret分类变量独热编码异常:分类列被错误归一化问题求助

问题解决方法

你的问题核心是PyCaret默认会根据分类变量的基数自动选择编码方式(基数低用独热编码,基数高用标签编码),而标签编码后的结果会被当作数值列参与归一化。要强制所有指定的分类变量使用独热编码并避免被归一化,按以下步骤修改代码:

  • 在setup中显式指定encoding_method='onehot',强制对所有分类变量执行独热编码,替代默认的自动编码逻辑。
  • 确保normalize参数明确设置(如果不需要归一化数值列可以设为False,如果需要则保持True,此时仅会对你指定的numeric_features列进行归一化,独热编码后的二进制列不会被处理)。

修改后的代码如下:

exp_clf01 = setup(
    data=dataset,
    target='income >50K',
    session_id=123,
    numeric_features=['age','education-num','capital-gain','capital-loss','hours-per-week'],
    categorical_features=['workclass','education','marital-status','occupation','relationship','race','sex','native-country'],
    encoding_method='onehot',  # 强制独热编码
    normalize=True  # 可选,根据需求设置,仅对numeric_features生效
)

执行后再查看df_transformed = get_config("X_train"),所有指定的分类变量都会被转换为独热编码的二进制列,不会出现归一化后的数值形式。

补充说明:如果部分分类变量基数极高(比如native-country),独热编码会生成大量特征,可能影响模型效率。这种情况下可以考虑对高基数变量使用其他编码方式(如目标编码),但如果你的需求就是全独热编码,上述设置即可解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 01:41:04