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
相关产品推荐
相关产品推荐

