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

详细案例,集成算法

以下是一个使用 随机森林(RF) 和 XGBoost 解决结构化数据分类问题的完整案例(以泰坦尼克号生存预测为例),包含数据处理、建模和结果分析:

 

案例:泰坦尼克号乘客生存预测

 

目标:根据乘客特征(如年龄、船舱等级等)预测生存与否(0=遇难,1=存活)。

 

一、数据准备

 

1. 加载数据

 

import pandas as pd

train = pd.read_csv("train.csv") # 训练集

test = pd.read_csv("test.csv") # 测试集

 

 

2. 数据清洗

 

- 缺失值处理:

- 年龄(Age):用中位数填充。

- 登船港口(Embarked):用众数填充。

- 船舱等级(Fare):用均值填充测试集缺失值。

 

train['Age'].fillna(train['Age'].median(), inplace=True)

train['Embarked'].fillna(train['Embarked'].mode()[0], inplace=True)

test['Age'].fillna(test['Age'].median(), inplace=True)

test['Fare'].fillna(test['Fare'].mean(), inplace=True)

 

 

- 特征工程:

- 提取船舱首字母(如Cabin='C85' → 'C'),缺失值标记为'X'。

- 转换分类变量(如性别、登船港口)为数值型(独热编码)。

 

train['Cabin'] = train['Cabin'].fillna('X').apply(lambda x: x[0])

test['Cabin'] = test['Cabin'].fillna('X').apply(lambda x: x[0])

train = pd.get_dummies(train, columns=['Sex', 'Embarked', 'Cabin'])

test = pd.get_dummies(test, columns=['Sex', 'Embarked', 'Cabin'])

 

 

- 选择核心特征:

features = ['Pclass', 'Age', 'SibSp', 'Parch', 'Fare'] + \

           [col for col in train.columns if 'Sex_' in col or 'Embarked_' in col or 'Cabin_' in col]

X_train = train[features]

y_train = train['Survived']

X_test = test[features]

 

 

二、模型训练与调优

 

1. 随机森林(RF)

 

from sklearn.ensemble import RandomForestClassifier

from sklearn.model_selection import GridSearchCV

 

# 初始模型

rf = RandomForestClassifier(random_state=42)

rf.fit(X_train, y_train)

 

# 网格搜索调参

param_grid = {

    'n_estimators': [100, 200],

    'max_depth': [None, 10, 20],

    'min_samples_split': [2, 5]

}

grid_search = GridSearchCV(rf, param_grid, cv=5, scoring='accuracy')

grid_search.fit(X_train, y_train)

best_rf = grid_search.best_estimator_

 

 

2. XGBoost

 

import xgboost as xgb

from xgboost import plot_importance

import matplotlib.pyplot as plt

 

# 初始模型

xgb_model = xgb.XGBClassifier(

    objective='binary:logistic',

    random_state=42,

    n_estimators=500,

    learning_rate=0.1

)

xgb_model.fit(X_train, y_train, early_stopping_rounds=50, 

             eval_set=[(X_train, y_train)], verbose=False)

 

# 特征重要性可视化

plot_importance(xgb_model)

plt.show()

 

 

三、结果分析

 

1. 模型评估(训练集)

 

from sklearn.metrics import accuracy_score, classification_report

 

# 随机森林

y_pred_rf = best_rf.predict(X_train)

print("RF准确率:", accuracy_score(y_train, y_pred_rf)) # 示例输出:~0.85

 

# XGBoost

y_pred_xgb = xgb_model.predict(X_train)

print("XGBoost准确率:", accuracy_score(y_train, y_pred_xgb)) # 示例输出:~0.88

 

 

2. 预测提交(测试集)

 

# 生成预测结果

test['Survived'] = best_rf.predict(X_test) # 或用xgb_model.predict(X_test)

submission = test[['PassengerId', 'Survived']]

submission.to_csv("submission.csv", index=False)

 

 

四、关键结论

 

1. 特征重要性:

- XGBoost显示性别(Sex_female)、船舱等级(Pclass)、年龄(Age)是最重要的生存预测因素(见特征重要性图)。

2. 模型对比:

- 随机森林调参后准确率约85%,XGBoost通过正则化和早停机制准确率更高(约88%),但需注意过拟合风险。

3. 优化方向:

- 可尝试Stacking集成(如RF+逻辑回归作为元模型),或进一步调整XGBoost的 max_depth 和 reg_alpha 。

 

代码优化建议

 

- 并行加速:XGBoost设置 n_jobs=-1 启用多线程,RF设置 n_jobs=-1 加速训练。

- 数据泄漏检查:特征工程需在训练集和测试集独立处理(避免用测试集数据填充训练集缺失值)。

 

需要完整数据集或其他算法案例(如GBDT)可随时告知!

相关文章:

  • 技术部测试规范
  • 工业AI质检:从传统算法到多模态大模型应用
  • 大模型实践:图文解锁Ollama在个人笔记本上部署llm
  • 学习黑客红队模拟演练报告
  • 如何克服情绪拖延症?
  • 《算法导论(原书第3版)》下载
  • 【Java学习笔记】方法重载
  • Redis 过期与淘汰机制全解析
  • 【操作系统】吸烟者问题
  • 【深度解析】DCN-V2:Google新一代特征交叉网络,如何实现推荐系统精准度飞跃?
  • python hasattr()
  • C++基础算法9:Dijkstra
  • Spring AI 实战:第七章、Spring AI Advisor机制之记忆大师
  • 前端面试每日三题 - Day 24
  • 入门Linux 进程:进程概念、进程状态与进程地址空间
  • NPP库中libnppitc模块介绍
  • 49认知干货:产品的生命周期及类型汇总
  • MYSQL数据库突然消失
  • C语言:文件操作
  • 谷歌 NotebookLM 支持生成中文播客
  • 媒体:不能让追求升学率,成为高中不双休的借口
  • 国际观察|韩国在政局多重不确定性中迎接总统选举
  • 科普|“小石头,大麻烦”,出现输尿管结石如何应对?
  • 2025年五一档电影新片票房破3亿
  • 女冰队长于柏巍,拒绝被年龄定义
  • 阿迪达斯一季度营收增近13%,称美国加征关税对业绩带来不确定性