xgboost项目实战-保险赔偿额预测与信用卡评分预测001

news2024/11/19 15:19:15

目录

算法代码

原理

算法流程

xgb.train中的参数介绍

 params

min_child_weight

gamma

技巧


算法代码

代码获取方式:
 
链接:https://pan.baidu.com/s/1QV7nMC5ds5wSh-M9kuiwew?pwd=x48l 
提取码:x48l

特征直方图统计:

fig, (ax1, ax2) = plt.subplots(1,2)
fig.set_size_inches(16,5)
ax1.hist(uniq_values_in_categories.unique_values, bins=50)

特征相关性分析

plt.subplots(figsize=(16,9))
correlation_mat = train[cont_features].corr()
sns.heatmap(correlation_mat, annot=True)

交叉验证调参

plt.figure()
bst_cv1[['train-mae-mean', 'test-mae-mean']].plot()

交叉验证获取核心参数

mean_test_score = scores['mean_test_score']
std_test_score = scores['std_test_score']
params = scores['params']

_params = []
_params_mae = []
for i in range(len(mean_test_score)):
    _params.append(params[i])
    _params_mae.append(mean_test_score[i])
params = np.array(_params)
grid_res = np.column_stack((_params,_params_mae))
print(grid_res)
print(grid_res.shape)
return [grid_res[:,i] for i in range(grid_res.shape[1])]

原理

xgboost可以处理二分类、多分类、回归问题;

Extreme Gradient Boosting。XGBoost(Extreme Gradient Boosting)是一种基于决策树的集成学习算法,它在梯度提升(Gradient Boosting)框架下进行了改进和优化。其基本原理包括以下几个关键步骤:

 集成学习

XGBoost采用集成学习的思想,通过结合多个弱学习器(通常是决策树)来构建一个强大的集成模型。每个弱学习器都是针对数据的不同部分进行训练,然后将它们组合起来形成最终的预测模型。

 决策树的串行训练与集成

XGBoost通过串行训练决策树来构建集成模型。在每一轮训练中,新的决策树被设计为纠正前一轮模型的残差,以逐步减少训练误差。通过迭代添加树模型,XGBoost构建了一个更强大的整体模型。

 正则化

XGBoost引入了正则化技术来控制模型的复杂度,防止过拟合。正则化项包括对树结构的惩罚,以及对叶子节点样本权重的约束,这有助于提高模型的泛化能力。

 特征重要性评估

XGBoost提供了对特征重要性的评估,可以帮助用户了解哪些特征对模型的预测贡献最大。这有助于特征选择和模型解释。

 高效的工程实现

XGBoost在算法和工程实现上都进行了优化,具有高效的训练速度和内存利用率,使其能够处理大规模数据集。

总的来说,XGBoost通过串行训练决策树、引入正则化和特征重要性评估等技术,构建了一种高效而强大的集成学习模型,适用于各种机器学习任务,特别是在结构化数据和表格数据上表现优异。

算法流程

XGBoost(eXtreme Gradient Boosting)是一种基于梯度提升树(Gradient Boosting Tree)的机器学习算法,它在提升树算法的基础上进行了优化和改进,以提高模型的性能和效率。以下是XGBoost算法的基本流程:

  1. 初始化模型参数:包括树的深度、学习率、树的数量等。
  2. 构建初始树:用一个简单的回归树或分类树作为初始模型。
  3. 迭代优化

1.计算损失函数的梯度:根据当前模型对训练数据的预测结果,计算损失函数的梯度。常用的损失函数包括平方损失函数(用于回归问题)和对数损失函数(用于分类问题)。

2.构建新树:基于损失函数的梯度,构建一棵新的回归树或分类树,该树的叶子节点数通常比较少。

3.更新模型:通过将新建的树与之前的模型相加,更新模型的预测结果。为了防止过拟合,通常会乘以一个小于1的学习率。

4.正则化:为了控制模型的复杂度和防止过拟合,可以引入正则化项,如树的深度限制、叶子节点权重的L1和L2正则化。

5. 迭代终止条件:可以设定迭代次数、达到一定的模型性能或损失下降率等作为终止条件。

6.输出最终模型:当满足终止条件时,输出最终的集成模型。

