当前位置: 首页 > news >正文

[深度学习]Kaggle:Random Forest optimization full process Python code

以下是一个针对随机森林模型优化的完整 Kaggle 竞赛代码模板,涵盖了数据预处理、特征工程、超参数调优、模型训练与评估、以及提交文件生成的全流程。

# 导入必要的库 import pandas as pd import numpy as np from sklearn.model_selection import train_test_split, GridSearchCV, cross_val_score from sklearn.ensemble import RandomForestRegressor, RandomForestClassifier from sklearn.metrics import mean_squared_error, accuracy_score, classification_report from sklearn.impute import SimpleImputer from sklearn.preprocessing import LabelEncoder, StandardScaler import warnings warnings.filterwarnings('ignore') # 1. 数据加载 train_data = pd.read_csv('/kaggle/input/your-competition/train.csv') test_data = pd.read_csv('/kaggle/input/your-competition/test.csv') sample_submission = pd.read_csv('/kaggle/input/your-competition/sample_submission.csv') # 2. 数据探索与预处理 print(f"训练集形状: {train_data.shape}") print(f"测试集形状: {test_data.shape}") print(f"训练集缺失值统计: {train_data.isnull().sum().sort_values(ascending=False).head(10)}") # 分离特征和目标变量(假设目标列名为'target') if 'target' in train_data.columns: y = train_data['target'] X = train_data.drop('target', axis=1) else: # 如果是分类问题,假设目标列名为'Survived'(泰坦尼克号示例) y = train_data['Survived'] X = train_data.drop('Survived', axis=1) # 3. 特征工程与预处理 def preprocess_features(df): """特征预处理函数""" df_processed = df.copy() # 处理缺失值:数值型用中位数填充,类别型用众数填充 numeric_cols = df_processed.select_dtypes(include=[np.number]).columns categorical_cols = df_processed.select_dtypes(include=['object']).columns # 数值型特征填充 if len(numeric_cols) > 0: num_imputer = SimpleImputer(strategy='median') df_processed[numeric_cols] = num_imputer.fit_transform(df_processed[numeric_cols]) # 类别型特征编码 if len(categorical_cols) > 0: for col in categorical_cols: le = LabelEncoder() # 处理训练集中未见过的类别 df_processed[col] = df_processed[col].astype(str) df_processed[col] = le.fit_transform(df_processed[col]) return df_processed # 应用预处理 X_processed = preprocess_features(X) test_processed = preprocess_features(test_data) # 4. 划分训练集和验证集 X_train, X_val, y_train, y_val = train_test_split( X_processed, y, test_size=0.2, random_state=42, stratify=y if y.nunique() < 10 else None ) # 5. 基础随机森林模型训练 print(" === 基础模型训练 ===") base_model = RandomForestRegressor(n_estimators=100, random_state=42) # 回归问题 # 如果是分类问题,使用:RandomForestClassifier(n_estimators=100, random_state=42) base_model.fit(X_train, y_train) # 基础模型评估 if hasattr(base_model, 'predict_proba'): # 分类问题 base_val_preds = base_model.predict(X_val) base_accuracy = accuracy_score(y_val, base_val_preds) print(f"基础模型验证集准确率: {base_accuracy:.4f}") print("分类报告:") print(classification_report(y_val, base_val_preds)) else: # 回归问题 base_val_preds = base_model.predict(X_val) base_rmse = np.sqrt(mean_squared_error(y_val, base_val_preds)) print(f"基础模型验证集RMSE: {base_rmse:.4f}") # 6. 特征重要性分析 print(" === 特征重要性分析 ===") feature_importances = pd.DataFrame({ 'feature': X_train.columns, 'importance': base_model.feature_importances_ }).sort_values('importance', ascending=False) print("Top 10重要特征:") print(feature_importances.head(10)) # 选择重要性大于阈值的特征 importance_threshold = 0.005 # 根据实际情况调整 selected_features = feature_importances[feature_importances['importance'] > importance_threshold]['feature'].tolist() print(f" 筛选后特征数量: {len(selected_features)} / {len(X_train.columns)}") X_train_selected = X_train[selected_features] X_val_selected = X_val[selected_features] test_selected = test_processed[selected_features] # 7. 超参数调优(核心优化步骤) print(" === 超参数调优 ===") # 定义参数网格 param_grid = { 'n_estimators': [100, 200, 300], # 树的数量 'max_depth': [10, 20, 30, None], # 树的最大深度 'min_samples_split': [2, 5, 10], # 内部节点再划分所需最小样本数 'min_samples_leaf': [1, 2, 4], # 叶节点最少样本数 'max_features': ['sqrt', 'log2'], # 寻找最佳分割时考虑的特征数 'bootstrap': [True, False] # 是否使用bootstrap采样 } # 初始化模型 rf = RandomForestRegressor(random_state=42, n_jobs=-1) # 回归问题 # 如果是分类问题,使用:RandomForestClassifier(random_state=42, n_jobs=-1) # 使用网格搜索进行调优 grid_search = GridSearchCV( estimator=rf, param_grid=param_grid, cv=5, # 5折交叉验证 scoring='neg_mean_squared_error' if hasattr(rf, 'predict') else 'accuracy', n_jobs=-1, verbose=1 ) print("开始网格搜索调参...") grid_search.fit(X_train_selected, y_train) print(f" 最佳参数组合: {grid_search.best_params_}") print(f"最佳交叉验证分数: {grid_search.best_score_:.4f}") # 8. 使用最优参数重新训练模型 print(" === 使用最优参数训练最终模型 ===") best_model = grid_search.best_estimator_ # 在整个训练集上重新训练(使用筛选后的特征) best_model.fit(pd.concat([X_train_selected, X_val_selected]), pd.concat([y_train, y_val])) # 9. 生成测试集预测 print(" === 生成测试集预测 ===") test_preds = best_model.predict(test_selected) # 10. 创建提交文件 submission = sample_submission.copy() if 'target' in submission.columns: submission['target'] = test_preds elif 'Survived' in submission.columns: # 泰坦尼克号示例 submission['Survived'] = test_preds.astype(int) else: # 根据实际情况调整列名 submission.iloc[:, 1] = test_preds # 保存提交文件 submission_file = 'submission_optimized.csv' submission.to_csv(submission_file, index=False) print(f"提交文件已保存: {submission_file}") print(f"预测值统计: 均值={test_preds.mean():.4f}, 标准差={test_preds.std():.4f}") # 11. 模型性能对比 print(" === 模型性能对比 ===") print("| 模型类型 | 验证集分数 | 特征数量 |") print("|----------|------------|----------|") if hasattr(base_model, 'predict_proba'): base_score = accuracy_score(y_val, base_val_preds) optimized_val_preds = best_model.predict(X_val_selected) optimized_score = accuracy_score(y_val, optimized_val_preds) print(f"| 基础模型 | {base_score:.4f} | {X_train.shape[1]} |") print(f"| 优化模型 | {optimized_score:.4f} | {X_train_selected.shape[1]} |") print(f"| 提升幅度 | +{(optimized_score - base_score)*100:.2f}% | - |") else: base_score = np.sqrt(mean_squared_error(y_val, base_val_preds)) optimized_val_preds = best_model.predict(X_val_selected) optimized_score = np.sqrt(mean_squared_error(y_val, optimized_val_preds)) print(f"| 基础模型 | RMSE={base_score:.4f} | {X_train.shape[1]} |") print(f"| 优化模型 | RMSE={optimized_score:.4f} | {X_train_selected.shape[1]} |") print(f"| 提升幅度 | -{(base_score - optimized_score)/base_score*100:.2f}% | - |")

