概率预测之NGBoost(Natural Gradient Boosting)回归和分位数(Quantile Regression)回归

概率预测之NGBoost(Natural Gradient Boosting)回归和线性分位数回归

  • NGBoost
    • NGBoost超参数解释
    • NGBoost.fit
    • score(X, Y)
    • staged_predict(X)
    • feature_importances_
    • pred_dist 方法来获取概率分布对象
  • 分位数回归(Quantile Regression)
    • smf.quantreg 对多变量数据进行分位数回归分析
    • 概率预测指标
  • 参考

概率预测是一种预测方法,它不仅提供一个具体的预测值(如点预测),还提供预测值的概率分布或置信区间。这种方法能够更好地捕捉预测的不确定性,适用于需要了解预测结果可靠性的场景。

NGBoost

NGBoost(Natural Gradient Boosting)是一个用于提升树的分位数回归和概率预测的强大库。它通过自然梯度提升方法来优化分位数损失函数,从而能够提供更准确的概率预测和分位数回归。

NGBoost超参数解释

  1. n_estimators
    含义:提升树的数量。
    作用:控制模型的复杂度和拟合能力。增加树的数量可以提高模型性能,但也可能导致过拟合。
    默认值:通常为50或100。
  2. learning_rate
    含义:学习率,用于缩放每棵树的贡献。
    作用:降低每棵树的影响以防止过拟合,同时通过更多的树逐步逼近目标。
    默认值:0.1。
  3. minibatch_frac
    含义:每次迭代时使用的样本比例(类似于随机梯度下降中的批量大小)。
    作用:减少计算量并引入随机性,有助于防止过拟合。
    默认值:1.0(使用所有样本)。
  4. col_sample
    含义:每次迭代时使用的特征比例。
    作用:通过减少特征数量引入随机性,防止过拟合。
    默认值:1.0(使用所有特征)。
  5. base
    含义:基础估计器(弱学习器),通常是决策树。
    作用:指定模型的基础结构,默认为DecisionTreeRegressor。
    默认值:max_depth=3 的决策树。
  6. Dist
    含义:目标变量的概率分布类型。
    作用:定义目标变量的分布形式,如正态分布 (Normal)、伯努利分布 (Bernoulli) 等。
    默认值:根据任务自动选择。
  7. Score
    含义:评分函数,用于评估当前模型的拟合效果。
    作用:指导模型优化方向,例如负对数似然 (LogScore) 或偏差方差分解 (CRPScore)。
    默认值:LogScore。
  8. natural_gradient
    含义:是否使用自然梯度下降。
    作用:启用自然梯度下降可以加速收敛并减少训练过程中的振荡。
    默认值:True。
  9. verbose
    含义:控制训练过程中的日志输出。
    作用:调试和监控模型训练过程。
    默认值:True。
  10. random_state
    含义:随机种子,确保结果可复现。
    作用:设置随机数生成器的种子。
    默认值:None。
from xgboost import XGBRegressor# 使用XGBoost作为基学习器
model = NGBRegressor(base=XGBRegressor(max_depth=3, n_estimators=10))from sklearn.linear_model import LinearRegression# 使用线性回归作为基学习器
model = NGBRegressor(base=LinearRegression())from sklearn.svm import SVR# 使用支持向量机作为基学习器
model = NGBRegressor(base=SVR(kernel='rbf'))

NGBoost.fit

  • X
    类型:array-like 或 pandas.DataFrame
    含义:训练数据的特征矩阵,形状为 (n_samples, n_features)。
    作用:模型将基于这些特征进行学习。

  • Y
    类型:array-like
    含义:目标变量(标签),形状为 (n_samples,)。
    作用:模型的目标是拟合这些标签值。

  • X_val=None
    类型:array-like 或 pandas.DataFrame
    含义:验证集的特征矩阵。
    作用:如果提供验证集,则可以在训练过程中监控模型在验证集上的表现。

  • Y_val=None
    类型:array-like
    含义:验证集的目标变量。
    作用:与 X_val 配合使用,用于评估模型的泛化能力。

  • early_stopping_rounds=None
    类型:int
    含义:早停轮数。
    作用:如果在连续 early_stopping_rounds 轮中,验证集上的性能没有提升,则提前停止训练。用于防止过拟合。

  • sample_weight=None
    类型:array-like
    含义:样本权重,形状为 (n_samples,)。
    作用:为每个样本分配不同的权重,影响模型的学习过程。

score(X, Y)

  • 含义:计算模型在给定数据上的评分。
  • 返回值:负对数似然(Negative Log-Likelihood, NLL)或其他指定的评分函数值。

staged_predict(X)

  • 含义:逐步生成预测结果,类似于梯度提升中的逐轮预测。
  • 参数:
    • X:特征矩阵。
    • 返回值:一个生成器,逐步返回每轮迭代后的预测结果。
    • 适用场景:观察模型在不同迭代次数下的表现。