XGBoost通过优化目标函数的梯度提升树模型,采用了一些技术和策略,如加权损失函数、子采样、列抽样、树剪枝等,以提高模型的泛化能力和训练速度。

xgb.train中的参数介绍

xgb.train 函数是用于训练模型的主要函数之一。它允许你手动指定模型的各种参数,以定制化地训练 XGBoost 模型。

 params

字典类型,表示要传递给 XGBoost 模型的参数。常见的参数包括:reg:linear 表示 XGBoost 将使用线性回归作为优化目标,即模型的输出是一个连续值,目标是最小化预测值与实际值之间的均方误差(MSE)或其他回归损失函数。

binary:logistic 是 XGBoost 中用于二分类问题的一种优化目标(objective)。使用逻辑回归(Logistic Regression)作为优化目标,用于解决二分类问题。

在二分类任务中目标是将样本分为两个类别,正类和负类。而binary:logistic 的作用是训练一个模型,使得对于给定的输入特征,模型能够输出一个概率值,表示样本属于正类的概率。然后设定一个阈值,将这个概率转换为类别标签,例如大于阈值则预测为正类,小于阈值则预测为负类。

使用 binary:logistic 作为优化目标时,模型的输出会通过逻辑函数(sigmoid 函数)转换为 0 到 1 之间的概率值,表示正类的概率。然后,模型会根据损失函数(通常是对数损失函数)来优化模型参数,以最大化预测的概率与实际标签的一致性。

multi:softmax多分类问题的一种优化目标(objective)设置。具体来说,multi:softmax 表示 XGBoost 将使用 Softmax 函数作为优化目标,用于多类别分类。Softmax 函数可以将模型的原始输出转换为每个类别的概率分布,使得概率之和为 1。在训练过程中,XGBoost 会优化模型参数,以最大化实际类别的概率与预测类别的概率之间的一致性。

XGBoost 将会训练一个多分类模型,该模型会尝试在给定数据集上学习出最佳的分类决策边界,以便能够将样本正确地分到多个类别中去。

对于回归任务(如 reg:linear),常用的评估指标包括均方误差(rmse)、平均绝对误差(mae)等。

对于二分类任务(如 binary:logistic),常用的评估指标包括准确率(error)、AUC(auc)等。

对于多分类任务(如 multi:softmax),常用的评估指标包括准确率(merror)、多分类对数损失(mlogloss)等。

min_child_weight

较大的 min_child_weight 值会导致更加保守的树模型,因为它限制了每个叶子节点的样本权重总和,使得树的生长更加受限制。相反,较小的 min_child_weight 值允许模型更多地考虑每个叶子节点的样本,可能导致模型过拟合。

注意:在决策树的训练过程中,每个样本都会被分配一个权重,这个权重可以用来调节样本对模型的贡献程度。

当训练一棵决策树时,XGBoost 会根据样本的权重来计算叶子节点的样本权重。这个过程涉及到样本在树的每个节点上的传递和累积,最终得到每个叶子节点所包含的样本的权重之和。

通过调节叶子节点的样本权重,我们可以控制模型对不同样本的关注程度,进而影响模型的泛化能力和性能。

选择合适的min_child_weight值通常需要通过交叉验证来进行调整。如果min_child_weight设置得太大,可能会导致模型欠拟合;如果设置得太小,可能会导致模型过拟合。

通过调节 subsample 参数,可以控制每棵树的训练样本的多少,从而影响模型的方差和泛化能力。较小的 subsample 值可以降低模型的方差,因为每棵树使用的样本更少,模型更加稳定,但可能会增加偏差。较大的 subsample 值可以提高模型的拟合能力,但可能导致过拟合。

通过调节 colsample_bytree 参数,可以控制每棵树使用的特征的数量,从而增加模型的多样性,减少过拟合的风险。较小的 colsample_bytree 值可以降低模型的方差,增加模型的泛化能力,但可能会增加模型的偏差。较大的 colsample_bytree 值可以提高模型的拟合能力,但也可能导致过拟合。

  1. dtrain: 训练数据集(DMatrix 格式),是 XGBoost 特有的数据结构,用于高效存储和处理大型数据集。
  2. evals: 需要评估的数据集列表,通常包括训练数据集和验证数据集。
  3. obj: 自定义目标函数(可选)。
  4. feval: 自定义评估函数(可选)。
  5. early_stopping_rounds: 当验证指标不再提升时,停止训练的迭代次数。

early_stopping_rounds 参数指定了在多少个迭代轮次内,如果模型的性能在验证集上没有改善,就停止训练。例如如果将 early_stopping_rounds 设置为 10,那么在训练过程中如果连续 10 个迭代轮次内模型的性能都没有提升,训练就会提前终止。

 verbose_eval: 控制输出信息的频率。如果设置为一个非负整数,则表示每隔指定的迭代轮次输出一次训练信息。例如,如果 verbose_eval 设置为 100,那么每隔 100 个迭代轮次就会输出一次训练信息。

如果设置为 True,则表示在每个迭代轮次结束后都输出训练信息。

 callbacks: 回调函数列表,用于在训练过程中执行自定义操作(如保存模型)。callbacks 参数可以用于指定回调函数,在训练过程中执行特定的操作。常见的用途包括提前停止训练、保存模型、记录训练过程中的指标等。

gamma

`gamma` 参数是一个用于控制模型复杂度的关键参数,它是在构建决策树时用来进行剪枝的。`gamma` 参数的值越大,模型就越保守,倾向于剪枝,这样可以避免过拟合。相反,`gamma` 参数的值越小,模型就越自由,可以生长更多的叶子节点,这可能会导致过拟合。

`gamma` 参数实际上代表了在添加一个新的分裂点时,所需的最小减少的损失。如果一个分裂点不能至少减少 `gamma` 这么多的损失,那么这个分裂点就会被忽略。因此,`gamma` 可以被视为一个正则化项,用于控制模型的复杂度。

在数学上,`gamma` 参数与树的叶子节点的数量和深度直接相关。较大的 `gamma` 值会导致生成较浅的树,因为需要更大的损失减少来创建新的分裂。较小的 `gamma` 值会导致生成较深的树,因为较小的损失减少就足够创建新的分裂。

在实际应用中,调整 `gamma` 参数可以帮助找到模型复杂度和性能之间的最佳平衡点。如果模型的性能在验证集上不佳,可能需要增加 `gamma` 值来减少过拟合。相反,如果模型在训练集上的性能不佳,可能需要减小 `gamma` 值来增加模型的复杂度。

`gamma` 被设置为 0,这意味着默认情况下不会有额外的剪枝。在实际应用中,你可能需要通过交叉验证等方法来调整 `gamma` 的值,以找到最佳的模型配置。

技巧

train.select_dtypes: 选择不同数据类型的特征;

偏度概念

scipy库中,stats.mstats.skew()函数用于计算数据的偏度(skewness)。偏度是描述数据分布不对称性的一个统计量,它是衡量数据分布相对于平均值的偏斜程度。

偏度的计算公式为:

其中:

  • ( n ) 是数据点的数量。
  • ( x_i ) 是第 ( i ) 个数据点。
  • ( bar{x} ) 是数据的平均值。
  • ( s ) 是标准差。
  • 如果偏度为正数,数据分布是右偏的,即数据点倾向于分布在平均值的右侧。
  • 如果偏度为负数,数据分布是左偏的,即数据点倾向于分布在平均值的左侧。
  • 如果偏度为零,数据分布是对称的,即数据点均匀分布在平均值两侧。
  • 偏度值接近于零,表示数据分布比较对称。
  • 偏度值远大于零或远小于零,表示数据分布非常偏斜。 在scipy.stats.mstats.skew()函数中,如果bias参数设置为True,则计算的是无偏估计量,即考虑了数据点的数量对偏度的影响。如果bias参数设置为False,则计算的是未调整偏度的原始估计量,这通常只在理论分析中使用。 例如,使用scipy.stats.mstats.skew()函数计算数据集的偏度:

连续数值特征与分类特征需要分开处理;

使用直方图可视化,统计频率分布;

corr()计算特征之间相关系数;并用sns.heatmap绘制热力图;

保险预测--回归问题;

在Python的pandas库中,astype('category') 方法将pandas的DataFrame或Series列转换为类别类型(categorical type)。这通常用于处理具有有限数量的不同值的列,例如性别、国家代码等。转换为类别类型可以节省内存,并且可以加快某些操作的处理速度。