关键优化步骤说明:

优化步骤实现方法优化效果
数据预处理自动处理缺失值(数值型用中位数,类别型用众数)提高数据质量,减少噪声影响
特征工程自动编码类别特征,特征重要性筛选降低维度,保留关键特征,提升模型效率
参数调优网格搜索(GridSearchCV)寻找最优参数组合系统性地找到最佳超参数,提升模型性能
交叉验证5折交叉验证评估模型稳定性避免过拟合,确保模型泛化能力
特征选择基于重要性阈值筛选特征简化模型,减少过拟合风险,提升训练速度

使用说明:

  1. 数据适配:根据具体竞赛数据调整目标变量列名(如'target''Survived'
  2. 问题类型:代码自动适配回归或分类问题,根据目标变量类型选择相应模型
  3. 参数调整:可根据计算资源调整param_grid中的参数范围和GridSearchCVcv
  4. 特征筛选:通过调整importance_threshold控制特征选择严格度
  5. 提交格式:确保sample_submission的列名与竞赛要求一致

此代码模板提供了从数据加载到提交的完整流程,重点突出了随机森林优化的核心步骤,包括特征重要性分析和系统性的超参数调优。


参考来源

  • 【Ryo】Python:随机森林及参数优化——基于Kaggle的实战详解
  • kaggle(一):随机森林与泰坦尼克
  • 实用 Kaggle 竞赛之 随机森林 Random Forest 的评估及调参
  • 随机森林及应用
  • 实用 Kaggle 随机森林 - 如何处理 nan & 数据太少怎么办
http://www.gsyq.cn/news/1513935.html

相关文章:

  • 从冷却塔到核电站:双曲面与旋转曲面在工程中的神奇应用与数学原理
  • 3大技术突破:MMD Tools如何打通Blender与MikuMikuDance的次元壁
  • stm32使用Jlink进行GDB脚本调试
  • 洞察2026年6月模具温控系统市场:五家评价高的制造厂深度解析 - 品牌鉴赏官2026
  • 永城奔驰宝马奥迪保养多少钱?真实花费指南 - 品牌排行榜
  • Kemono下载器:Windows平台终极批量下载解决方案
  • 上海嘉定区金条回收别乱找!2026公认靠谱的机构都在这 - 沪上贵金属口碑推荐官
  • 2026秋季游戏排期全解:41款产品的“逃难”数据
  • 2026年宜宾装修公司真实口碑观察:哪些本地企业值得关注? - 优质品牌商家
  • 阿拉伯语网页一键启用模板:含RTL布局、预设字体与响应式样式
  • 为什么你的软件总是崩溃?3分钟了解Visual C++运行库修复的终极方案
  • 高性能多核DSP MSC8256架构解析与工业应用实战
  • 书匠策AI官网你的期刊论文,从“难产“到“顺产“只差这一步
  • AI写专著新突破!一键生成20万字专著,解决写作难题!
  • 手把手实战CANN ascend-transformer-boost:Transformer推理在昇腾NPU上的极致优化
  • 2026年液压升降机与简易货梯选购指南:广州、东莞、绵阳三家厂商多维实测对比 - 优质品牌商家
  • WASM + WebGPU:浏览器端大模型推理的 Rust 加速方案
  • 深度实践CANN HCCL集合通信库:多卡并行训练中的通信优化与问题排查
  • MPC8245经典SoC解析:从PowerPC架构到高集成嵌入式系统设计
  • DataX不只是同步工具:聊聊它的插件化架构与二次开发入门
  • Windows 11 LTSC 24H2一键恢复微软商店的终极教程
  • 2026年上海静安区正规金条回收+银条回收机构推荐 - 沪上贵金属口碑推荐官
  • 构建之法阅读笔记 10
  • 神经网络进化核方法:时间依赖PDE求解新框架
  • 从游戏到AI:聊聊不同GPU架构(V100/A100/4090)下grid和block配置的实战差异
  • 2026年304不锈钢板供应商综合能力分析:从材料体系到交付服务,谁更值得关注? - 优质品牌商家
  • 鸣潮工具箱WaveTools抽卡记录数据同步异常排查与修复指南
  • 2026年非开挖拉管施工市场观察:哪些企业真正具备实力? - 优质品牌商家
  • DRG Save Editor:如何轻松管理你的深岩银河游戏存档?
  • 从V1到V3,手把手教你用PyTorch复现MobileNet系列(附完整代码与CIFAR10实战)