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

Sklearn OrdinalEncoder中unknown_value与encoded_missing_value的区别

Sklearn OrdinalEncoder:unknown_value 与 encoded_missing_value 的区别

核心区别

  • unknown_value:仅针对训练过程中未出现过的未知类别生效,必须配合handle_unknown="use_encoded_value"使用。当遇到不在训练集类别列表里的新数据时,会将其编码为该参数指定的值。
  • encoded_missing_value:专门用于指定原始数据中缺失值(如np.nan、None)的编码结果,理论上和未知类别是两个独立的处理分支。

代码问题分析

你在sklearn 1.1.1版本中修改encoded_missing_value没有效果,是因为这个版本的源码存在逻辑混淆:缺失值会被归类到"未知值"的处理分支中,导致encoded_missing_value参数没有被正确触发,缺失值和未知类别都被映射到了unknown_value指定的-1上。

看你的测试代码:

import numpy as np
from sklearn.preprocessing import OrdinalEncoder
import sklearn
print(sklearn.__version__)
print()
ordinal_encoder_1 = OrdinalEncoder(
    categories = [["a", "b", "c", "d", "e", "f", "g"]],
    handle_unknown="use_encoded_value",
    unknown_value=-1,
    #encoded_missing_value=-2
)
print(ordinal_encoder_1.fit_transform([[np.nan],["a"], ["a"], ['asdf'], [None], ["b"], ["c"]]))

输出结果里,np.nan、None和未知类别'asdf'都被编码成了-1,这就是旧版本逻辑混淆导致的问题。该问题在后续sklearn版本中已被修复,新版本里缺失值会使用encoded_missing_value指定的值,未知类别则用unknown_value处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 23:06:33