for i, preds in enumerate(model.staged_predict(X_test)):print(f"第 {i+1} 轮预测: {preds[:5]}")

feature_importances_

  • 含义:返回特征的重要性(基于基学习器的贡献)。
  • 返回值:一个数组,表示每个特征的重要性。
  • 注意:仅当基学习器为决策树时有效。

pred_dist 方法来获取概率分布对象

  • mean(): 获取均值。
  • median(): 获取中位数。
  • interval(alpha): 获取指定置信水平的置信区间。
  • pdf(x): 获取概率密度函数(PDF)在 x 处的值。
  • cdf(x): 获取累积分布函数(CDF)在 x 处的值。
  • ppf(q): 获取分位数函数(PPF)在 q 处的值。
import lightgbm as lgb
from sklearn.base import BaseEstimator, RegressorMixin
import numpy as np
from ngboost import NGBRegressor
from ngboost.scores import LogScore
from ngboost.distns import Normal
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_absolute_error# 定义适配器类
class LGBMRegressorAdapter(BaseEstimator, RegressorMixin):def __init__(self, **kwargs):self.lgbm = lgb.LGBMRegressor(**kwargs)def fit(self, X, y):self.lgbm.fit(X, y)return selfdef predict(self, X):return self.lgbm.predict(X)# 生成模拟数据
X, Y = make_regression(n_samples=1000, n_features=10, noise=0.5, random_state=42)
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2, random_state=42)# 初始化 LGBMRegressorAdapter
lgbm_base = LGBMRegressorAdapter(n_estimators=10, max_depth=3, learning_rate=0.1)# 初始化 NGBoost 模型,使用 LGBM 作为基学习器,并使用 LogScore 和 Normal
model = NGBRegressor(base=lgbm_base,Dist=Normal,Score=LogScore,n_estimators=200,learning_rate=0.1,verbose=True
)# 训练模型
model.fit(X_train, Y_train,X_val=X_test, Y_val=Y_test,early_stopping_rounds=10,refit=True
)# 预测
predictions = model.predict(X_test)# 计算 MAE
mae = mean_absolute_error(Y_test, predictions)
print(f"Test MAE: {mae}")# 获取概率分布对象
distributions = model.pred_dist(X_test)# 示例:获取前5个样本的统计信息
for i, dist in enumerate(distributions[:5]):mean_val = dist.mean()median_val = dist.median()lower, upper = dist.interval(0.95)pdf_val = dist.pdf(mean_val)  # PDF at the meancdf_val = dist.cdf(mean_val)  # CDF at the meanppf_val = dist.ppf(0.5)       # PPF at 0.5 (median)print(f"样本 {i+1}:")print(f"  均值: {mean_val}")print(f"  中位数: {median_val}")print(f"  95% 置信区间: [{lower}, {upper}]")print(f"  PDF at mean: {pdf_val}")print(f"  CDF at mean: {cdf_val}")print(f"  PPF at 0.5: {ppf_val}")print()# 以下等价
mean_val = dist.mean()
median_val = dist.median()
ppf_val = dist.ppf(0.5)       # PPF at 0.5 (median)
distributions = model.predict(X_test)

分位数回归(Quantile Regression)

分位数回归(Quantile Regression)是一种统计方法,用于估计目标变量在不同分位数上的条件分布。

smf.quantreg 对多变量数据进行分位数回归分析

smf.quantreg 是 statsmodels 库中的一个模块,用于进行分位数回归(Quantile Regression)。

import pandas as pd
import statsmodels.formula.api as smf# 创建示例数据集
data = {'y': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],'x1': [10, 20, 30, 40, 50, 60, 70, 80, 90, 100],'x2': [15, 25, 35, 45, 55, 65, 75, 85, 95, 105]
}
df = pd.DataFrame(data)# 指定分位数
quantile = 0.5# 定义模型公式
formula = 'y ~ x1 + x2'# 拟合模型
model = smf.quantreg(formula, df)
result = model.fit(q=quantile)# 查看回归结果
print(result.summary())

概率预测指标

