Skip to content

hhh2210/House-prices-regression

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🏠 House Prices Regression - Advanced Ensemble Solution

Kaggle Python PyTorch License

🏆 Kaggle 排名: Top 0.7% (33/4,692) | 📊 最佳分数: 0.02904

基于特征工程、集成学习和 GPU 加速的高性能房价预测解决方案

特性快速开始实验结果文档


📖 项目简介

本项目是 Kaggle House Prices Competition 的完整解决方案,通过 79 个特征变量预测美国爱荷华州艾姆斯市的住宅销售价格。

核心亮点

  • 🎯 高性能: Kaggle Public Leaderboard 达到 0.02904 (Top 0.7%)
  • 🚀 多硬件支持: 支持 CPU / CUDA / Apple MPS (M4) 加速
  • 🔬 智能调优: 集成 Optuna 贝叶斯优化,效率提升 3-5 倍
  • 📊 数据增强: 支持 AmesHousing 外部数据集,性能提升 77%
  • 🧪 模型丰富: 提供 XGBoost/LightGBM/PyTorch/Ensemble 等多种方案

🛠 技术栈

核心框架

Python PyTorch scikit-learn NumPy Pandas

机器学习库

XGBoost LightGBM Optuna

硬件加速

CUDA Apple Silicon

🎯 核心特性

1. 🔥 卓越性能

指标 数值 说明
Kaggle 排名 33 / 4,692 Top 0.7%
最佳分数 0.02904 RMSE (log space)
提升幅度 -77.2% 使用 AmesHousing 数据增强
训练速度 10-20 分钟 50 次 Optuna 试验 (GPU)

2. 💡 先进方法

特征工程 (354 维)

  • 基础特征: 面积汇总、时间特征、卫浴统计、存在性标记
  • 交互特征: QualArea = OverallQual × GrLivAreaBathArea
  • 多项式特征: 关键特征的平方、立方变换
  • 比率特征: BathPerAreaLotAreaRatioSFperBath
  • 偏度处理: 自动检测并对数变换高偏度特征 (>0.75)

模型架构

📦 Stacking Ensemble
├─ 🧠 Deep Neural Network (PyTorch)
│  └─ 512→256→128→64 + BatchNorm + Dropout
├─ 🌲 XGBoost (GPU 加速)
│  └─ device='cuda' + tree_method='hist'
├─ 🌿 LightGBM (GPU 加速)
│  └─ device='gpu' + OpenCL
└─ 📈 Ridge Meta-Learner
   └─ 基于 OOF predictions

3. 🛠 多硬件支持

  • Macbook M4 (Apple Silicon MPS)
  • GPU CUDA (推荐:48GB+ 显存如 L20/A100)
  • CPU Fallback (HistGradientBoosting 优化)

4. ⚡ 智能优化

  • Optuna 贝叶斯优化: 替代随机搜索,收敛速度快 3-5 倍
  • TPE 算法: Tree-structured Parzen Estimator 智能参数选择
  • MedianPruner: 自动剪枝低效试验,节省 30-50% 计算时间

项目结构

House-prices-regression/
├── data/
│   ├── train.csv          # 训练数据
│   └── test.csv           # 测试数据
├── src/
│   ├── train_tree.py      # 树模型基线(XGBoost/LightGBM/RF/HGB)
│   ├── train_ensemble.py  # CPU/GPU ensemble (XGBoost + LightGBM)
│   ├── train_gpu_ensemble.py  # 完整GPU加速ensemble (NN + XGBoost + LightGBM)
│   └── train_mps.py       # PyTorch MLP (支持MPS/CUDA/CPU)
├── submissions/           # 生成的提交文件
├── pyproject.toml         # 依赖管理
└── readme.md

🚀 快速开始

前置要求

  • Python 3.11+
  • uv 包管理器
  • (可选) CUDA 11.8+ / Apple Silicon

1️⃣ 克隆项目

git clone https://github.com/yourusername/House-prices-regression.git
cd House-prices-regression

2️⃣ 安装依赖

# 安装 uv 包管理器(二选一)
brew install uv                        # macOS Homebrew
# 或:
curl -LsSf https://astral.sh/uv/install.sh | sh

# 准备环境并安装依赖
uv python install 3.11                 # 安装 Python 3.11
uv sync                                # 同步依赖(基于 pyproject.toml)

3️⃣ 准备数据

