详细案例,集成算法

以下是一个使用 随机森林(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)可随时告知!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/904128.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《C#数据结构与算法》—201线性表

线性表的实现方式 顺序表 线性表的顺序存储是指在内存中用一块地址连续的空间依次存放线性表的数据元素,用这种方式存储的线性表叫顺序表。 特点:表中相邻的数据元素在内存中存储位置也相邻。 顺序表接口实现: 方法名参数返回值描述GetLen…

深入解析C++11委托构造函数:消除冗余初始化的利器

一、传统构造函数的痛点 在C11之前,当多个构造函数需要执行相同的初始化逻辑时,开发者往往面临两难选择: class DataProcessor {std::string dataPath;bool verbose;int bufferSize; public:// 基础版本DataProcessor(const std::string&am…

LeetCode 热题 100 189. 轮转数组

LeetCode 热题 100 | 189. 轮转数组 大家好,今天我们来解决一道经典的算法题——轮转数组。这道题在LeetCode上被标记为中等难度,要求我们将数组中的元素向右轮转 k 个位置。下面我将详细讲解解题思路,并附上Python代码实现。 问题描述 给定…

GAEA商业前景和生态系统扩展

GAEA情感坐标系不仅增强了AI对人类情感的理解,也为Web3生态注入了新的活力。通过去中心化的数据存储和共享,GAEA构建了一个开放透明的数据市场,为AI训练提供了优质的数据源。同时,贡献数据的用户将获得灵魂积分(SOUL P…

[原创](现代Delphi 12指南):[macOS 64bit App开发]: [2]如何使用跨平台消息框?

[作者] 常用网名: 猪头三 出生日期: 1981.XX.XX 企鹅交流: 643439947 个人网站: 80x86汇编小站 编程生涯: 2001年~至今[共24年] 职业生涯: 22年 开发语言: C/C++、80x86ASM、Object Pascal、Objective-C、C#、R、Python、PHP、Perl、 开发工具: Visual Studio、Delphi、XCode、…

js逆向绕过指纹识别

​​一、兼容性说明​​ 官方支持 curl_cffi 明确支持 Windows 平台,并提供了预编译的安装包。其核心功能(如浏览器指纹模拟、HTTP/2 支持)在 Windows 上与 Linux/macOS 表现一致。 版本要求 • Python 3.8 及以上版本(推荐 Pyth…

聊聊对Mysql的理解

目录 1、Sql介绍 1.1、SQL的分类 1.2、数据库的三大范式 1.3、数据表的约束 1.4、约束的添加与删除 2、核心特性 3、主要组件 4、数据结构原理 5、索引失效 6、常用问题 7、优势与局限 前言 MySQL是一个开源的关系型数据库管理系统(RDBMS),由瑞典MySQL A…

[HOT 100] 1617. 统计子树中城市之间最大距离

文章目录 1. 题目链接2. 题目描述3. 题目示例4. 解题思路5. 题解代码6. 复杂度分析 1. 题目链接 1617. 统计子树中城市之间最大距离 - 力扣(LeetCode) 2. 题目描述 给你 n 个城市,编号为从 1 到 n 。同时给你一个大小为 n-1 的数组 edges &…

接口自动化——参数化

之前有说过,通过pytest测试框架标记参数化功能可以实现数据驱动测试。数据驱动测试使用的文件主要有以下类型: txt 文件 csv 文件excel 文件json 文件yaml 文件.... 本文主要讲的就是以上几种文件类型的读取和使用 一.txt 文件读取使用 首先创建一个 …

游戏引擎学习第257天:处理一些 Win32 相关的问题

设定今天的工作计划 今天我们本来是打算继续开发性能分析器(Profiler),但在此之前,我们认为有一些问题应该先清理一下。虽然这类事情不是我们最关心的核心内容,但我们觉得现在是时候处理一下了,特别是为了…

实验三 触发器及基本时序电路

1.触发器的分类?各自的特点是什么? 1 、 D 触发器 特点:只有一个数据输入端 D ,在时钟脉冲的触发沿,输出 Q 的状态跟随输入端 D 的 状态变化,即 ,功能直观,利于理解和感受…

硬件加速模式Chrome(Edge)闪屏

Chrome开启“硬件加速模式”后,打开浏览器会闪屏或看视频会闪屏,如果电脑只有集显,直接将这个硬件加速关了吧,没啥必要开着 解决方法 让浏览器使用独立显卡 在Windows左下角搜索 图形设置 ,将浏览器添加进去&#…

前端工程化利器:Node.js 文件匹配库 fast-glob 完全指南——比传统方案快 350% 的「文件搜索神器」

为什么需要 fast-glob? 在前端工程化场景中,文件匹配是高频操作:自动化构建、资源打包、静态资源管理等都依赖高效的路径匹配。传统的 node-glob 虽然功能齐全,但性能瓶颈明显。fast-glob 应运而生——它以 极简 API 和 超高性能…

React class 的组件库与函数组件适配集成

如果你有一个 基于 React class 的组件库,现在需要在 React hooks 函数组件中使用,你可以通过以下几种方式实现适配和集成: 数据生命周期确保 class 组件使用 React.forwardRef 导出(或手动绑定 ref) ✅ 1. 直接使用 c…

Sway初体验

Sway(缩写自 SirCmpwn’s Wayland compositor[1])是一款专为 Wayland 设计的合成器,旨在与 i3 完全兼容。根据官网所述: Sway 是 Wayland 的合成器,也是 x11 的 i3 窗口管理器的替代品。它可以根据您现有的 i3 配置工作…

dubbo 参数校验-ValidationFilter

org.apache.dubbo.rpc.Filter 核心功能 拦截RPC调用流程 Filter是Dubbo框架中实现拦截逻辑的核心接口,作用于服务消费者和提供者的作业链路,支持在方法调用前后插入自定义逻辑。如参数校验、异常处理、日志记录等。扩展性机制 Dubbo通过SPI扩展机制动态…

Lesson 16 A polite request

Lesson 16 A polite request 词汇 park n. 公园,停车场,庄园 v. 停车,泊车 例句:让我来停车。    Let me park. 相关:spot n. 车位 区别:garden n. 花园 [小,私家的] 例句:我们…

解决 Builroot 系统编译 perl 编译报错问题

本文提供一种修复 Builroot 系统编译 perl 编译报错途径 2025-05-04T22:45:08 rm -f pod/perl5261delta.pod 2025-05-04T22:45:08 /usr/bin/ln -s perldelta.pod pod/perl5261delta.pod 2025-05-04T22:45:08 /usr/bin/gcc -c -DPERL_CORE -fwrapv -fpcc-struct-return -pipe -f…

Spring MVC 中解决中文乱码问题

在 Spring MVC 中解决中文乱码问题,需要从 请求参数编码 和 响应内容编码 两方面入手。以下是完整的解决方案: 一、解决请求参数中文乱码 1. POST 请求编码(表单提交) 配置 CharacterEncodingFilter 在 web.xml 中添加 Spring 提…

MYSQL数据库突然消失

之前在下载mysql时发现没有my.ini。考虑到后面的项目可能需要,看着教程自己创建了一次,当时就发生了所有数据库消失的问题,近几天这种事件又发生了。我在服务里看到我有mysql和mysql57两个服务,启动一个的时候另一个就无法启动&am…