7集成学习评分卡

news2024/9/24 9:23:17

集成学习评分卡

学习目标

  • 知道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

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

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

相关文章

基于死区补偿的永磁同步电动机矢量控制系统simulink仿真模型

整理了基于死区补偿的永磁同步电动机矢量控制系统simulink仿真&#xff0c;该模型使用线性死区补偿的PMSM矢量控制算法进行仿真&#xff0c;使用Foc电流双闭环 。 1.模块划分清晰&#xff0c;补偿前后仿真有对比&#xff0c;易于学习; 2.死区补偿算法的线性区区域可调; 3.自…

【计算机网络】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…

【考研数学】跟「武忠祥」真不如「张宇」吗??

现在是张宇老师强势版本&#xff01; 24年之前&#xff0c;你说跟武忠祥老师好&#xff0c;我非常赞成&#xff0c;但是24年很多同学考完出来都说&#xff0c;早知道跟张宇了&#xff0c;都说24年考研数学偏&#xff0c;怪&#xff0c;难&#xff0c;计算量还大。 武忠祥老师…

刷题之字母异位词(leetcode 哈希表)

https://leetcode.cn/problems/group-anagrams/ class Solution { public:vector<vector<string>> groupAnagrams(vector<string>& strs) {unordered_map<string,vector<string>>map;//哈希表键为排序后或者处理后的字符串&#xff0c;值为某…

Web课外练习7

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>照片墙</title><style>body {display: …

P9748 [CSP-J 2023] 小苹果:做题笔记

目录 P9748 [CSP-J 2023] 小苹果 思路 代码 P9748 [CSP-J 2023] 小苹果 P9748 [CSP-J 2023] 小苹果 思路 先写几个看看规律 题意我们能看出来是三个三个一组的&#xff0c;然后每次取走的都是三个里面的第一个。我们应该很容易想到如果一轮的总数是三的倍数的话&#xff0…

Linux查看进程命令ps和top

Linux 是一种自由和开放源代码的操作系统&#xff0c;它的使用在全球范围内非常广泛。在 Linux 中&#xff0c;进程是操作系统中最重要的组成部分之一&#xff0c;它代表了正在运行的程序。了解如何查看正在运行的进程是非常重要的&#xff0c;因为它可以帮助你了解系统的运行状…

langchain_community FAISS保存与加载faiss index

参考: https://github.com/langchain-ai/langchain/issues/18285 https://api.python.langchain.com/en/latest/vectorstores/langchain_community.vectorstores.faiss.FAISS.html#langchain_community.vectorstores.faiss.FAISS 1、保存save_local import pandas as pd ##…

抓住无人直播带货风口,开启创业新机遇

无人直播带货&#xff0c;这一近年来在互联网浪潮中崭露头角的创业模式&#xff0c;正以其独特的魅力和优势&#xff0c;吸引着越来越多的创业者投身其中。在这个数字化、智能化的时代&#xff0c;无人直播带货 keJ0277 不仅降低了创业的门槛&#xff0c;还为创业者提供了全新的…

淘宝扭蛋机小程序:开启虚拟世界的惊喜之旅

随着科技的飞速发展&#xff0c;微信小程序已经成为了我们日常生活中不可或缺的一部分。淘宝扭蛋机小程序&#xff0c;作为这一潮流中的一颗璀璨新星&#xff0c;凭借其独特的创意和便捷的购物体验&#xff0c;迅速在电商领域崭露头角。 淘宝扭蛋机小程序的核心魅力在于其结合…

Cannot read properties of undefined (reading ‘init‘)报错

出现这个报错是印象项目没有引echarts包 npm i echarts 下包 然后在main.js中引入 import echarts from echarts Vue.prototype.$echarts echarts 如果还不行 import * as echarts from echarts; 更改一下引入方式 ok了

【Redis】数据类型

Redis数据类型&#xff08;5 3 1&#xff09; 五种基本数据类型 String字符串 特点 二进制安全&#xff0c;可以包含任何数据&#xff0c;如数字&#xff0c;字符串&#xff0c;jpg图片或者序列化的对象 应用场景 缓存&#xff1a; redis作为缓存层&#xff0c;mysql做持…

Nginx配置文件conf解释

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 Nginx(“engine x”…

全域运营平台是什么?优缺点有哪些?

当下&#xff0c;全域运营赛道逐渐兴盛&#xff0c;全域运营服务商的数量也开始呈现爆发趋势。在此背景下&#xff0c;很多人都对某些品牌的全域运营平台优缺点产生了浓厚的兴趣。由于小编只使用过微火全域运营平台&#xff0c;因此&#xff0c;本期会着重分析微火运营平台的优…

白鹿以前的短视频:四川京之华锦信息技术公司

白鹿以前的短视频&#xff1a;时光剪影中的创意火花与成长轨迹 在短视频风起云涌的互联网时代&#xff0c;每一位创作者的早期作品都如同时间胶囊&#xff0c;封存着最初的创意与梦想。提及“白鹿”这一名字&#xff0c;不少人心中会立刻浮现出那个凭借独特风格和不懈努力&…

OpenAI新模型GPT-4o“炸裂登场” 响应速度堪比真人 关键还免费!

GPT-4o模型基于来自互联网的大量数据进行训练&#xff0c;更擅长处理文本和音频&#xff0c;并且支持50种语言。更值得一提的是&#xff0c;GPT-4o最快可以在232毫秒的时间内响应音频输入&#xff0c;几乎达到了人类的响应水平。 GPT-4o有多“炸裂”&#xff1f;核心能力有三 G…

【制作100个unity游戏之26】unity2d横版卷轴动作类游戏4(附带项目源码)

最终效果 系列导航 文章目录 最终效果系列导航前言添加敌人受击动画第一种 配置闪烁动画第二种 受伤击退效果人物死亡源码完结 前言 欢迎来到【制作100个Unity游戏】系列&#xff01;本系列将引导您一步步学习如何使用Unity开发各种类型的游戏。在这第26篇中&#xff0c;我们将…

多元化、高辨识显示丨基于G32A1445的汽车尾灯解决方案

由刹车灯、倒车灯、转向灯、雾灯等组成的汽车尾灯&#xff0c;既能在光线低暗时发出照明信息&#xff0c;也可向周围环境传递车辆的行驶状态与意图信号&#xff0c;对于行车安全起着至关重要的作用。与传统尾灯相比&#xff0c;贯穿式汽车尾灯更加醒目、美观、安全&#xff0c;…

2024年将改变人类生活的七大技术

有没有想过未来会是什么样子&#xff1f;那么&#xff0c;不必等太久&#xff0c;因为2024年将会是充满惊人创新的一年&#xff0c;让你大开眼界。以下是七大新兴的科技创新趋势&#xff0c;它们无疑将在2024年改变我们的生活。 1. 人工智能技术 从智能手机、智能扬声器等日…

HI-TOP网关HT3S-DPM-ECS实现PROFIBUS DP大功率变频器与青岛港口汇川EtherCAT主站PLC通讯互联的案例研究

一、引言 随着工业自动化技术的不断发展&#xff0c;青岛港口寻求提升其物流自动化系统&#xff0c;以提高效率和可靠性&#xff0c;不同品牌和协议的工业设备之间的通讯互联成为了技术实现的重要挑战。在青岛港口&#xff0c;作为该系统核心的变频器和PLC之间需要无缝通讯&…