Python基于训练数据集预测Deadline_Changes变量的最优实现方案
实现方案
你的需求属于典型的结构化数据回归任务,目标是预测连续值Deadline_Changes。考虑到数据集规模小、同时包含数值特征(Month、Day)和分类特征(Test),最优方案是使用Scikit-learn的Pipeline封装特征处理和模型拟合流程,无需手动处理特征对齐问题,代码可复用性高。
完整可运行代码
import pandas as pd from sklearn.compose import ColumnTransformer from sklearn.preprocessing import OneHotEncoder from sklearn.ensemble import RandomForestRegressor from sklearn.pipeline import Pipeline # 1. 构造训练集(如果从本地文件读取,替换为 pd.read_csv("训练集文件路径") 即可) train_data = [ [3, 19, 2, "English"], [5, 3, 8, "Math"], [3, 8, 34, "Science"], [10, 2, 17, "Science"], [5, 9, 21, "Social"], [4, 12, 3, "Math"], [8, 29, 1, "Music"], [12, 31, 9, "English"] ] train_df = pd.DataFrame(train_data, columns=["Month", "Day", "Deadline_Changes", "Test"]) # 2. 构造待预测数据集(同理可替换为 pd.read_csv("测试集文件路径")) test_data = [ [5, 30, "Math"], [9, 2, "Social"], [12, 9, "Science"], [11, 30, "Music"], [8, 24, "Music"], [2, 2, "English"], [6, 12, "Music"], [4, 9, "English"] ] test_df = pd.DataFrame(test_data, columns=["Month", "Day", "Test"]) # 3. 定义特征分类 num_features = ["Month", "Day"] cat_features = ["Test"] # 4. 构建特征处理+模型训练流水线 preprocessor = ColumnTransformer( transformers=[ ("cat", OneHotEncoder(handle_unknown="ignore"), cat_features), ("num", "passthrough", num_features) ] ) model = Pipeline(steps=[ ("preprocessor", preprocessor), ("regressor", RandomForestRegressor(random_state=42, n_estimators=100)) ]) # 5. 拟合模型并输出结果 X_train = train_df[num_features + cat_features] y_train = train_df["Deadline_Changes"] model.fit(X_train, y_train) # 预测结果取整,符合 Deadline_Changes 为整数的业务特征 test_df["Predicted_Deadline_Changes"] = model.predict(test_df).round().astype(int) # 打印最终输出 print(test_df)
方案说明
- 用
OneHotEncoder处理分类特征Test,避免有序编码引入的错误权重,handle_unknown="ignore"参数可兼容测试集中出现训练集不存在的科目的情况 - 选择随机森林回归器是因为小数据集下不易过拟合,无需对数值特征做标准化,对特征尺度不敏感
- 如果需要调整预测精度,可以修改
RandomForestRegressor的参数(比如max_depth、min_samples_split),或者更换为GradientBoostingRegressor等其他回归模型
内容的提问来源于stack exchange,提问作者Anya
相关产品推荐
相关产品推荐