使用 cat.codes 属性来获取每个类别值的数字编码。这些编码是整数,表示每个唯一类别在类别列表中的位置。例如,如果有一个包含三个不同国家的列,那么这些国家可能会被编码为0、1和2。

GridSearchCV(XGBoostRegressor): 交叉验证获取最佳参数,例如max_depth; min_child_weight;

一般交叉验证调参

Step 1: 选择一组初始参数

Step 2: 改变 max_depth 和 min_child_weight.

Step 3: 调节 gamma 降低模型过拟合风险.

Step 4: 调节 subsample 和 colsample_bytree 改变数据采样策略.

Step 5: 调节学习率 eta.(与数的深度反复调节)

ETA和num_boost_round依赖关系不是线性的,但是有些关联。

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

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

相关文章

Advanced Installer 问题集锦

1、界面在主题中显示的图标,如logo、发布者名称、产品名称就算在设计界面时删除,但是下次打开工程依然存在 解决办法:“可见”属性设置为禁用 2、在不关闭软件的情况下,使用"文件->打开"来切换项目,再次…

我让gpt4o给我推荐了一千多次书 得到了这些数据

事情是这样的,我们公司不是有个读书小组嘛,但是今年大家都忙于工作,忽视了读书这件事,所以我就想着搞个群机器人,让它明天定时向群里推荐一本书,用来唤起大家对读书的兴趣。但在调试的过程中就发现gpt4o老喜…

uniapp使用uni.chooseImage选择图片后对其是否符合所需的图片大小和类型进行校验

uni.chooseImage的返回值在H5平台和其他平台的返回值有所差异,具体差异看下图 根据图片可以看出要想判断上传的文件类型是不能直接使用type进行判断的,所以我使用截取字符串的形式来判断,当前上传图片的后缀名是否符合所需要求。 要求&#…

(已开源-ICRA2023) High Resolution Point Clouds from mmWave Radar

本文提出了一种用于生成高分辨率毫米波雷达点云的方法:RadarHD,端到端的神经网络,用于从低分辨率雷达构建类似激光雷达的点云。本文通过在大量原始雷达数据上训练 RadarHD 模型,同时这些雷达数据有对应配对的激光雷达点云数据。本…

Vue3实战笔记(37)—粒子特效登录页面

文章目录 前言一、粒子特效登录页总结 前言 上头了&#xff0c;再来一个粒子特效登录页面。 一、粒子特效登录页 登录页&#xff1a; <template><div><vue-particles id"tsparticles" particles-loaded"particlesLoaded" :options"…

ML307R OpenCPU GPIO使用

一、GPIO使用流程图 二、函数介绍 三、GPIO 点亮LED 四、代码下载地址 一、GPIO使用流程图 这个图是官网找到的&#xff0c;ML307R GPIO引脚电平默认为1.8V&#xff0c;需注意和外部电路的电平匹配&#xff0c;具体可参考《ML307R_硬件设计手册_OpenCPU版本适用.pdf》中的描…

MLM之CogVLM2:CogVLM2(基于Llama-3-8B-Instruct 模型进行微调)的简介、安装和使用方法、案例应用之详细攻略

MLM之CogVLM2&#xff1a;CogVLM2(基于Llama-3-8B-Instruct 模型进行微调)的简介、安装和使用方法、案例应用之详细攻略 目录 CogVLM2的简介 1、更新日志 2、CogVLM2 系列开源模型的详细信息 3、Benchmark 4、项目结构 5、模型协议 CogVLM2的安装和使用方法 1、模型微调…

智慧社区管理系统:打造便捷、安全、和谐的新型社区生态

项目背景 在信息化、智能化浪潮席卷全球的今天&#xff0c;人们对于生活品质的需求日益提升&#xff0c;期待居住环境能与科技深度融合&#xff0c;实现高效、舒适、安全的生活体验。在此背景下&#xff0c;智慧社区管理系统应运而生&#xff0c;旨在借助现代信息技术手段&…

685. 冗余连接 II

685. 冗余连接 II 问题描述 在本问题中&#xff0c;有根树指满足以下条件的 有向 图。该树只有一个根节点&#xff0c;所有其他节点都是该根节点的后继。该树除了根节点之外的每一个节点都有且只有一个父节点&#xff0c;而根节点没有父节点。 输入一个有向图&#xff0c;该…

