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

sklearn OrdinalEncoder拟合时报未知类别ValueError解决方案

错误原因

报错核心是OrdinalEncoder的categories参数配置和实际数据完全不匹配:

  • 你初始化编码器时传入categories=[['A','B'],['Low','High']],相当于告诉编码器:待编码的第一列(光照列A)仅存在'A'、'B'两个合法取值,第二列(浇水列B)仅存在'Low'、'High'两个合法取值。
  • 但实际生成的exp_df里,A列存储的取值是'On'和'Off',根本不在预设的类别列表中,拟合阶段编码器识别到未登记的类别,直接抛出ValueError。
    另外代码中定义的OHE_model = OneHotEncoder(handle_unknown = 'ignore')全程没有被调用,属于冗余代码。
修正方案

只需要把OrdinalEncoder的类别配置改成和实际列取值一一对应即可,修正后可正常运行的完整代码如下:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import statsmodels
from sklearn.preprocessing import OrdinalEncoder,OneHotEncoder

Light = ['On','Off']
Watering = ['Low','High']
# 生成全参数组合实验数据
experiments = [(x,y) for x in Light for y in Watering]
exp_df = pd.DataFrame(experiments,columns=['A','B'])
print(exp_df)

# 修正:类别列表和列取值对应,第一列匹配Light取值,第二列匹配Watering取值
enc = OrdinalEncoder(categories=[Light, Watering])

encoded_df = pd.DataFrame(enc.fit_transform(exp_df[['A','B']]),columns=['A','B'])
# 随机生成实验顺序
encoded_df['exp_order'] = np.random.choice(np.arange(4),4,replace=False)
encoded_df['outcome'] = [25,37,55,65]
print(encoded_df)

运行后不会再抛出类别未知错误,编码结果会按照你预设的['On','Off']、['Low','High']顺序映射为0、1数值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 01:27:25