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

LabelEncoder未拟合错误排查:机器学习建模产品预测问题

解决LabelEncoder的Not_Fitted_Error问题

错误根源

  • 你每次调用LabelEncoder()都是创建全新的未拟合实例:训练时的编码器没保存,预测时又新建编码器(编码规则和训练时不一致),最后逆变换时又新建一个完全没经过fit的编码器,直接调用inverse_transform必然报错。
  • 预测数据的列名、大小写和训练数据不匹配,会导致编码逻辑混乱。

正确解决步骤

1. 训练阶段:保存每列对应的LabelEncoder实例

不要用apply一次性处理整个数据框,而是为每个特征列和目标列分别创建并保存编码器,这样后续预测才能复用训练时的编码规则:

from sklearn.preprocessing import LabelEncoder
import pandas as pd

# 原始数据
df = pd.DataFrame({
    'nature_of_business': ['Manufacturer', 'Services', 'Other', 'Manufacturer'],
    'industry': ['capitalgoods', 'Mining', 'capitalgoods', 'commercialservices'],
    'products': ['product1', 'product2', 'product3', 'product4']
})

# 为每列创建并保存编码器
le_nature = LabelEncoder()
le_industry = LabelEncoder()
le_product = LabelEncoder()

# 拟合并转换训练数据
df['nature_of_business'] = le_nature.fit_transform(df['nature_of_business'])
df['industry'] = le_industry.fit_transform(df['industry'])
df['products'] = le_product.fit_transform(df['products'])

# 后续拆分训练集、测试集、建模(示例)
X = df[['nature_of_business', 'industry']]
y = df['products']
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
from sklearn.neighbors import KNeighborsClassifier
knc = KNeighborsClassifier()
knc.fit(X_train, y_train)

2. 预测阶段:复用训练时保存的编码器

注意统一列名、大小写,用训练好的编码器转换新数据,逆变换用目标列的编码器:

# 新预测数据:列名和训练集一致,大小写统一
df_Predict = pd.DataFrame({
    'nature_of_business': ['Manufacturer'], 
    'industry': ['capitalgoods']  # 和训练数据的小写格式保持一致
})

# 用训练好的编码器转换新数据(只调用transform,禁止重新fit!)
df_encoded_Predict = df_Predict.copy()
df_encoded_Predict['nature_of_business'] = le_nature.transform(df_encoded_Predict['nature_of_business'])
df_encoded_Predict['industry'] = le_industry.transform(df_encoded_Predict['industry'])

# 执行预测
predictions = knc.predict(df_encoded_Predict)

# 用训练时拟合过的产品编码器逆变换,得到原始标签
print(le_product.inverse_transform(predictions))

关键注意点

  • 编码器必须拟合训练数据后保存,预测时只调用transform,绝对不能重新fit,否则编码规则会改变。
  • 新数据的列名、类别取值(包括大小写)必须和训练集完全一致,否则会出现未知类别错误。
  • 目标列的逆变换必须用训练时拟合过目标列的那个编码器(这里是le_product),不能新建LabelEncoder实例。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 06:05:36