半参数模型

4. 半参数模型 (Semi-parametric Model)

半参数模型结合了参数化和非参数化的方法。可以在整体上采用线性回归,但在局部允许非线性变化。这样做的目的是在保持模型的线性解释性的同时,捕捉细微的弧度趋势。

例如,可以定义:
y = β 0 + β 1 x + g ( x ) + ϵ y = \beta_0 + \beta_1 x + g(x) + \epsilon y=β0+β1x+g(x)+ϵ
其中 g ( x ) g(x) g(x) 是一个非参数化函数,例如平滑样条,可以捕捉数据的局部弧度。

  • 优点:与 GAM 类似,保持模型解释性的同时捕捉非线性。
  • 缺点:需要选择合适的非参数函数形式,可能较复杂。

半参数模型结合了线性成分和非线性成分,既可以捕捉数据中的线性趋势,也可以处理局部的非线性变化。在 Python 中,我们可以使用 statsmodels 中的 GLM(广义线性模型)和样条函数来实现半参数模型。这种方法既保持了全局的线性趋势,又允许局部的平滑变化。

以下是一个半参数模型的 Python 示例。代码会生成数据、拟合半参数模型,并绘制数据散点、回归线以及置信区间。

代码示例

import numpy as np
import matplotlib.pyplot as plt
import statsmodels.api as sm
from statsmodels.gam.api import GLMGam, BSplines
from patsy import dmatrix# 生成带有线性和非线性成分的样本数据
np.random.seed(42)
x = np.linspace(0, 10, 100)
y = 1.5 * x + 0.5 * np.sin(x * 1.5) + np.random.normal(0, 0.5, size=x.shape)# 重新调整形状以适应 statsmodels 的输入格式
X = sm.add_constant(x)  # 添加常数项
X_spline = dmatrix("bs(x, df=5, degree=3)", {"x": x}, return_type='dataframe')  # 样条基函数# 使用 statsmodels 构建半参数模型
model = GLMGam(y, exog=X, smoother=BSplines(x[:, None], df=[5], degree=[3]))
result = model.fit()# 预测和计算置信区间
x_pred = np.linspace(0, 10, 100)
X_pred = sm.add_constant(x_pred)
X_spline_pred = dmatrix("bs(x_pred, df=5, degree=3)", {"x_pred": x_pred}, return_type='dataframe')
y_pred = result.predict(exog=X_pred, exog_smooth=X_spline_pred)# 使用 Bootstrap 计算置信区间
n_bootstraps = 200
y_pred_bootstrap = []for _ in range(n_bootstraps):# 随机采样并拟合模型sample_indices = np.random.choice(len(x), len(x), replace=True)X_sample = X[sample_indices]X_spline_sample = X_spline.iloc[sample_indices]y_sample = y[sample_indices]model_sample = GLMGam(y_sample, exog=X_sample, smoother=BSplines(x[sample_indices][:, None], df=[5], degree=[3]))result_sample = model_sample.fit()y_pred_sample = result_sample.predict(exog=X_pred, exog_smooth=X_spline_pred)y_pred_bootstrap.append(y_pred_sample)# 将预测结果转换为数组
y_pred_bootstrap = np.array(y_pred_bootstrap)# 计算置信区间
lower_bound = np.percentile(y_pred_bootstrap, 2.5, axis=0)
upper_bound = np.percentile(y_pred_bootstrap, 97.5, axis=0)# 绘制散点图、回归曲线和置信区间
plt.figure(figsize=(10, 6))
plt.scatter(x, y, color='gray', label='Data Points')
plt.plot(x_pred, y_pred, color='blue', label='Semi-parametric Model')
plt.fill_between(x_pred, lower_bound, upper_bound, color='lightblue', alpha=0.5, label='95% Confidence Interval')
plt.xlabel('x')
plt.ylabel('y')
plt.title('Semi-parametric Model with 95% Confidence Interval')
plt.legend()
plt.show()

