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

如何将DataFrame分类编码映射回原始数据并实现原始值预测?

分类编码映射与原始数据直接预测实现方案

一、保存编码映射关系

训练阶段需留存各特征列的编码器,以及目标列Size的编码-原始类别映射,确保后续能完成原始数据到编码的转换、预测结果到原始类别的还原。

1. 编码特征与目标列

以LabelEncoder为例(多列批量处理可用OrdinalEncoder),示例代码:

import pandas as pd
from sklearn.preprocessing import LabelEncoder
from sklearn.ensemble import AdaBoostClassifier

# 示例DataFrame
df = pd.DataFrame({
    'Year': ['2020', '2021', '2022'],
    'Airport': ['Yes', 'No', 'Yes'],
    'Casino': ['No', 'Yes', 'No'],
    'Stadium': ['Yes', 'Yes', 'No'],
    'Size': ['Small', 'Large', 'Medium']
})

# 为每个特征列创建并保存编码器
feature_encoders = {}
for col in ['Year', 'Airport', 'Casino', 'Stadium']:
    le = LabelEncoder()
    df[col] = le.fit_transform(df[col])
    feature_encoders[col] = le

# 处理目标列Size,生成编码到原始类别的映射
size_le = LabelEncoder()
df['Size'] = size_le.fit_transform(df['Size'])
size_code_to_label = {code: label for code, label in enumerate(size_le.classes_)}

2. 训练AdaBoost模型

X = df[['Year', 'Airport', 'Casino', 'Stadium']]
y = df['Size']

adaboost_model = AdaBoostClassifier()
adaboost_model.fit(X, y)

二、编写原始数据预测函数

实现一个函数,接收原始格式的输入数据,自动完成编码转换、模型预测、结果还原三步:

def predict_raw_size(raw_input):
    # 支持两种输入格式:按列顺序的列表,或带列名的字典
    encoded_features = []
    feature_cols = ['Year', 'Airport', 'Casino', 'Stadium']
    
    if isinstance(raw_input, dict):
        for col in feature_cols:
            # 将原始值转换为模型所需编码
            encoded_val = feature_encoders[col].transform([raw_input[col]])[0]
            encoded_features.append(encoded_val)
    else:
        # 列表输入需严格匹配feature_cols的顺序
        for idx, col in enumerate(feature_cols):
            encoded_val = feature_encoders[col].transform([raw_input[idx]])[0]
            encoded_features.append(encoded_val)
    
    # 预测编码并转回原始类别
    predicted_code = adaboost_model.predict([encoded_features])[0]
    return size_code_to_label[predicted_code]

# 测试调用
print(predict_raw_size(['2022', 'Yes', 'No', 'No']))  # 输出: Medium
print(predict_raw_size({'Year':'2021', 'Airport':'No', 'Casino':'Yes', 'Stadium':'Yes'}))  # 输出: Large

三、额外建议

  • 若使用OneHotEncoder处理特征,逻辑一致:保存编码器,预测时用其将原始数据转换为独热编码格式即可。
  • 为避免输入值不在训练集范围内导致报错,可在函数中添加异常捕获:
try:
    encoded_val = feature_encoders[col].transform([raw_input[col]])[0]
except ValueError:
    raise ValueError(f"输入值 {raw_input[col]} 不在列 {col} 的训练数据范围内")
  • 训练完成后,可将模型、编码器、映射关系打包保存,方便后续复用:
import pickle

# 保存
with open('size_prediction_model.pkl', 'wb') as f:
    pickle.dump((adaboost_model, feature_encoders, size_code_to_label), f)

# 加载
with open('size_prediction_model.pkl', 'rb') as f:
    adaboost_model, feature_encoders, size_code_to_label = pickle.load(f)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 05:40:23