Python实现直方图梯度提升分类模型(HistGradientBoostingClassifier算法)并基于网格搜索进行优化同时绘制PDP依赖图项目实战
说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取。
1.项目背景
基于直方图的梯度提升分类树。此估算器对缺失值 (NaN) 具有原生支持。在训练过程中,树种植者根据潜在增益在每个分割点学习具有缺失值的样本是应该去左孩子还是右孩子。在预测时,具有缺失值的样本因此被分配给左孩子或右孩子。如果在训练期间没有遇到给定特征的缺失值,则将具有缺失值的样本映射到拥有最多样本的子节点。
本项目通过直方图梯度提升分类模型来进行建模,并通过网格搜索算法进行模型的调优,使模型达到最优的效果,最后绘制特征的PDP依赖图。
2.数据获取
本次建模数据来源于网络(本项目撰写人整理而成),数据项统计如下:
数据详情如下(部分展示):
3.数据预处理
3.1 用Pandas工具查看数据
使用Pandas工具的head()方法查看前五行数据:
关键代码:
3.2数据缺失查看
使用Pandas工具的info()方法查看数据信息:
从上图可以看到,总共有10个变量,数据中无缺失值,共1000条数据。
关键代码:
3.3数据描述性统计
通过Pandas工具的describe()方法来查看数据的平均值、标准差、最小值、分位数、最大值。
关键代码如下:
4.探索性数据分析
4.1 y变量柱状图
用Matplotlib工具的plot()方法绘制柱状图:
4.2 y=1样本x1变量分布直方图
用Matplotlib工具的hist()方法绘制直方图:
从上图可以看出,y主要分布在-1~1之间。
4.3 相关性分析
从上图中可以看到,数值越大相关性越强,正值是正相关、负值是负相关。
5.特征工程
5.1 建立特征数据和标签数据
关键代码如下:
5.2 数据集拆分
通过train_test_split()方法按照80%训练集、20%测试集进行划分,关键代码如下:
6.构建直方图梯度提升分类模型
主要使用HistGradientBoostingClassifier算法和网格搜索优化算法,用于目标分类。
6.1默认参数构建模型
6.2 通过网格搜索寻找最优参数值
关键代码:
最优参数:
6.3 最优参数值构建模型
7.模型评估
7.1 评估指标及结果
评估指标主要包括准确率、查准率、召回率、F1分值等等。
从上表可以看出,R方为0.92和默认的参数基本一致,说明基于本项目的数据,调优并未进一步提高模型效果,大家可以调优此模型的其它参数或者用新的数据进行尝试。
关键代码如下:
7.2 查看是否过拟合
从上图可以看出,训练集和测试集分值相当,无过拟合现象。
7.3 分类报告
从上图可以看出,分类为0的F1分值为0.92;分类为1的F1分值为0.92。
7.4 混淆矩阵
从上图可以看出,实际为0预测不为0的 有11个样本;实际为1预测不为1的 有5个样本,整体预测准确率良好。
7.5 ROC曲线图
通过上图可以看出,AUC的数值为0.98,说明模型效果较好。
7.6 部分依赖图(PDP)绘制
如今机器学习算法在各个领域被广泛应用,对于一些领域的科研来说,机器学习提供了更精确估计的可能,但是其弱解释性却成为了更深入研究的阻力。可解释机器学习就是在机器学习模型的基础上通过一系列方法使得模型结果具备可解释的特性,部分依赖图(Partial Dependence Plot)显示了一个或两个特征对机器学习模型的预测结果的边际效应,由于很多机器学习算法非参数的特性使得部份依赖图可以揭示线性以及非线性特征,容易理解并且有较高的解释力。
部分依赖图简易并且直观,在科学研究中被经常使用,但同时它也具有一些问题:
1.自变量间可能存在复杂的交互关系导致最终的结果,所以单看一个变量的pdp图可能是不全面的,然而由于人们对图形理解力的局限性,pdp图最多只支持双变量的交互而无法进行更高维的交互,当然这个缺陷的主要来源是人们的主观理解能力有限。
2.一些pdp图不显示特征分布,这可能会产生误导,因为可能会过度解释几乎没有数据的区域。
3.pdp假设其计算部分依赖的特征与其他特征不相关(在不进行交互的情况下),这可能会导致结果的误差,一个解决办法是使用条件而不是边际分布的累积局部效应图。
4.由于pdp绘制的是平均响应,个体间的异质性可能无法被观察到,即有可能个体间的变化差异明显,这可以通过个体条件期望(Individual Conditional Expectation,ICE)曲线观察到。
5.取决于算法的精度以及难以避免的过拟合,pdp图可能存在许多较小的波动或变化趋势,而一般进行解释性研究时更加关注的是整体的变化趋势而不是局部变化。
PDP部分依赖图:
带ICE置信区间的PDP图:
8.结论与展望
综上所述,本文采用了直方图梯度提升分类算法来构建分类模型,通过网格搜索算法找到最优的参数值,最终证明了我们提出的模型效果很好,可用于实际生产中进行预测,使企业发展得更好,利润更多。
本次机器学习项目实战所需的资料,项目资源如下:
项目说明:
链接:https://pan.baidu.com/s/1dW3S1a6KGdUHK90W-lmA4w
提取码:bcbp
Python实现直方图梯度提升分类模型(HistGradientBoostingClassifier算法)并基于网格搜索进行优化同时绘制PDP依赖图项目实战相关推荐
- 【机器学习】SVM支持向量机在手写体数据集上进行二分类、采⽤ hinge loss 和 cross-entropy loss 的线性分类模型分析和对比、网格搜索
2022Fall 机器学习 1. 实验要求 考虑两种不同的核函数:i) 线性核函数; ii) ⾼斯核函数 可以直接调⽤现成 SVM 软件包来实现 ⼿动实现采⽤ hinge loss 和 cross-e ...
- Python实现KNN(K近邻)回归模型(KNeighborsRegressor算法)并应用网格搜索算法寻找最优参数值项目实战
说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 K近邻算法回归模型则将离待预测样本点最近的K个训练样本点的平均值 ...
- 机器学习 | Python实现GBDT梯度提升树模型设计
机器学习 | Python实现GBDT梯度提升树模型设计 目录 机器学习 | Python实现GBDT梯度提升树模型设计 基本介绍 模型描述 程序设计 参考资料 基本介绍 GBDT也是集成学习Boos ...
- python 梯度提升树_梯度提升方法(Gradient Boosting)算法案例
GradientBoost算法 python实现,该系列文章主要是对<统计学习方法>的实现. 完整的笔记和代码以上传到Github,地址为(觉得有用的话,欢迎Fork,请给作者个Star) ...
- Python实现Catboost分类模型(CatBoostClassifier算法)项目实战
说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 CatBoost提供最先进的结果,在性能方面与任何领先的机器学习 ...
- R语言构建catboost模型:构建catboost模型并基于网格搜索获取最优模型参数(Select hyperparameters)、计算特征重要度
R语言构建catboost模型:构建catboost模型并基于网格搜索获取最优模型参数(Select hyperparameters).计算特征重要度(feature importance) 目录
- DL之模型调参:深度学习算法模型优化参数之对深度学习模型的超参数采用网格搜索进行模型调优(建议收藏)
DL之模型调参:深度学习算法模型优化参数之对深度学习模型的超参数采用网格搜索进行模型调优(建议收藏) 目录 神经网络的参数调优 1.神经网络的通病-各种参数随机性 2.评估模型学习能力
- Python机器学习(sklearn)——分类模型评估与调参总结(下)
21.集成方法有随机森林(random forest)和梯度提升树(gradient boosted decision tree)GBDT 随机森林中树的随机化方法有两种: (1)通过选择用于构造树的 ...
- python输入数据的维度_keras分类模型中的输入数据与标签的维度实例
在<python深度学习>这本书中. 一.21页mnist十分类 导入数据集 from keras.datasets import mnist (train_images, train_l ...
最新文章
- Mysql中(@i:=@i+1)的作用
- skynet给集群中的一个节点配置多个通道
- 3.2.1 OS之虚拟内存的基本概念(局部性原理、高速缓存、虚拟内存的实现)
- TCP三次握手(待细研究)
- 面试准备每日系列:计算机底层之并发编程(二)缓存行、一致性协议、伪共享、disruptor、CAS等待
- 常用类中的方法 —— java.util.Map
- 【转】Windows XP打印共享四大问题及解决方法
- logging synchronous
- react native webview 百度地图_react-native-baidu-map使用及注意问题
- LwM2M(轻量级M2M)协议
- 快速安装vs2015社区版
- 电脑播放视频显示运行服务器失败,电脑不能播放视频如何解决?
- (淘宝无限适配)移动手机端rem布局详解(转载非原创)
- Android12之OpenSL ES基础数据结构总结(十)
- 【华人学者风采】谭平 阿里人工智能实验室
- python第六章习题答案
- 【win10的anaconda3搭建theano环境】超详细必成功全套教程
- H5新增video标签的常用属性
- 探讨位操作、算术右移、逻辑右移
- 自学前端设计——【开源骚客】FPGA超详细入门视频教程