代码说明

  1. 数据生成:创建含有线性趋势和轻微非线性成分的数据,公式为 y = 1.5 x + 0.5 sin ⁡ ( 1.5 x ) + noise y = 1.5x + 0.5\sin(1.5x) + \text{noise} y=1.5x+0.5sin(1.5x)+noise
  2. 构建半参数模型
    • 线性部分:使用 statsmodelsGLMGam 构建一个广义加性模型(GAM),其中 exog 包含线性成分 X X X
    • 非线性部分:通过样条基函数(B样条)BSplines 添加非线性成分,使模型能够捕捉局部的非线性变化。
  3. 模型拟合与预测:使用拟合后的模型对生成的数据进行预测,并获取预测结果。
  4. 置信区间计算:使用 Bootstrap 方法生成 200 组不同的样本集,拟合并预测得到的回归曲线,并计算 2.5% 和 97.5% 百分位数,作为 95% 的置信区间。
  5. 绘图:绘制数据散点、回归曲线和置信区间。

输出图形

在这里插入图片描述

运行代码后生成以下内容:

  • 灰色散点图:显示原始数据点。
  • 蓝色回归曲线:显示半参数模型拟合的回归线,结合了线性和非线性成分。
  • 淡蓝色置信区间:展示了通过 Bootstrap 生成的 95% 置信区间,反映了模型在不同 x 值上的置信范围。

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

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

相关文章

spring 学习路线梳理(二)注解