# 下载竞赛数据到 data/ 目录
data/
├── train.csv          # 训练数据
├── test.csv           # 测试数据
└── AmesHousing.csv    # (可选) 外部数据增强

💡 提示: AmesHousing.csv 可从 Kaggle Datasets 获取,使用后性能提升 77%!

4️⃣ 运行训练

🏆 推荐方案:XGBoost + Optuna 优化 + 数据增强

目标分数: 0.029 (与最佳成绩一致)

# 使用 AmesHousing 数据增强 + GPU 加速 + Optuna 贝叶斯优化
uv run python src/train_tree.py \
  --model xgb \
  --gpu \
  --tune \
  --n_iter 50 \
  --folds 5 \
  --include-ames \
  --ames-path data/AmesHousing.csv

📊 其他训练方案

方案1: GPU 完整 Ensemble (NN + XGBoost + LightGBM)
# 三模型 stacking,适用于 48GB GPU
uv run python src/train_gpu_ensemble.py --folds 5

# 使用 AmesHousing 数据增强
uv run python src/train_gpu_ensemble.py --folds 5 --include-ames

预期性能: CV ~0.11-0.12 | Kaggle ~0.126

方案2: 树模型快速调参 (XGBoost/LightGBM/HGB)
# XGBoost (GPU 加速)
uv run python src/train_tree.py --model xgb --gpu --folds 5

# LightGBM (需先安装)
uv add lightgbm
uv run python src/train_tree.py --model lgbm --gpu --folds 5

# HistGradientBoosting (CPU 友好)
uv run python src/train_tree.py --model hgb --folds 5

预期性能: CV ~0.116-0.120 | Kaggle ~0.123-0.127

方案3: PyTorch MLP (Apple Silicon MPS 优化)
# MacBook M4 MPS 加速
uv run python src/train_mps.py --device mps --epochs 200 --batch_size 512

# CUDA GPU
uv run python src/train_mps.py --device cuda --epochs 300 --batch_size 1024

预期性能: CV ~0.130-0.135 | Kaggle ~0.243


📈 实验结果

Kaggle Leaderboard 表现

模型 使用 AmesHousing CV Score Kaggle Score 排名
XGBoost + Optuna - 0.02904 33/4,692 🏆
LightGBM 0.116 0.03231 -
XGBoost 0.116 0.12740 -
GPU Ensemble 0.120 0.12561 -
LightGBM 0.119 0.12303 -
PyTorch MLP 0.130 0.24302 -

核心发现

🎯 数据增强是关键

不使用 AmesHousing:  0.127 → 使用 AmesHousing: 0.029
                    提升幅度: -77.2% ✨

🔬 模型对比

树模型 (XGBoost/LightGBM)    > 神经网络 (PyTorch)
   0.029-0.032                   0.243

小数据集下 (1,460 样本),树模型显著优于深度学习

⚡ Optuna vs 随机搜索

Optuna 贝叶斯优化:  50 次试验 → 最优解
RandomizedSearchCV:  150+ 次试验 → 相同效果

效率提升: 3-5 倍 🚀

最佳超参数

# XGBoost 最优配置 (Kaggle 0.02904)
best_params = {
    'n_estimators': 2200,
    'learning_rate': 0.045,
    'max_depth': 6,
    'subsample': 0.908,
    'colsample_bytree': 0.660,
    'reg_lambda': 1.815
}

📁 输出文件

训练完成后,提交文件保存在 submissions/ 目录:

文件名 对应脚本 预期分数
submission_tree_xgb_tuned.csv train_tree.py --model xgb --tune --include-ames ~0.029 🏆
submission_tree_lgbm.csv train_tree.py --model lgbm --include-ames ~0.032
submission_gpu_ensemble.csv train_gpu_ensemble.py ~0.126
submission_pytorch_mps.csv train_mps.py ~0.243

⚙️ 命令行参数

查看所有可配置参数

train_tree.py (主推荐)

--model            # 模型选择: hgb/rf/xgb/lgbm (默认 hgb)
--folds            # K折交叉验证数 (默认 5)
--tune             # 启用 Optuna 超参数优化
--n_iter           # 优化迭代次数 (默认 40)
--gpu              # 启用 GPU 加速
--include-ames     # 使用 AmesHousing 数据增强
--ames-path        # AmesHousing.csv 路径
--seed             # 随机种子 (默认 42)