# PICP: predicition interval coverage probability
# WS: winkler score
def evaluate_PICP_WS(y_pred_upper, y_pred_lower, y_test, confidence):# Reshape to 2D array for standardizationy_pred_upper = np.reshape(y_pred_upper, (len(y_pred_upper), 1))y_pred_lower = np.reshape(y_pred_lower, (len(y_pred_lower), 1))y_pred_upper = sc_load.inverse_transform(y_pred_upper)y_pred_lower = sc_load.inverse_transform(y_pred_lower)y_test = sc_load.inverse_transform(y_test)# Ravel for ease of computationy_pred_upper = y_pred_upper.ravel()y_pred_lower = y_pred_lower.ravel()y_test = y_test.ravel()# Find out of bound indices for WSidx_oobl = np.where((y_test < y_pred_lower) > 0)idx_oobu = np.where((y_test > y_pred_upper) > 0)PICP = np.sum((y_test > y_pred_lower) & (y_test <= y_pred_upper)) / len(y_test) * 100WS = np.sum(np.sum(y_pred_upper - y_pred_lower) + np.sum(2 * (y_pred_lower[idx_oobl[0]] - y_test[idx_oobl[0]]) / confidence) +np.sum(2 * (y_test[idx_oobu[0]] - y_pred_upper[idx_oobu[0]]) / confidence)) / len(y_test)print ("PICP of testing set: {:.2f}%".format(PICP))print ("WS of testing set: {:.2f}".format(WS))return PICP, WS

参考

1.https://github.com/statsmodels/statsmodels
2.新能源电力系统概率预测:基本概念与数学原理_万灿.pdf
3.新能源电力系统概率预测理论与方法=Theory and Methodology of Probabilistic Forecasting for Renewable Power Systems_万灿,宋永华.pdf
4.https://github.com/stanfordmlgroup/ngboost

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

注意力机制,本质上是在做什么?

本文以自注意机制为例&#xff0c;输入一个4*4的矩阵 如下&#xff1a; input_datatorch.tensor([[1,2,3,4], [5,6,7,8], [9,10,11,12], [13,14,15,16] ],dtypetorch.float) 得到Q和K的转置如下。 此时&#xff0c;计算QK^T ,得到如下结果 第一行第一个位置就是第一条样本和第…

C语言-数组指针和指针数组

指针 数组指针与指针数组 数组指针 定义 概念&#xff1a;数组指针是指向数组的指针&#xff0c;本质上还是指针 特点&#xff1a; ①先有数组&#xff0c;后有指针 ②它指向的是一个完整的数组 一维数组指针 语法&#xff1a; 数据类型 (*指针变量名)[容量]; 案例&a…

【前四届会议均已完成独立出版及EI检索 | 河南大学、河南省科学院主办,多高校单位承协办】第五届信号图像处理与通信国际学术会议(ICSIPC 2025)

第五届信号图像处理与通信国际学术会议&#xff08;ICSIPC 2025&#xff09; 2025 5th International Conference on Signal Image Processing and Communication&#xff08;ICSIPC 2025&#xff09; 会议官网&#xff1a;http://www.icsipc.org 【论文投稿】 会议时间&…

AI 时代的通信新范式:MCP(模块化通信协议)的优势与应用

文章目录 引言 1. 传统 API 的局限性2. MCP&#xff08;模块化通信协议&#xff09;的核心优势2.1 更好的模块化支持2.2 低耦合性与灵活性2.3 高性能数据传输2.4 适配分布式 AI 计算架构 3. AI 时代的 MCP 应用案例4. 结论&#xff1a;AI 时代的通信新范式 引言 在 AI 驱动的现…

Linux 文件系统的日志模式与性能影响

在 Linux 文件系统中&#xff0c;**日志模式&#xff08;Journaling Mode&#xff09;** 是文件系统保证数据一致性和快速恢复的核心机制&#xff0c;但不同的日志模式会对性能产生显著影响。以下是详细分析及优化建议&#xff1a; --- ### **一、日志模式的核心分类** Linux…

TISAX认证注意事项的详细介绍

TISAX&#xff08;Trusted Information Security Assessment Exchange&#xff09;认证的注意事项犹如企业在信息安全领域航行时必须遵循的灯塔指引&#xff0c;至关重要且不容忽视。以下是对TISAX认证注意事项的详尽阐述&#xff1a; 首先&#xff0c;企业需深入研读并理解TI…

Nodejs 项目打包部署方式

方式一&#xff1a;PM2 一、准备工作 确保服务器上已安装 Node.js 环境建议使用 PM2 进行进程管理&#xff08;需要额外安装&#xff09; 二、部署步骤 1.首先在服务器上安装 PM2&#xff08;推荐&#xff09;&#xff1a; npm install -g pm22.将项目代码上传到服务器&…

springboot整合modbus实现通讯

springboot整合modbus4j实现tcp通讯 前言 本文基于springboot和modbus4j进行简单封装&#xff0c;达到开箱即用的目的&#xff0c;目前本方案仅实现了tcp通讯。代码会放在最后&#xff0c;按照使用方法操作后就可以直接使用 介绍 在使用本方案之前&#xff0c;有必要对modb…

【论文阅读】Contrastive Clustering Learning for Multi-Behavior Recommendation

论文地址&#xff1a;Contrastive Clustering Learning for Multi-Behavior Recommendation | ACM Transactions on Information Systems 摘要 近年来&#xff0c;多行为推荐模型取得了显著成功。然而&#xff0c;许多模型未充分考虑不同行为之间的共性与差异性&#xff0c;以…

C/C++蓝桥杯算法真题打卡(Day6)

一、P8615 [蓝桥杯 2014 国 C] 拼接平方数 - 洛谷 方法一&#xff1a;算法代码&#xff08;字符串分割法&#xff09; #include<bits/stdc.h> // 包含标准库中的所有头文件&#xff0c;方便编程 using namespace std; // 使用标准命名空间&#xff0c;避免每次调用…

纯vue手写流程组件

前言 网上有很多的vue的流程组件&#xff0c;但是本人不喜欢很多冗余的代码&#xff0c;喜欢动手敲代码&#xff1b;刚开始写的时候&#xff0c;确实没法下笔&#xff0c;最后一层一层剥离&#xff0c;总算实现了&#xff1b;大家可以参考我写的代码&#xff0c;可以拿过去定制…

[特殊字符][特殊字符][特殊字符][特殊字符][特殊字符][特殊字符]壁紙 流光染墨,碎影入梦

#Cosplay #&#x1f9da;‍♀️Bangni邦尼&#x1f430;. #&#x1f4f7; 穹妹 Set.01 #后期圈小程序 琼枝低垂&#xff0c;霜花浸透夜色&#xff0c;风起时&#xff0c;微光轻拂檐角&#xff0c;洒落一地星辉。远山隐于烟岚&#xff0c;唯余一抹青黛&#xff0c;勾勒出天光水…

kafka压缩

最近有幸公司参与kafka消息压缩&#xff0c;背景是日志消息量比较大。kafka版本2.4.1 一、确认压缩算法 根据场景不同选择不同。如果是带宽敏感患者推荐高压缩比的zstd&#xff0c;如果是cpu敏感患者推荐lz4 lz4和zstd底层都使用的是lz77算法&#xff0c;具体实现逻辑不同&am…

Java EE(14)——网络原理——UDPTCP数据报的结构

前言 本文主要介绍传输层的两个知名协议——UDP&TCP&#xff08;想了解其他层协议请移步Java EE(12)——初始网络&#xff09; 一.传输层的作用 传输层主要实现端对端的数据传输&#xff0c;在传输层的数据报中会包含源端口/目的端口的信息。端口的作用就是标识主机中的…

ccfcsp2701如此编码

//如此编码 #include<iostream> using namespace std; int main(){int n,m;cin>>n>>m;int a[21],b[21],c[21];for(int i1;i<n;i){cin>>a[i];}c[0]1;for(int i1;i<n;i){c[i]c[i-1]*a[i];}b[1](m%c[1])/c[0];int s1,s20;for(int i2;i<n;i){s2s2…

麒麟操作系统安装人大金仓数据库

如果你想拥有你从未拥有过的东西&#xff0c;那么你必须去做你从未做过的事情 在当前数字化转型和信息安全备受重视的背景下&#xff0c;众多公司积极推进国产化改造进程。在操作系统领域&#xff0c;统信、open 欧拉、中标麒麟、银河麒麟等国产操作系统崭露头角&#xff0c;逐…

【工具变量】全国地级市地方ZF债务数据集(2014-2023年)

地方ZF债务是地方财政运作的重要组成部分&#xff0c;主要用于基础设施建设、公共服务及经济发展&#xff0c;是衡量地方财政健康状况的重要指标。近年来&#xff0c;我国地级市的地方ZF债务规模不断变化&#xff0c;涉及一般债务和专项债务等多个方面&#xff0c;对金融市场、…

vlan实验

一、实验拓扑及要求&#xff1a; 二、实验步骤-思路&#xff1a; 实验需求解读&#xff1a; 首先PC1和PC3所在接口为access接口&#xff0c;属于VLAN 2&#xff0c;那么首先需求在SW1和SW2创建VLAN2&#xff0c;并且配置对应连接PC的接口链路类型为Access并放通VLAN 2PC2/4/5…

[samba配置]宿主机访问虚拟机目录

[samba配置]宿主机访问虚拟机目录 1、安装和启动Samba服务 sudo apt update sudo apt install samba2、查看samba服务是否正在运行 sudo systemctl status smbd sudo systemctl status nmbd3、配置samba服务设置为开机启动。 sudo systemctl enable smbd nmbd4、创建一个共…

PDF文件转Markdown,基于开源项目marker

​ 首先我们来问下deepseek 为啥要选marker呢 基于深度学习&#xff0c;一看就逼格拉满。搞科研必备&#xff0c;效果应该不会太差。跟其他的阿猫阿狗工具没法比。 看下官网 https://github.com/VikParuchuri/marker ​ 一看头像是个印度佬&#xff0c;自吹——又快又好。…