机器学习集成学习进阶Xgboost算法案例分析 1

简介: 机器学习集成学习进阶Xgboost算法案例分析

1 xgboost算法api介绍

1.1 xgboost的安装

官网链接:https://xgboost.readthedocs.io/en/latest/

pip3 install xgboost

2 xgboost参数介绍

xgboost虽然被称为kaggle比赛神奇,但是,我们要想训练出不错的模型,必须要给参数传递合适的值。

xgboost中封装了很多参数,主要由三种类型构成:通用参数(general parameters),Booster 参数(booster parameters)和学习目标参数(task parameters)

  • 通用参数:主要是宏观函数控制;
  • Booster参数:取决于选择的Booster类型,用于控制每一步的booster(tree, regressiong)
  • 学习目标参数:控制训练目标的表现

2.1 通用参数(general parameters)

  1. booster [缺省值=gbtree]
  1. 决定使用哪个booster,可以是gbtree,gblinear或者dart。
  • gbtree和dart使用基于树的模型(dart 主要多了 Dropout),而gblinear 使用线性函数.
  1. silent[缺省值=0]
  • 设置为0打印运行信息;设置为1静默模式,不打印
  1. nthread[缺省值=设置为最大可能的线程数]
  • 并行运行xgboost的线程数,输入的参数应该<=系统的CPU核心数,若是没有设置算法会检测将其设置为CPU的全部核心数

下面的两个参数不需要设置,使用默认的就好了

  1. num_pbuffer[xgboost自动设置,不需要用户设置]
  • 预测结果缓存大小,通常设置为训练实例的个数。该缓存用于保存最后boosting操作的预测结果。
  1. num_feature[xgboost自动设置,不需要用户设置]
  • 在boosting中使用特征的维度,设置为特征的最大维度

2.2 Booster 参数(booster parameters)

2.2.1 Parameters for Tree Booster

eta [缺省值=0.3,别名:learning_rate]

更新中减少的步长来防止过拟合。

在每次boosting之后,可以直接获得新的特征权值,这样可以使得boosting更加鲁棒。

范围: [0,1]

gamma [缺省值=0,别名: min_split_loss](分裂最小loss)

在节点分裂时,只有分裂后损失函数的值下降了,才会分裂这个节点。

Gamma指定了节点分裂所需的最小损失函数下降值。 这个参数的值越大,算法越保守。这个参数的值和损失函数息息相关,所以是需要调整的。

范围: [0,∞]

max_depth [缺省值=6]

这个值为树的最大深度。 这个值也是用来避免过拟合的。max_depth越大,模型会学到更具体更局部的样本。设置为0代表没有限制

范围: [0,∞]

min_child_weight [缺省值=1]

决定最小叶子节点样本权重和。XGBoost的这个参数是最小样本权重的和.

当它的值较大时,可以避免模型学习到局部的特殊样本。 但是如果这个值过高,会导致欠拟合。这个参数需要使用CV来调整。.

范围: [0,∞]

subsample [缺省值=1]

这个参数控制对于每棵树,随机采样的比例。

减小这个参数的值,算法会更加保守,避免过拟合。但是,如果这个值设置得过小,它可能会导致欠拟合。

典型值:0.5-1,0.5代表平均采样,防止过拟合.

范围: (0,1]

colsample_bytree [缺省值=1]

用来控制每棵随机采样的列数的占比(每一列是一个特征)。

典型值:0.5-1

范围: (0,1]

colsample_bylevel [缺省值=1]

用来控制树的每一级的每一次分裂,对列数的采样的占比。

我个人一般不太用这个参数,因为subsample参数和colsample_bytree参数可以起到相同的作用。但是如果感兴趣,可以挖掘这个参数更多的用处。

范围: (0,1]

lambda [缺省值=1,别名: reg_lambda]

权重的L2正则化项(和Ridge regression类似)。

这个参数是用来控制XGBoost的正则化部分的。虽然大部分数据科学家很少用到这个参数,但是这个参数

在减少过拟合上还是可以挖掘出更多用处的。.

alpha [缺省值=0,别名: reg_alpha]

权重的L1正则化项。(和Lasso regression类似)。 可以应用在很高维度的情况下,使得算法的速度更快。

scale_pos_weight[缺省值=1]

在各类别样本十分不平衡时,把这个参数设定为一个正值,可以使算法更快收敛。通常可以将其设置为负

样本的数目与正样本数目的比值。

2.2.2 Parameters for Linear Booster

linear booster一般很少用到。


lambda [缺省值=0,别称: reg_lambda]

L2正则化惩罚系数,增加该值会使得模型更加保守。

alpha [缺省值=0,别称: reg_alpha]

L1正则化惩罚系数,增加该值会使得模型更加保守。

lambda_bias [缺省值=0,别称: reg_lambda_bias]

