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

sklearn使用OrdinalEncoder报handle_unknown意外关键字参数错误如何解决

问题排查与解决方法

错误核心原因

你遇到的__init__() got an unexpected keyword argument 'handle_unknown'报错,是因为你本地安装的scikit-learn版本过低:handle_unknown和unknown_value两个参数是scikit-learn 0.24版本才正式加入OrdinalEncoder的,低于该版本的环境无法识别这两个入参。
另外你的代码还存在一个隐藏问题:OrdinalEncoder要求输入为二维数组,你直接传入一维的Series(train_d['Language'])会触发维度不匹配的报错。

解决方案

方案1:升级scikit-learn到符合要求的版本(推荐)

直接执行升级命令:

pip install --upgrade scikit-learn
# 用conda管理环境的话执行
# conda install scikit-learn>=0.24

升级完成后可执行以下代码确认版本:

import sklearn
print(sklearn.__version__)

版本确认≥0.24后,修正维度问题后的可运行代码如下:

from sklearn.preprocessing import OrdinalEncoder
import pandas as pd

# 你的示例数据转DataFrame
df = pd.DataFrame(df)
# 这里省略你拆分train_d和test_d的逻辑

oe_l = OrdinalEncoder(handle_unknown ='use_encoded_value',unknown_value = -1)
oe_y = OrdinalEncoder(handle_unknown ='use_encoded_value', unknown_value = -1)

# 用[[]]取列得到二维数组输入
oe_l.fit(train_d[['Language']])
oe_y.fit(train_d[['Year']])

train_d['Language'] = oe_l.transform(train_d[['Language']])
test_d['Language'] = oe_l.transform(test_d[['Language']])

train_d['Year'] = oe_y.transform(train_d[['Year']])
test_d['Year'] = oe_y.transform(test_d[['Year']])

方案2:无法升级版本的兼容处理

如果你的环境不能升级scikit-learn,就手动实现未知值的处理逻辑,代码如下:

from sklearn.preprocessing import OrdinalEncoder
import pandas as pd
import numpy as np

df = pd.DataFrame(df)
# 省略拆分train_d、test_d的逻辑

# 初始化时不传不存在的参数
oe_l = OrdinalEncoder()
oe_y = OrdinalEncoder()

# 拟合+处理训练集
train_d['Language'] = oe_l.fit_transform(train_d[['Language']])
# 处理测试集未知值:不在训练集类别里的统一赋值为-1
test_d['Language'] = test_d['Language'].apply(lambda x: oe_l.transform([[x]])[0][0] if x in oe_l.categories_[0] else -1)

train_d['Year'] = oe_y.fit_transform(train_d[['Year']])
test_d['Year'] = test_d['Year'].apply(lambda x: oe_y.transform([[x]])[0][0] if x in oe_y.categories_[0] else -1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 08:12:03