train_gpu_ensemble.py

--folds            # K折交叉验证数 (默认 5)
--include-ames     # 使用 AmesHousing 数据增强
--seed             # 随机种子 (默认 42)

train_mps.py

--device           # 设备: cpu/cuda/mps (默认自动)
--epochs           # 训练轮数 (默认 200)
--batch_size       # 批大小 (默认 512)
--hidden_dim       # 隐藏层维度 (默认 256)
--lr               # 学习率 (默认 0.001)
--dropout          # Dropout 率 (默认 0.3)

🔧 进阶优化建议

想要进一步提升性能?尝试以下方向:

1. 模型多样性

  • ✨ 添加 CatBoost 到集成模型
  • ✨ 尝试 TabNet 等表格专用深度学习模型
  • ✨ 探索 AutoML 框架 (AutoGluon/H2O)

2. 特征工程

  • 🎯 Target Encoding for Neighborhood
  • 🎯 时序周期特征(建造年份的周期性模式)
  • 🎯 更多领域知识特征(如学区、交通便利度)

3. 数据增强

  • 📊 融合更多外部数据集
  • 📊 使用数据合成技术 (SMOTE/ADASYN)

4. 集成策略

  • 🔬 多层 Stacking (Level 3+)
  • 🔬 使用更复杂的 Meta-Learner
  • 🔬 模型权重的贝叶斯优化

🤝 贡献指南

欢迎贡献!如果你有任何改进建议:

  1. Fork 本仓库
  2. 创建特性分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 开启 Pull Request

贡献方向

  • 🐛 Bug 修复
  • ✨ 新模型实现 (CatBoost/TabNet)
  • 📝 文档改进
  • ⚡ 性能优化
  • 🧪 新特征工程策略

🙏 致谢

  • Kaggle - 提供优质竞赛平台和数据集
  • XGBoost/LightGBM 团队 - 优秀的梯度提升库
  • Optuna 开发者 - 强大的超参数优化框架
  • Ames Housing Dataset - 由 Dean De Cock 编制的完整数据集

📚 详细文档

完整的实验过程、方法论和结果分析请参阅:

❓ 常见问题

Q: 为什么 PyTorch MLP 表现比树模型差很多?

A: 在小数据集 (1,460 样本) 上,深度学习模型难以充分学习。树模型(如 XGBoost)天然适合结构化数据且对样本量要求较低。实验显示:

  • 树模型:0.029-0.032
  • 神经网络:0.243

建议: 如果数据量 < 10K,优先使用树模型。

Q: 必须使用 AmesHousing 数据集吗?

A: 不是必须,但强烈推荐。数据增强后性能提升 77%

  • 不使用: 0.127
  • 使用: 0.029

AmesHousing.csv 包含约 2,930 条额外记录,显著提升模型泛化能力。

Q: GPU 加速效果如何?

A:

  • XGBoost GPU: 训练速度提升 5-10 倍
  • 50 次 Optuna 试验: GPU 约 10-20 分钟,CPU 需 1-2 小时
  • 推荐配置: 48GB 显存的 GPU (如 L20/A100)
Q: Optuna 和 RandomizedSearchCV 差异?

A: Optuna 使用贝叶斯优化,效率提升 3-5 倍:

方法 达到最优需要的试验次数 优势
Optuna 50 次 TPE 智能搜索 + 自动剪枝
RandomizedSearchCV 150+ 次 随机搜索
Q: 如何在 Macbook M4 上运行?

A: 使用 MPS 加速的 PyTorch 脚本:

uv run python src/train_mps.py --device mps --epochs 200

虽然 MLP 表现一般 (0.243),但可作为学习和快速迭代的基线。

Q: 提交文件在哪里?

A: 所有生成的提交文件保存在 submissions/ 目录,文件名格式:

submission_tree_xgb_tuned.csv    # XGBoost 调优版
submission_tree_lgbm.csv          # LightGBM
submission_gpu_ensemble.csv       # GPU Ensemble
submission_pytorch_mps.csv        # PyTorch MLP

📖 参考资料

⭐ Star History

如果这个项目对你有帮助,请给个 ⭐️ Star 支持一下!

📄 License

本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情


Made with ❤️ by

如有问题或建议,欢迎提 Issue

About

My first ML hands-on project, Top 0.7% Kaggle House Prices regression solution using XGBoost, Optuna, and practical feature engineering.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages