7集成学习评分卡

集成学习评分卡

学习目标

  • 知道LightGBM基本原理
  • 掌握使用lightGBM进行特征筛选的方法

1 Gradient Boosting算法回顾

Gradient Boosting 基本原理

  • 训练一个模型m1,产生错误e1
  • 针对e1训练一个模型m2,产生错误e2
  • 针对e2训练第三个模型m3,产生错误e3 …
  • 最终预测结果是:m1+m2+m3+…

GBDT是boosting的一种方法,主要思想:

每一次建立单个分类器时,是在之前建立的模型的损失函数的梯度下降方向。

损失函数越大,说明模型越容易出错,如果我们的模型能让损失函数持续的下降,则说明我们的模型在持续不断的改进,而最好的方式就是让损失函数在其梯度的方向上下降。

GBDT的核心在于每一棵树学的是之前所有树结论和的残差

  • 残差就是真实值与预测值的差值

Shrinkage(缩减)是 GBDT 的一个重要演进分支

  • Shrinkage的思想在于每次走一小步来逼近真实的结果,比直接迈大步的方式好
  • Shrinkage可以有效减少过拟合的风险。它认为每棵树只学到了一小部分,累加的时候只累加这一小部分,通过多学习几棵树来弥补不足

GBDT可以用于回归问题(线性和非线性),也可用于分类问题
在这里插入图片描述

GBDT和随机森林的异同点

相同点:

  • 都是由多棵树构成,最终的结果也是由多棵树决定。

不同点:

  • 随机森林可以由分类树和回归树组成,GBDT只能由回归树组成。
  • 随机森林的树可以并行生成,而GBDT只能串行生成,所以随机森林的训练速度相对较快。
  • 随机森林关注减小模型的方差,GBDT关注减小模型的偏差

在这里插入图片描述
在这里插入图片描述

  • 随机森林对异常值不敏感,GBDT对异常值较为敏感。
  • 随机森林最终的结果是多数投票或简单平均,而GBDT是加权累计起来。

GBDT的优缺点

优点:

  • GBDT每一次的残差计算都增大了分错样本的权重,而分对的权重都趋近于0,因此泛化性能比较好。
  • 可以灵活的处理各种类型的数据。
  • 预测精度高

缺点:

  • 对异常值比较敏感。
  • 由于分类器之间存在依赖关系,所以很难进行并行计算。

XGBoost与GDBT的区别

区别一:

  • XGBoost生成CART树考虑了树的复杂度,
  • GDBT未考虑,GDBT在树的剪枝步骤中考虑了树的复杂度。

区别二:

  • XGBoost是拟合上一轮损失函数的二阶导展开,GDBT是拟合上一轮损失函数的一阶导展开
  • XGBoost的准确性更高,且满足相同的训练效果,需要的迭代次数更少。

区别三:

  • XGBoost与GDBT都是逐次迭代来提高模型性能,但是XGBoost在选取最佳切分点时可以开启多线程进行,大大提高了运行速度。

2 LightGBM

1 Histogram-based Gradient Boosting

为了理解Histogram-based Gradient Boosting的原理, 我们回顾一下回归决策树的构建过程。在回归树生长的过程中, 我们需要遍历每一个特征, 如果是连续型特征:

  • 需要将每个特征的值排序
  • 遍历所有的特征取值,尝试所有的可能分裂方式, 并计算每种分裂方式的误差
  • 找到误差最小的一个,得到当前节点的分裂方式

上述过程的计算量明显会随着样本数量以及特征维度的增加而成倍增长。假设我们有100万样本,100个数值类特征我们最多需要尝试 100万 X 100 =1亿次计算才能得到一个节点如何划分, 显然这种树的分裂方式在数据量很大的时候会导致训练速度缓慢

如何能加速训练的过程?一种改进方案是将特征值进行分箱处理,依然假设有100万样本,100个数值类特征。此时将每个特征列分箱为 100 箱。 现在,要找到最佳分割点,我们只需要进行100 X 100次计算就可以找到最佳分割点,对比之前的方案, 计算量最多减少了 10000倍

看下面的例子

import matplotlib.pyplot as plt
import matplotlib.patches as patches  # 形状:指的是 matplotlib.patches 包里面的一些对象,比如我们常见的箭头,正方形,椭圆等等,也称之为“块”。
n_samples = 50
n_bins = 5
X = np.random.uniform(low=-6.0, high=6.0, size=(n_samples, ))
X = np.sort(X)
y = 1 / (1 + np.exp(-X))

# 绘制数据
fig, ax = plt.subplots(nrows=1, ncols=3, figsize=(13, 4))
ax[0].scatter(X, y, s=10)
ax[0].set_title('1d regression problem with {0} points'.format(n_samples))
ax[0].set_xlabel('X')
ax[0].set_ylabel('y')

# 绘制标准的分割方式
ax[1].scatter(X, y, s=10)
for i in range(n_samples - 1):
    split = (X[i] + X[i-1]) / 2
    ax[1].plot([split, split], [0.0, 1.0], c='r', linewidth=1) # c 颜色  linewidth 线宽
ax[1].set_title('Standard: {0} splits to consider'.format(n_samples - 1))
ax[1].set_xlabel('X')
ax[1].set_ylabel('y')

# 找到最佳分割点
best = (-np.inf, np.inf)
for i in range(n_samples - 1):
    split = (X[i] + X[i-1]) / 2
    loss = np.mean((y[X <= split] - np.mean(y[X <= split]))**2) + np.mean((y[X > split] - np.mean(y[X > split]))**2)
    if loss <= best[1]:
        best = (split, loss)
print(best)
ax[1].plot([best[0], best[0]], [0., 1.], linewidth=3, linestyle='--', c='k')


ax[2].scatter(X, y, s=10)
splits = [X[0],X[10],X[20],X[30],X[40],X[49]]
for split in splits:
    ax[2].plot([split, split], [0.0, 1.0], c='r', linewidth=1)
bin_colors = ['#8000ff', '#1996f3', '#4df3ce', '#b2f396', '#ff964f', '#ff0000']
for i in range(n_bins):
    ax[2].add_patch(patches.Rectangle((splits[i], 0.0), splits[i+1] - splits[i], 1.0, color=bin_colors[i], alpha=0.2))
ax[2].set_title('Histogram with {0} bins: {0} splits to consider'.format(n_bins))
ax[2].set_xlabel('X')
ax[2].set_ylabel('counts')

# 找到分箱之后的最佳分割点
best = (-np.inf, np.inf)
splits = [X[0],X[10],X[20],X[30],X[40],X[49]]
for split in splits:
    loss = np.mean((y[X <= split] - np.mean(y[X <= split]))**2) + np.mean((y[X > split] - np.mean(y[X > split]))**2)
    if loss <= best[1]:
        best = (split, loss)
print(best)
ax[2].plot([best[0], best[0]], [0., 1.], linewidth=3, linestyle='--', c='k')

(0.1834031699694303, 0.044419292201901245) (0.38106574907332114, 0.045130335725236406)

在这里插入图片描述

上面的图中, 我们对比了标准回归树分裂方式,和基于直方图的回归树的分裂方式。 在标准的回归树分裂方式中,我们尝试了49种不同的分裂方式,得到了最佳分裂点, 而基于直方图的回归树,我们只尝试了4次就找到了最佳分裂方式。如果数据规模进一步扩大, 采用直方图的回归树,训练的速度会更快!

Histogram-based Gradient Boosting 的Sklearn实现

from sklearn.experimental import enable_hist_gradient_boosting #属于实验版本
from sklearn.ensemble import HistGradientBoostingClassifier
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
X,y = load_breast_cancer(return_X_y = True)
X_train ,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2,random_state=45)
histGBC = HistGradientBoostingClassifier(max_depth=2,max_iter=20,learning_rate=0.75)
histGBC.fit(X_train,y_train)
histGBC.score(X_test,y_test)

0.9824561403508771

SKlearn中 HistGradientBoosting 的思想实际上受到了lightGBM启发,相当于是lightGBM的sklearn版本

2 lightGBM原理

lightGBM(Light Gradient Boosted Machines)是2017年1月,微软在GItHub上开源的一个新的梯度提升框架。LightGBM 的核心原理是基于直方图的梯度提升方法,它具有以下优势:

  • 算法加速,例如基于梯度的单边采样和对互斥特征的合并处理,使lightGBM的训练速度更快和占用内存更低
  • 支持大量用于分类、回归和排名的损失函数,支持自定义损失函数
  • 支持并行和 GPU 学习,使其能够处理大规模数据集

LightGBM除了在建树的过程中, 除了采用分箱的方式来处理特征值,还采用了

  • Gradient-based One Side Sampling (GOSS) 减少参与模型训练的样本数量
  • Exclusive

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何去除AI写作痕迹?笔灵去AI痕迹,提升论文质量

AI助手大集合&#xff0c;猛戳进来&#xff01; 在工作和生活中&#xff0c;我经常使用各种各样的人工智能工具&#xff0c;如AI写作软件、AI语音助手、AI绘图工具等。我发现&#xff0c;这些工具能够极大地提高工作效率并简化日常生活。作为一名AI工具的忠实爱好者&#xff0…

TortoiseGit的安装

TortoiseSvn和TortoiseGit都是针对代码进行版本管理的工具&#xff0c;又俗称小乌龟&#xff0c;简洁而可视化的操作界面&#xff0c;免去繁琐的命令行输入。只需要记住常用的几个操作步骤就能快速上手。 TortoiseGit安装 1、TortoiseGit作为git的版本管理工具 &#xff0c;但…

粘贴图片上传,显示剪切板中的图片

<van-cell-group inset><van-fieldpaste.native"(e) > handlePasting(e, index)"autosizeplaceholder"请将图片粘贴到此处"/> </van-cell-group> <div class"img-list"><divclass"img-item"v-for"…

在 Cython 中高效访问 scipy lil_matrix

在 Cython 中高效地访问 scipy 的 lil_matrix&#xff08;LInked List format&#xff09;可以通过以下步骤实现&#xff1a; 导入所需的模块&#xff1a; 首先&#xff0c;导入必要的模块&#xff0c;包括 numpy 和 scipy.sparse 中的 lil_matrix。定义函数原型&#xff1a; …

设备全生命周期管理平台:奏响设备管理的“高效乐章”

设备的全生命周期管理是一个复杂而关键的任务。设备的购买、安装、维护和报废都需要精细的管理和跟踪。然而&#xff0c;传统的设备管理方法往往效率低下、信息不准确&#xff0c;并且容易出现遗漏和错误。为解决这一问题&#xff0c;设备全生命周期管理平台应运而生。 设备全…

【Linux系统编程】基本指令(二)

目录 1、mv指令 2、cat指令 输出重定向 ​编辑 追加重定向 输入重定向 3、more指令 4、less指令 5、head指令 6、tail指令 与时间相关的指令 7、date指令 8、cal指令 9、find指令 10、grep指令 11、zip/unzip指令 1、mv指令 mv文件是用来对文件或目录进行重命名…

《新生向》什么是Python环境?

观前提醒&#xff1a;本文详细介绍了Python环境的结构&#xff0c;介绍了python虚拟环境基础用法&#xff0c;以及python中的环境&依赖管理 0.什么是Python环境 Python环境是指一个特定的设置&#xff0c;其中包含了运行Python代码所需的一系列软件工具和包。这个环境可以…

特斯拉FSD的硬件演进与模型压缩技术解析

引言 随着自动驾驶技术的迅速发展&#xff0c;特斯拉的全自动驾驶&#xff08;FSD&#xff09;系统也在不断进化。最近&#xff0c;特斯拉开始采用端到端的模型来优化其FSD算法&#xff0c;这种变革引发了广泛关注。本文将探讨特斯拉FSD在车载计算能力和模型压缩技术方面的最新…

基于EBAZ4205矿板的图像处理:12二值化图像的膨胀与腐蚀

基于EBAZ4205矿板的图像处理&#xff1a;12二值化图像的膨胀与腐蚀 先看效果 注意&#xff1a;我的项目中的膨胀和腐蚀是对二值化图像中的像素值为255的像素进行处理&#xff0c;而我的图像中255为白色&#xff0c;0为黑色&#xff0c;所以是对颜色为白色的像素点进行的膨胀和…

Axure “情形”的使用