偏置上的L2正则化(没有在L1上加偏置,因为并不重要)

2.3 学习目标参数(task parameters)

objective [缺省值=reg:linear]


“reg:linear” – 线性回归

“reg:logistic” – 逻辑回归

“binary:logistic” – 二分类逻辑回归,输出为概率

“multi:softmax” – 使用softmax的多分类器,返回预测的类别(不是概率)。在这种情况下,你还需要多设一个参数:num_class(类别数目)

“multi:softprob” – 和multi:softmax参数一样,但是返回的是每个数据属于各个类别的概率。

eval_metric [缺省值=通过目标函数选择]


可供选择的如下所示:


“rmse”: 均方根误差


“mae”: 平均绝对值误差


“logloss”: 负对数似然函数值



error”

二分类错误率。

其值通过错误分类数目与全部分类数目比值得到。对于预测,预测值大于0.5被认为是正类,其它归为负类。

“error@t”: 不同的划分阈值可以通过 ‘t’进行设置


“merror”: 多分类错误率,计算公式为(wrong cases)/(all cases)


“mlogloss”: 多分类log损失


“auc”: 曲线下的面积


seed [缺省值=0]


随机数的种子

- 设置它可以复现随机数据的结果,也可以用于调整参数

3 xgboost案例介绍

3.1 案例背景

该案例和前面决策树中所用案例一样。


泰坦尼克号沉没是历史上最臭名昭着的沉船事件之一。1912年4月15日,在她的处女航中,泰坦尼克号在与冰山相撞后沉没,在2224名乘客和机组人员中造成1502人死亡。这场耸人听闻的悲剧震惊了国际社会,并为船舶制定了更好的安全规定。 造成海难失事的原因之一是乘客和机组人员没有足够的救生艇。尽管幸存下沉有一些运气因素,但有些人比其他人更容易生存,例如妇女,儿童和上流社会。 在这个案例中,我们要求您完成对哪些人可能存活的分析。特别是,我们要求您运用机器学习工具来预测哪些乘客幸免于悲剧。


案例:https://www.kaggle.com/c/titanic/overview


我们提取到的数据集中的特征包括票的类别,是否存活,乘坐班次,年龄,登陆home.dest,房间,船和性别等。


数据:http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt


08e1ec00bf2832b816fb513d9b3e7560.jpg


经过观察数据得到:


1 乘坐班是指乘客班(1,2,3),是社会经济阶层的代表。

2 其中age数据存在缺失。

3.2 步骤分析

1.获取数据

2.数据基本处理

2.1 确定特征值,目标值

2.2 缺失值处理

2.3 数据集划分

3.特征工程(字典特征抽取)

4.机器学习(xgboost)

5.模型评估

3.3 代码实现

导入需要的模块

import pandas as pd
import numpy as np
from sklearn.feature_extraction import DictVectorizer
from sklearn.model_selection import train_test_split

1.获取数据

# 1、获取数据
titan = pd.read_csv("http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt")

2.数据基本处理

2.1 确定特征值,目标值

x = titan[["pclass", "age", "sex"]]
y = titan["survived"]

2.2 缺失值处理

# 缺失值需要处理,将特征当中有类别的这些特征进行字典特征抽取
x['age'].fillna(x['age'].mean(), inplace=True)

2.3 数据集划分

x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=22)

3.特征工程(字典特征抽取)

特征中出现类别符号,需要进行one-hot编码处理(DictVectorizer)


x.to_dict(orient=“records”) 需要将数组特征转换成字典数据

# 对于x转换成字典数据x.to_dict(orient="records")
# [{"pclass": "1st", "age": 29.00, "sex": "female"}, {}]
transfer = DictVectorizer(sparse=False)
x_train = transfer.fit_transform(x_train.to_dict(orient="records"))
x_test = transfer.fit_transform(x_test.to_dict(orient="records"))

4.xgboost模型训练和模型评估

# 模型初步训练
from xgboost import XGBClassifier
xg = XGBClassifier()
xg.fit(x_train, y_train)
xg.score(x_test, y_test)
# 针对max_depth进行模型调优
depth_range = range(10)
score = []
for i in depth_range:
    xg = XGBClassifier(eta=1, gamma=0, max_depth=i)
    xg.fit(x_train, y_train)
    s = xg.score(x_test, y_test)
    print(s)
    score.append(s)
# 结果可视化
import matplotlib.pyplot as plt
plt.plot(depth_range, score)
plt.show()


3289c63aa9625008f32385bf6fa49af5.jpg

目录
相关文章
|
4月前
|
SQL 数据可视化 关系型数据库
MCP与PolarDB集成技术分析:降低SQL门槛与简化数据可视化流程的机制解析
阿里云PolarDB与MCP协议融合,打造“自然语言即分析”的新范式。通过云原生数据库与标准化AI接口协同,实现零代码、分钟级从数据到可视化洞察,打破技术壁垒,提升分析效率99%,推动企业数据能力普惠化。
387 3
|
9月前
|
人工智能 自然语言处理 DataWorks
DataWorks Copilot 集成Qwen3-235B-A22B混合推理模型,数据开发与分析效率再升级!
阿里云DataWorks平台正式接入Qwen3模型,支持最大235B参数量。用户可通过DataWorks Copilot智能助手调用该模型,以自然语言交互实现代码生成、优化、解释及纠错等功能,大幅提升数据开发与分析效率。Qwen3作为最新一代大语言模型,具备混合专家(MoE)和稠密(Dense)架构,适应多种应用场景,并支持MCP协议优化复杂任务处理。目前,用户可通过DataWorks Data Studio新版本体验此功能。
763 23
DataWorks Copilot 集成Qwen3-235B-A22B混合推理模型,数据开发与分析效率再升级!
|
7月前
|
存储 缓存 分布式计算
OSS大数据分析集成:MaxCompute直读OSS外部表优化查询性能(减少数据迁移的ETL成本)
MaxCompute直读OSS外部表优化方案,解决传统ETL架构中数据同步延迟高、传输成本大、维护复杂等问题。通过存储格式优化(ORC/Parquet)、分区剪枝、谓词下推与元数据缓存等技术,显著提升查询性能并降低成本。结合冷热数据分层与并发控制策略,实现高效数据分析。
208 2
|
10月前
|
关系型数据库 MySQL OLAP
无缝集成 MySQL,解锁秒级 OLAP 分析性能极限,完成任务可领取三合一数据线!
通过 AnalyticDB MySQL 版、DMS、DTS 和 RDS MySQL 版协同工作,解决大规模业务数据统计难题,参与活动完成任务即可领取三合一数据线(限量200个),还有机会抽取蓝牙音箱大奖!
|
算法
PAI下面的gbdt、xgboost、ps-smart 算法如何优化?
设置gbdt 、xgboost等算法的样本和特征的采样率
366 2
|
搜索推荐 JavaScript BI
ClkLog埋点分析系统常见问题-埋点集成篇Sec. 1
本篇主要解答ClkLog使用过程中【埋点集成】阶段的常见问题。
ClkLog埋点分析系统常见问题-埋点集成篇Sec. 1
|
机器学习/深度学习 数据采集 分布式计算
【Python篇】深入机器学习核心:XGBoost 从入门到实战
【Python篇】深入机器学习核心:XGBoost 从入门到实战
1645 3
|
机器学习/深度学习 存储 数据采集
Elasticsearch 与机器学习的集成
【9月更文第3天】Elasticsearch 不仅仅是一个强大的分布式搜索和分析引擎,它还是一个完整的数据平台,通过与 Kibana、Logstash 等工具结合使用,能够提供从数据采集、存储到分析的一站式解决方案。特别是,Elasticsearch 集成了机器学习(ML)功能,使得在实时数据流中进行异常检测和趋势预测成为可能。本文将详细介绍如何利用 Elasticsearch 的 ML 功能来检测异常行为或预测趋势。
562 4
|
机器学习/深度学习 人工智能 搜索推荐
如何让你的Uno Platform应用秒变AI大神?从零开始,轻松集成机器学习功能,让应用智能起来,用户惊呼太神奇!
【9月更文挑战第8天】随着技术的发展,人工智能与机器学习已融入日常生活,特别是在移动应用开发中。Uno Platform 是一个强大的框架,支持使用 C# 和 XAML 开发跨平台应用(涵盖 Windows、macOS、iOS、Android 和 Web)。本文探讨如何在 Uno Platform 中集成机器学习功能,通过示例代码展示从模型选择、训练到应用集成的全过程,并介绍如何利用 Onnx Runtime 等库实现在 Uno 平台上的模型运行,最终提升应用智能化水平和用户体验。
408 1
|
机器学习/深度学习 存储 前端开发
实战揭秘:如何借助TensorFlow.js的强大力量,轻松将高效能的机器学习模型无缝集成到Web浏览器中,从而打造智能化的前端应用并优化用户体验
【8月更文挑战第31天】将机器学习模型集成到Web应用中,可让用户在浏览器内体验智能化功能。TensorFlow.js作为在客户端浏览器中运行的库,提供了强大支持。本文通过问答形式详细介绍如何使用TensorFlow.js将机器学习模型带入Web浏览器,并通过具体示例代码展示最佳实践。首先,需在HTML文件中引入TensorFlow.js库;接着,可通过加载预训练模型如MobileNet实现图像分类;然后,编写代码处理图像识别并显示结果;此外,还介绍了如何训练自定义模型及优化模型性能的方法,包括模型量化、剪枝和压缩等。
894 1