LabelEncoder逆转换报错:y包含未见过的标签[8 9]求助
解决LabelEncoder逆转换时出现"y contains previously unseen labels"的问题
你的问题核心出在复用了同一个LabelEncoder实例处理所有分类列:每次调用fit_transform都会重置编码器内部的标签映射关系,最后这个编码器只记住了最后一个被处理的分类列的标签信息。当你用它去逆转换其他列的编码值时,这些值不在最后一个列的标签映射里,就会抛出"未见过的标签"错误。
修复步骤:
- 为每个分类列单独保存编码器
用字典存储每一列对应的LabelEncoder实例,确保每个列的编码映射都被独立保存:
from sklearn.preprocessing import LabelEncoder label_encoders = {} # 字典:键是列名,值是对应列的LabelEncoder category = [] data_encoded = data_cleaned.copy() # 复制原数据,避免修改原始数据集 for col in data_cleaned.columns: if data_cleaned[col].dtype == 'category': category.append(col) le = LabelEncoder() # 对当前列进行编码并保存编码器 data_encoded[col] = le.fit_transform(data_cleaned[col]) label_encoders[col] = le
- 逆转换时调用对应列的编码器
循环处理分类列时,从字典中取出该列专属的编码器进行逆转换:
# 仅逆转换分类列 for col in category: X_test[col] = label_encoders[col].inverse_transform(X_test[col]) print(X_test[col])
额外提醒:
- 编码时一定要用
data_cleaned.copy()复制数据,否则会直接修改原始的data_cleaned数据集,可能导致后续流程出错; - 你先编码全量数据再删除缺失值的逻辑是对的,这部分不会导致标签遗漏,问题完全出在编码器的复用逻辑上。
内容的提问来源于stack exchange,提问作者namaw
相关产品推荐
相关产品推荐

