机器学习实践项目(二)- 房价预测增强篇 - 训练、预测、提交

终于,前面步骤都完成了,需要进行最后的步骤了。
这段代码是整个项目的最后阶段 ——
把在交叉验证里选出的最优模型(或者微调后的模型)
全部训练数据重新训练一次
然后在测试集上预测房价,并导出 Kaggle 提交文件。


🧱 一、逻辑概览

步骤内容目的
构建最终管道 final_pipe整合数据预处理与模型
用全部训练数据 .fit(X, y)用所有样本学到最稳定模型
在测试集上 .predict(X_test)得到房价预测
生成提交文件 submission.csvKaggle 上传评测

🧩 二、构建最终管道

if best_estimator is None:
    best_model = candidates[best_name]
    final_pipe = Pipeline(steps=[
        ("prep", preprocess),
        ("reg", TransformedTargetRegressor(regressor=best_model, func=np.log1p, inverse_func=np.expm1))
    ])
else:
    final_pipe = best_estimator

解释:

1️⃣ best_estimator is None

  • 表示你没有进行第 4.1 小网格微调
  • 那么就用在第 5 步选出的最优基础模型(best_model)重新组装一个完整管道。

✅ 这个管道包含两个部分:

  • "prep":数据预处理(缺失值填充、标准化、One-Hot)
  • "reg":目标变换回归器(TransformedTargetRegressor
TransformedTargetRegressor(
    regressor=best_model,
    func=np.log1p,        # 训练时:对 SalePrice 取 log1p
    inverse_func=np.expm1 # 预测时:自动还原回真实价格
)

TTR 的作用:
它相当于自动在模型前后加上一个“目标变换器”:

  • 拟合前对 y 取对数;
  • 预测后对结果做指数还原。
    所以整个管道能自动处理 log(y) 训练、exp(y) 预测,避免手动转换出错。

2️⃣ else:

final_pipe = best_estimator
  • 如果你之前做过 HistGBR 小网格调参(4.1)
    那么 best_estimator 已经是“预处理 + 模型 + 最优参数”的完整管道。
  • 直接用它即可,无需重新组装。

🧠 三、用全部训练数据训练模型

final_pipe.fit(X, y)
  • 之前在交叉验证中,我们每次只用 80% 数据训练、20% 验证。
  • 现在已经确定了最优模型,不再需要验证。
    👉 用全部训练集重新训练一次模型,能让它学到更多模式、参数更稳。

🔮 四、在测试集上预测

test_pred = final_pipe.predict(X_test)
test_pred = np.clip(test_pred, 0, None)
  • .predict(X_test):在测试集上做预测。
  • 因为用了 TransformedTargetRegressor,预测结果已经是还原后的房价(SalePrice)
  • np.clip(test_pred, 0, None):保险处理,防止出现负数预测(虽然理论上不会)。

🧾 五、生成 Kaggle 提交文件

submission = pd.DataFrame({"Id": test["Id"], "SalePrice": test_pred})
SAVE_PATH = "submission.csv" if best_estimator is None else "submission_tuned.csv"
submission.to_csv(SAVE_PATH, index=False)
print(f"\nSaved => {os.path.abspath(SAVE_PATH)}")
  • Kaggle 提交文件格式要求:

    IdSalePrice
    1461169000.0
    1462187000.0
  • index=False 避免 DataFrame 索引出现在 CSV 中。

  • 如果你做了 4.1 微调,就命名为 submission_tuned.csv;否则是普通的 submission.csv

  • 最后一行打印文件绝对路径,方便确认。


📈 六、结果评估建议(注释里的提示)

# 提示:比较本地 CV 均值(results[best_name][0])与 Kaggle Public LB 的差距:
# 若差距 < 0.02(越小越好),说明验证策略已较好对齐,可以进一步做 stacking / 更多特征探索等。

意思是:

  • 你的本地交叉验证 RMSE(results[best_name][0]
    和 Kaggle 公榜 RMSE 应该尽量接近(差 < 0.02)。
  • 如果差距很大(比如本地 0.12, Kaggle 0.16),
    说明验证分布或特征工程不匹配,需要调整(例如 StratifiedKFold 的桶数或特征缺失处理)。

✅ 七、总结一句话

这段代码完成了从“交叉验证结果 → 最终模型 → 生成提交文件”的闭环:

阶段动作目的
构建管道统一预处理+模型+log变换保证预测一致性
训练全量用全部数据拟合模型提高最终性能
预测测试输出预测结果生成提交值
导出 CSVKaggle 可直接上传完成比赛流程

好啦,这个项目结束了。我们前后用了两种方法进行了处理,一种是比较粗放的方法,特征工程简单易懂,当然成绩也仅仅堪堪及格;另一种就是比较精细地处理了数据再进行预测,分数也比前一种好得多。我们让爱老师来整理一下做完这个项目后我们的收获吧。


🧭 一、整体收获总览

模块收获主题具体能力提升
🧹 数据理解与预处理理解数据字段、类型、分布能分析数值型与类别型变量,识别伪数值列
🔧 特征工程缺失值处理、特征构造、编码转换会用 get_dummies()、均值填补、标准化、目标编码
📊 模型训练与验证建模、交叉验证、误差评估掌握 Ridge、Lasso、ElasticNet、HistGBR 等模型的使用
🧠 参数优化网格搜索与微调能根据模型特性挑选关键超参数并调优
📈 模型融合与预测集成不同模型结果了解线性模型+树模型融合的思路,提高稳定性
🧾 提交与评估Kaggle 提交流程与分数分析能把模型输出转为 Kaggle 提交文件,比较 CV 与 LB
💡 思维方式机器学习项目化思维从数据清洗→建模→评估→部署形成完整闭环

📘 二、分阶段学习收获(按项目流程)

阶段做了什么学到了什么
1️⃣ 数据加载与探索 (EDA)读取 train/test、查看列、画直方图学会快速了解数据结构、分布与异常值
2️⃣ 数据清洗处理缺失值、转换伪数值列认识到数据质量对模型的重要性
3️⃣ 特征工程构造新特征(TotalSF、BathTotal等)、目标编码掌握让模型“看懂”更多信息的技巧
4️⃣ 数据标准化与独热编码数值特征标准化、类别转 One-Hot理解机器学习算法对特征数值范围的敏感性
5️⃣ 模型训练试多种模型:Ridge/Lasso/ElasticNet/HistGBR明白不同模型的优缺点(线性 vs 非线性)
6️⃣ 交叉验证使用 StratifiedKFold + log-space RMSE学会避免过拟合、正确评估模型表现
7️⃣ 参数微调小网格调参(learning_rate、max_leaf_nodes 等)能够有针对性地优化模型性能
8️⃣ 最终训练与预测用全量数据训练最佳模型并生成提交文件完成一个机器学习项目的完整闭环
9️⃣ 分数分析与对比比较本地 RMSE 与 Kaggle LB学会验证集对齐、理解模型泛化性

🧩 三、技术能力图谱(技能树形式)

领域学到的关键工具 / 概念
数据分析pandas、numpy、matplotlib、数据类型分析
特征处理缺失值填补 (fillna)、标准化 (StandardScaler)、One-Hot、目标编码
模型构建Ridge、Lasso、ElasticNet、HistGradientBoostingRegressor
模型评估RMSE、交叉验证 (KFold, StratifiedKFold)、OOF 验证思维
模型优化GridSearchCV、小网格调参、参数平滑、防止过拟合
特征工程思维特征组合、比例特征、布尔特征(HasGarage等)
模型融合Ridge + RandomForest 平均融合,提高稳定性
工具与工程化sklearn Pipeline、ColumnTransformer、TransformedTargetRegressor
Kaggle 实战技能提交文件格式、分数对齐、Public/Private 差距分析

🌱 四、方法论与思维层面的提升

类别思维转变
从“代码”到“项目”不只是写模型,而是要理解数据、验证策略、提交结果整个流程
从“堆模型”到“验证科学”明白交叉验证比盲目调参更重要
从“默认参数”到“主动优化”学会针对数据问题精调关键参数
从“结果”到“解释”理解模型结果背后的特征含义与贡献
从“独立算法”到“管道化工程”掌握 sklearn Pipeline,把预处理、建模整合为一体

💡 五、个人成长总结

  • 掌握了从数据清洗 → 特征工程 → 建模 → 评估 → 提交的完整机器学习项目流程。
  • 理解并实现了交叉验证、分层折(StratifiedKFold)与 OOF 目标编码等核心技术。
  • 熟悉 Ridge、Lasso、ElasticNet、树模型的特点与调参思路。
  • 能独立构建 sklearn Pipeline 管道,提高代码复用性与可维护性。
  • 具备分析验证分布差异、评估模型泛化性能的意识。
  • 提升了问题分析、实验设计与结果解释的系统思维。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值