机器学习实践项目(二)- 房价预测 - 训练模型

从模型到预测:Kaggle房价预测实战指南

📘 系列第三篇:正式进入建模阶段。我们将训练岭回归与随机森林两种模型,并通过模型融合(Ensemble)提高预测性能。


📖 目录

  1. 回顾数据准备
  2. 岭回归(Ridge)模型
  3. 随机森林(RandomForest)模型
  4. 模型融合(Ensemble)
  5. 生成提交文件
  6. 小结

一、回顾数据准备

在前两篇中,我们已经完成了以下步骤:

  • 对目标值取对数:y_train = np.log1p(train_df.pop("SalePrice"))
  • 将训练集与测试集合并;
  • One-Hot 编码;
  • 缺失值填补与标准化;
  • 生成 X_train, X_test

现在我们要把这些干净的特征输入模型,开始训练预测。


二、岭回归(Ridge Regression)

岭回归是一种带有 L2 正则化 的线性模型,能有效缓解特征之间的多重共线性问题。

我们先使用交叉验证(Cross Validation)寻找最佳正则化系数 α:

from sklearn.linear_model import Ridge
from sklearn.model_selection import cross_val_score
import numpy as np
import matplotlib.pyplot as plt

alphas = np.logspace(-3, 2, 50)
test_scores = []

for alpha in alphas:
    ridge = Ridge(alpha=alpha)
    score = np.sqrt(-cross_val_score(
        ridge, X_train, y_train,
        cv=10, scoring='neg_mean_squared_error'
    ))
    test_scores.append(np.mean(score))

plt.plot(alphas, test_scores)
plt.title('Alpha vs CV Error')
plt.xlabel('Alpha')
plt.ylabel('RMSE')
plt.show()

✅ 一般来说,alpha 越小,模型越容易过拟合;alpha 越大,模型越平滑。
通过曲线找到最低 RMSE 对应的 α 值(如 16),即可作为最优参数。


三、随机森林(Random Forest)

随机森林是一种基于多棵决策树的集成模型,能自动捕捉非线性关系。

from sklearn.ensemble import RandomForestRegressor

max_features = [.1, .3, .5, .7, .9, .99]
test_scores = []

for mf in max_features:
    rf = RandomForestRegressor(n_estimators=200, max_features=mf)
    score = np.sqrt(-cross_val_score(
        rf, X_train, y_train,
        cv=10, scoring='neg_mean_squared_error'
    ))
    test_scores.append(np.mean(score))

plt.plot(max_features, test_scores)
plt.title('Max Features vs CV Error')
plt.xlabel('max_features')
plt.ylabel('RMSE')
plt.show()

一般来说,max_features 越小,单棵树差异越大,泛化性更好。
我们选择 RMSE 最低对应的参数(例如 0.3)。


四、模型融合(Ensemble)

融合(Blending)能综合不同模型的优势,让预测更稳健。
在这里我们将岭回归(线性趋势)和随机森林(非线性特征)进行平均融合。

ridge = Ridge(alpha=16)
rf = RandomForestRegressor(n_estimators=500, max_features=.3)

ridge.fit(X_train, y_train)
rf.fit(X_train, y_train)

# 反取对数,恢复到真实价格空间
y_ridge = np.expm1(ridge.predict(X_test))
y_rf = np.expm1(rf.predict(X_test))

# 简单平均融合
y_final = (y_ridge + y_rf) / 2

✅ 这种“简单平均”在 Kaggle 比赛中非常常见,
因为它能平衡模型偏差与方差,提升总体稳定性。


五、生成提交文件

将预测结果保存成 Kaggle 要求的格式并输出:

submission_df = pd.DataFrame({
    'Id': test_df.Id,
    'SalePrice': y_final
})
submission_df.to_csv('./output/house_submission.csv', index=False)

生成的 house_submission.csv 就可以直接上传到 Kaggle 平台进行评测啦!


六、小结

模型特点适用场景
岭回归稳定、可解释线性趋势主导特征
随机森林捕捉非线性、鲁棒性强特征复杂场景
融合模型兼顾两者优势实战首选方案

🏁 系列总结

篇章内容关键步骤
第一篇数据理解与字段分析明确字段类型与目标分布
第二篇数据清洗与特征工程One-Hot、标准化、缺失处理
第三篇模型训练与融合预测岭回归 + 随机森林 + 提交

🚀 至此,我们完成了 Kaggle 房价预测项目的完整流程:
从数据理解 → 清洗 → 建模 → 融合 → 提交。
如果你希望进一步提升分数,可以尝试 LightGBM、XGBoost 或 Stacking 模型。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值