同一数据集两类分类数据编码出错:OneHotEncoder逆变换失败的解决
解决OneHotEncoder重复拟合导致逆变换失败的问题
问题出在你复用了同一个OneHotEncoder实例——当你用它第二次调用fit_transform处理Issue列时,编码器内部存储的REASON NO列的类别映射信息会被完全覆盖,后续再对reason_no_enc做逆变换,编码器已经找不到对应的原始类别,自然报错。
给你两种可行的解决办法:
1. 为每一列单独创建编码器实例
给需要编码的每一列分配独立的OneHotEncoder,确保各自的类别信息互不干扰:
from sklearn.preprocessing import OneHotEncoder # 处理REASON NO列 enc_reason = OneHotEncoder() reason_no_enc = enc_reason.fit_transform(temp['REASON NO'].values.reshape(-1, 1)).toarray() # 处理Issue列 enc_issue = OneHotEncoder() issue_enc = enc_issue.fit_transform(temp['Issue'].values.reshape(-1, 1)).toarray()
之后逆变换时,直接用对应列的编码器即可:
# 还原REASON NO列的原始数据 original_reason = enc_reason.inverse_transform(reason_no_enc) # 还原Issue列的原始数据 original_issue = enc_issue.inverse_transform(issue_enc)
2. 一次性编码多列(推荐)
如果需要同时处理多列,可以直接把目标列传入编码器统一拟合,这样编码器会保留所有列的类别信息:
from sklearn.preprocessing import OneHotEncoder import pandas as pd # 选择需要编码的两列 target_cols = temp[['REASON NO', 'Issue']] enc = OneHotEncoder() # 一次性拟合并编码所有目标列 combined_enc = enc.fit_transform(target_cols).toarray() # 逆变换还原所有原始列数据 original_data = enc.inverse_transform(combined_enc) # 转为DataFrame方便查看 original_df = pd.DataFrame(original_data, columns=['REASON NO', 'Issue'])
内容的提问来源于stack exchange,提问作者def init
相关产品推荐
相关产品推荐