1.通过注解的方式创建bean 1.1 定义dao层的接口和实现 public interface ILoginDao {public String login(); }Slf4j Repository public class LoginDaoImpl implements ILoginDao {public LoginDaoImpl(){System.out.println("spring create bean call");}Override…

【创建型】单例模式

单例模式使用的场景:需要频繁的进行创建和销毁的对象、创建对象时耗时过多或耗费资源过多(即:重量级对象),但又经常用到的对象、工具类对象、频繁访问数据库或文件的对象(比如数据源、session工厂等) 1. 饿汉式(静态常量&#xf…

怎么安装行星减速电机才是正确的

行星减速电机由于其高效、精密的传动能力,广泛应用于自动化设备、机器人、机床以及其他需要精准控制的领域。正确的安装行星减速电机对于确保设备的性能与延长使用寿命至关重要。 一、前期准备 在进行行星减速电机的安装之前,必须做好充分的前期准备工作…

代码随想录算法训练营第三十四天 | 01背包问题 416.分割等和子集

01背包问题—1(dp为二维数组): 文章链接 题目链接:卡码网 46 思路: 因为有物品和背包容量两个方面,因此我们使用二维数组保存递推的结果 ① dp数组及下标的含义: dp[i][j],其中 i 是第 i 个物品&#x…

什么品牌的护眼台灯比较好?五款护眼效果比较明显的护眼台灯

在当今信息爆炸的时代背景下,挑选一款真正符合个人需求的护眼台灯,确实是一项不小的挑战。市场上品牌众多、型号繁杂,功能特点各不相同,价格区间也相当广泛,许多消费者在选购时往往感到迷茫不已。当大家询问“什么品牌…

cv.dnn.blobFromImage参数详解

例如: image cv.imread(imgs/img.png) blob cv.dnn.blobFromImage(image, scalefactor1.0, size(224, 224), mean(0, 0, 0), swapRBTrue, cropFalse) print("原始图像形状:", image.shape) print("Blob数据形状:", blob.shape)1. image 含义…

消息队列-Rabbitmq(消息发送,消息接收)

将来我们开发业务功能的时候,肯定不会在控制台收发消息,而是应该基于编程的方式。由于RabbitMQ采用了AMQP协议,因此它具备跨语言的特性。任何语言只要遵循AMQP协议收发消息,都可以与RabbitMQ交互。并且RabbitMQ官方也提供了各种不…

电脑没有下载声卡驱动怎么办?电脑声卡驱动安装方法

在日常使用电脑的过程中,我们可能会遇到电脑没有声音的问题,这往往与声卡驱动缺失或损坏有关。声卡驱动是连接电脑硬件(声卡)与操作系统之间的桥梁,确保音频信号能够正常输入输出。那么,当电脑没有声卡驱动…

人工智能与数据安全:Facebook如何应对隐私挑战

在数字时代,数据隐私和安全成为了用户和企业关注的核心问题。作为全球最大的社交媒体平台之一,Facebook面临着日益严峻的隐私挑战。近年来,频繁发生的数据泄露事件和对用户隐私的质疑,使得Facebook在保护用户数据方面倍感压力。为…

使用RabbitMQ实现微服务间的异步消息传递

使用RabbitMQ实现微服务间的异步消息传递 RabbitMQ简介 安装RabbitMQ 在Ubuntu上安装RabbitMQ 在CentOS上安装RabbitMQ 配置RabbitMQ 创建微服务 生产者服务 安装依赖 生产者代码 消费者服务 消费者代码 运行微服务 消息模式 直接模式 生产者代码 消费者代码 扇出模式 生产…

【MySQL】MySQL安装以及各种报错处理

前言: 本节内容讲述在Ubuntu环境下怎么进行MySQL的安装。 以及一些安装过程中遇到的报错如何处理的问题。 ps:注意, 本篇文章不是图形化界面的MySQL安装教程哦。想要安装图形化界面的MySQL的友友们可以另寻资源了。 目录 更新软件包列表 安装M…

Servlet 3.0 注解开发

文章目录 Servlet3.0注解开发修改idea创建注解的servlet模板内容讲解 关于servlet3.0注解开发的疑问_配置路径省略了属性urlPatterns内容讲解内容小结 Servlet3.0注解开发 【1】问题 说明:之前我们都是使用web.xml进行servlet映射路径的配置。这样配置的弊端&…

FPGA时序分析和约束学习笔记(3、Timequest时序路径详解和优化)

FPGA时序分析和约束学习笔记(3、Timequest时序路径详解和优化) Timequest中Data Path分析 Data Arrival Path clock path:时钟信号到达源寄存器时钟端口的时间 data path:数据从源寄存器Q端口出发到达目标寄存器D端口的时间 D…

windows与windows文件共享

目录 基础设置主机共享文件端设置从机接受文件端设置 基础设置 1、先确保两台电脑直接能够ping通,这是文件共享的前提,如果ping不通就去查找对应的原因,一般都是防火墙的原因。 在ping通的情况下: 2、先找到高级共享设置 3、对专…

前端页面整屏滚动fullpage.js简单使用

官网CSS,JS地址 fullPage.js/dist/fullpage.min.js at master alvarotrigo/fullPage.js GitHub fullPage.js/dist/fullpage.min.css at master alvarotrigo/fullPage.js GitHub <!DOCTYPE html> <html lang"en"><head><meta charset"…

Rust整合Elasticsearch

Elasticsearch是什么 Lucene&#xff1a;Java实现的搜索引擎类库 易扩展高性能仅限Java开发不支持水平扩展 Elasticsearch&#xff1a;基于Lucene开发的分布式搜索和分析引擎 支持分布式、水平扩展提高RestfulAPI&#xff0c;可被任何语言调用 Elastic Stack是什么 ELK&a…

opencv-day2-图像预处理1

图像预处理 在计算机视觉和图像处理领域&#xff0c;图像预处理能够提高后续处理&#xff08;如特征提取、目标检测等&#xff09;的准确性和效率。 常见的图像预处理操作&#xff1a; 图像色彩空间转换 图像大小调整 图像仿射变换 图像翻转 图像裁剪 图像二值化处理 图…

scrapy爬取名人名言

爬取名人名言&#xff1a;http://quotes.toscrape.com/ 1 创建爬虫项目&#xff0c;在终端中输入&#xff1a; scrapy startproject quotes2 创建之后&#xff0c;在spiders文件夹下面创建爬虫文件quotes.py&#xff0c;内容如下&#xff1a; import scrapy from scrapy.spi…

一文了解Linux内核I2C子系统,驱动苹果MFI加密芯片

版本 日期 作者 变更表述 1.0 2024/10/27 于忠军 文档创建 背景&#xff1a;由于苹果有一套MFI IAP2的蓝牙私有协议&#xff0c;这个协议是基于BR/EDR的RFCOMM自定义UUID来实现IAP2协议的通信&#xff0c;中间会牵扯到苹果加密芯片的I2C读取&#xff0c;所以我们借此机…

Spring之依赖注入(DI)和控制反转(IoC)——配置文件、纯注解

依赖注入 依赖注入(Dependency Injection&#xff0c;简称 DI)与控制反转(loC)的含义相同&#xff0c;只不过这两 个称呼是从两个角度描述的同一个概念。对于一个 Spring 初学者来说&#xff0c;这两种称呼很难理解, 下面我们将通过简单的语言来描述这两个概念。 当Java对象&…