String类为什么设计成不可变的?

目录 缓存 安全性 线程安全 hashCode缓存 性能 其实这个问题我们可以通过缓存、安全性、线程安全和性能几个维度去解析。 缓存 字符串是Java最常用的数据结构&#xff0c;我们都知道字符串大量创建是非常耗费资源的&#xff0c;所以Java中就将String设计为带有缓存的功能…

揭秘Python安装目录:你的编程宝库隐藏了哪些宝藏?

python3.10安装目录结构 Python310/ │ ├── DLLs/ # Python 解释器所需的 DLL 文件 ├── Doc/ # Python 的 官方文档和参考手册 ├── include/ # 头文件和静态库文件 ├── Lib/ # Python 标准库 ├── libs/ …

微信小程序实现计算当前位置到目的地的距离

实现方式&#xff1a;使用腾讯位置服务 微信小程序JavaScript SDK | 腾讯位置服务 1.进腾讯位置服务申请key 2.下载sdk 微信小程序JavaScript SDK | 腾讯位置服务 3.微信公众平台添加授权域名 4.代码实现计算 const qqmap require("../../utils/qqmap-wx-jssdk.min.js…

探索集合python(Set)的神秘面纱:它与字典有何不同?

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、集合&#xff08;Set&#xff09;与字典&#xff08;Dictionary&#xff09;的初识 1. …

历年高校招生计划数据 API 数据接口

历年高校招生计划数据 API 数据接口 基础数据 / 高校招生&#xff0c;各高校历年招生计划数据&#xff0c;高校招生数据 / 历年计划。 1. 产品功能 支持历年高校招生计划数据查询&#xff1b;包含各高校招生计划详细数据&#xff1b;多维度查询条件支持&#xff1b;毫秒级查询…

3款录屏录制软件,打造专业级视频内容

随着技术的不断发展&#xff0c;人们在日常工作和学习中经常会遇到记录电脑屏幕的需求&#xff0c;例如录制游戏过程、制作教程、保存会议记录等。为了解决这一需求&#xff0c;许多录屏录制软件应运而生。本文将介绍三款常见的录屏录制软件&#xff0c;通过分析它们的特点和使…

JAVASE之类和对象(2)

哪怕犯错&#xff0c;也不能什么都不做。 主页&#xff1a;趋早–Step 专栏&#xff1a;JAVASE gitte:https://gitee.com/good-thg 接上部分&#xff0c;我们继续来学习JAVAEE类和对象。 引言&#xff1a; 这篇文章接上一篇&#xff0c;后半部分&#xff0c;结束类和对象 目录 …

C++:STL简介和容器string用法篇

一、STL简介 STL是C中的标准模板库&#xff08;Standard Template Library&#xff09;的缩写。它是C标准库的一部分&#xff0c;提供了一系列的数据结构和算法模板&#xff0c;包括各种容器、算法、迭代器、仿函数等&#xff0c;用于简化和加速C程序的开发过程。STL的设计理念…

[6] CUDA之线程同步

CUDA之线程同步 共享内存&#xff1a;线程时间需要互相交换数据才能完成任务的情况并不少见&#xff0c;因此&#xff0c;必须存在某种能让线程彼此交流的机制当很多线程并行工作并且访问相同的数据或者存储器位置的时候&#xff0c;线程间必须正确的同步线程之间交换数据并不…

Django-auth组件

Django-auth组件 1 表结构 我们从python manage.py migrate为我们创建的auth组件内置的表开始看 auth_user&#xff1a;用户表存储用户信息&#xff08;登录admin后台&#xff09; 里面的字段分两类&#xff1a;用户基本信息&#xff08;用户名&#xff0c;邮箱&#xff0c;密…

音视频开发4-补充 FFmpeg 开发环境搭建 -- 在windows 上重新build ffmpeg

本节的目的是在windows 上 编译 ffmpeg 源码&#xff0c;这样做的目的是&#xff1a;在工作中可以根据工作的实际内容裁剪 ffmpeg&#xff0c;或者改动 ffmpeg 的源码。 第一步 &#xff1a;下载&#xff0c; 安装&#xff0c;配置 &#xff0c;运行 msys64 下载 下载地址&…