如何调整sklearn中OrdinalEncoder的有序特征编码顺序
OrdinalEncoder自定义编码顺序方案
异常原因
OrdinalEncoder默认按分类值的字典序自动分配编码,不会匹配业务侧自定义的顺序逻辑,因此出现编码结果不符合预期的问题。
调整方法
直接通过OrdinalEncoder的categories参数手动指定每个特征的取值顺序,编码器会按照列表从左到右的顺序从0开始依次分配编码,完全匹配你的自定义规则。
单特征场景代码示例
from sklearn.preprocessing import OrdinalEncoder import numpy as np # 按excellent=0、good=1、average=2、bad=3的规则,从左到右排列取值 custom_categories = [['excellent', 'good', 'average', 'bad']] encoder = OrdinalEncoder(categories=custom_categories) # 测试编码 sample_data = np.array([['excellent'], ['bad'], ['good'], ['average']]) encoded_result = encoder.fit_transform(sample_data) print(encoded_result) # 输出结果:[[0.] [3.] [1.] [2.]],完全符合预期
可选:异常值兼容配置
如果测试数据可能出现不在预设分类里的未知取值,可以新增参数避免报错,将未知值统一编码为指定数值:
encoder = OrdinalEncoder( categories=[['excellent', 'good', 'average', 'bad']], # 开启未知值兼容 handle_unknown='use_encoded_value', # 未知值统一编码为4 unknown_value=4 )
多特征场景扩展
如果需要同时处理多个有序分类特征,按特征顺序依次传入每个特征的取值顺序列表即可:
# 第一个特征为评级、第二个特征为满意度的自定义顺序示例 multi_custom_categories = [ ['excellent', 'good', 'average', 'bad'], ['high', 'medium', 'low'] ] multi_encoder = OrdinalEncoder(categories=multi_custom_categories)
内容的提问来源于stack exchange,提问作者zjh1001
相关产品推荐
相关产品推荐