这篇笔记的主要内容是如果在Axure中使用“情形”&#xff0c;对应在我们的研发中就是“判断条件”的使用 Axure情形的使用Axure添加caseAxure的if &#xff0c;sele if 条件判断 条件判断不管是在研发代码中还是实际生活中&#xff0c;无处不在&#xff0c;只是表现形式不同罢…

Python专题:十五、JSON数据格式

Python的数据处理&#xff1a;JOSN 计算机的主要工作&#xff1a;处理数据 最容易处理的数据就是结构化数据 非结构化数据&#xff1a;视频&#xff0c;文件等 近些年的大数据、数据挖掘就是对互联网中的各种非结构化的数据的分析和处理 半结构化数据 明确的结构属性&…

查询中Split函数不管用?试试这个自定义函数!

hi&#xff0c;大家好&#xff01; 我们在实际的应用中会有这样的一些情况&#xff0c;获取的一些数据是由一些特殊字符连接起来的&#xff0c;比如&#xff1a;XXX汽车\SUV\EV\纯电。类似这样的数据&#xff0c;我们在应用过程中&#xff0c;需要将数据拆开&#xff0c;如果用…

16-僵尸进程和托孤进程

进程的正常退出步骤&#xff1a; 子进程调用exit()函数退出父进程调用wait()函数为子进程处理其他事情 若进程没有按正常退出步骤&#xff0c;则有可能变为僵尸进程或者托孤进程 僵尸进程 子进程退出后&#xff0c;父进程没有调用wait()函数处理身后事&#xff0c;子进程变…

Web3 ETF软件开发技术

Web3 ETF&#xff08;交易所交易基金&#xff09;是一种基于区块链技术的ETF&#xff0c;它旨在跟踪Web3资产&#xff08;例如加密货币、NFT等&#xff09;的价值表现。Web3 ETF的开发涉及到传统ETF开发的所有技术难点&#xff0c;此外还有一些独特的挑战。北京木奇移动技术有限…

短剧私域-快速引流变现

短剧的爆火&#xff0c;衍生出了很多周边项目。 比如免费看剧App&#xff0c;短剧搜索机器人&#xff0c;短剧付费圈子等等。 这些项目的本质&#xff0c;就是借助短剧的热度&#xff0c;把流量引到自己的鱼塘进行变现。 短剧机器人大家都知道&#xff0c;目前最火的一种玩法…

【计算机网络】HTTP协议详解实战抓包分析教程

文章目录 1.HTTP简介2.HTTP报文的结构3.HTTP协议中空行的作用4.uri和url的区别5.HTTP请求5.1 HTTP请求方法5.2 HTTP请求报头 6.HTTP响应6.1 状态码 7.HTTP位于应用层(基于TCP)8.非持久和持久连接8.1 非持久连接8.2 持久连接 1.HTTP简介 HTTP&#xff08;Hypertext Transfer Pr…

高效前端工程化:Monorepo、pnpm与Vue3集成实战指南

引言 在当今快速发展的前端开发领域&#xff0c;高效地管理和组织代码库成为提升开发效率的关键。随着项目规模的扩大&#xff0c;传统的单体仓库逐渐显露出局限性&#xff0c;而新兴的包管理工具如 PNPM、项目结构模式如 Monorepo 和 Turborepo 开始受到广泛关注。将教会大家…

批量下载huggingface的仓库全部权重文件

下载huggingface的仓库全部权重文件 配置和下载git-lfs **ubuntu:**sudo apt-get install git-lfs 其他&#xff1a; 下载git-lfs Releases git-lfs/git-lfs (github.com) 配置&#xff1a; export PATH$PATH://home/software/lfs/git-lfs-3.5.1/ # 其中目录为你文件夹的目…

功能安全如何在公司顺利开展?-亚远景科技

亚远景功能安全主题线上会议报名开启&#xff01; 随着汽车技术的不断发展&#xff0c;汽车系统的复杂性和交互性大幅增加&#xff0c;功能安全成为确保驾驶员、乘客及行人安全的关键。 本场功能安全线上会议&#xff0c;亚远景为汽车行业的相关人员准备了以下内容&#xff1a…

多维 HighChart

showHighChart.html <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><!-- js脚本都是官方的,后两个是highchart脚本 --><script type"text/javascript" src"jquery1.7.1.min.js"&g…