当前位置: 首页 > article >正文

局部加权回归

2. 局部加权回归 (Loess / Lowess)

局部加权回归是一种非参数回归方法,可以自适应地拟合数据的弧度。它对每个点应用加权回归,以根据数据的局部趋势产生一条平滑曲线。这种方法特别适合捕捉数据中较小的曲率变化。

  • 优点:能够很好地拟合微小的非线性变化,不需要指定多项式的次数。
  • 缺点:计算量较大,不适合处理特别大的数据集,且局部加权回归的结果缺乏全局方程,因此解释性可能稍弱。

局部加权回归(Lowess 或 Loess)是一种非参数方法,它能够捕捉数据中的局部非线性趋势,适合于观察数据的平滑变化。我们可以使用 statsmodels 库中的 lowess 函数来实现。以下代码示例展示了如何使用 Lowess 对数据进行回归,并绘制回归曲线及其置信区间。

代码示例

import numpy as np
import matplotlib.pyplot as plt
from statsmodels.nonparametric.smoothers_lowess import lowess
from sklearn.utils import resample

# 生成一些带有轻微非线性趋势的样本数据
np.random.seed(42)
x = np.linspace(0, 10, 100)
y = np.sin(x) + 0.3 * x + np.random.normal(0, 0.2, size=x.shape)

# 使用 Lowess 进行局部加权回归
frac = 0.3  # 平滑参数,决定窗口大小,数值越小平滑度越低
lowess_result = lowess(y, x, frac=frac)

# 获取拟合的 y 值
y_pred = lowess_result[:, 1]

# 使用 Bootstrap 方法计算置信区间
n_bootstraps = 200
y_pred_bootstrap = []

for _ in range(n_bootstraps):
    # 随机采样并计算 Lowess 拟合
    x_boot, y_boot = resample(x, y)
    lowess_boot = lowess(y_boot, x_boot, frac=frac)
    
    # 将拟合值插值到原始 x 上
    y_pred_interpolated = np.interp(x, lowess_boot[:, 0], lowess_boot[:, 1])
    y_pred_bootstrap.append(y_pred_interpolated)

# 将预测结果转换为数组
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, y_pred, color='blue', label='Lowess Regression')
plt.fill_between(x, lower_bound, upper_bound, color='lightblue', alpha=0.5, label='95% Confidence Interval')
plt.xlabel('x')
plt.ylabel('y')
plt.title('Lowess Regression with 95% Confidence Interval')
plt.legend()
plt.show()

代码说明

  1. 数据生成:生成带有非线性趋势的样本数据 y = sin ⁡ ( x ) + 0.3 × x + noise y = \sin(x) + 0.3 \times x + \text{noise} y=sin(x)+0.3×x+noise
  2. Lowess 拟合:使用 statsmodels.nonparametric.smoothers_lowess.lowess 函数,设置 frac 参数来控制平滑度。较小的 frac 值会产生更局部化的拟合,适合较快变化的非线性数据。
  3. Bootstrap 置信区间:通过引导法 (Bootstrap) 生成 200 组不同的样本集,对每组样本进行 Lowess 回归拟合。然后使用 np.interp 将每组拟合值插值到原始 x 位置,以便计算置信区间。
  4. 置信区间计算:对所有拟合样本的结果,取 2.5 和 97.5 百分位数,得到 95% 的置信区间。
  5. 绘图:绘制数据点、Lowess 回归曲线和置信区间。

输出图形


在这里插入图片描述

执行代码后将生成如下内容:

  • 灰色散点图:展示原始数据点分布。
  • 蓝色的 Lowess 回归曲线:平滑的局部加权回归结果。
  • 淡蓝色置信区间:基于 Bootstrap 生成的 95% 置信区间。

http://www.kler.cn/a/377584.html

相关文章:

  • 十六届蓝桥杯嵌入式资料 看这个就够了(附CSDN开源程序)
  • 在K8s平台部署个人博客
  • unity3d————叉乘的知识点
  • Linux之crontab使用
  • 独孤思维:工作被骂,副业停滞,算个屁
  • 云原生+AI核心技术&最佳实践
  • 【MySQL】 运维篇—安全管理:数据加密与SSL配置
  • 快消零售行业的培训创新:构建在线培训知识库
  • Apache Hive分布式容错数据仓库系统
  • 函数理解(c)
  • 1009:带余除法
  • Windows 安全日志解析
  • 飞桨首创 FlashMask :加速大模型灵活注意力掩码计算,长序列训练的利器
  • 程序的全生命周期
  • vue3 keep-alive简单说明
  • (转载)Tools for Learning LLVM TableGen
  • 随着飞行汽车的亮相,在环保方面有什么保护措施吗
  • 每天五分钟深度学习pytoroch:基于pytorch搭建逻辑回归算法模型
  • C/C++语言基础--C++模板与元编程系列二类模板、全特化、偏特化、编译模型简介、实现简单Vetctor等…………)
  • 2024最新精仿抖音直播软件源码
  • 从一到无穷大 #39:从 Vectorized Mode vs Code Gen 权衡特定场景执行引擎技术选型标准
  • vscode的一些使用心得
  • MySQL超大分页怎么优化处理?limit 1000000,10 和 limit 10区别?覆盖索引、面试题
  • Word2Vec——嵌入单词并显示图形
  • 【Python ASR 】模型对比 whisper 和 funasr
  • 从零开始的 vue项目部署到服务器详细步骤(vue项目build打包+nginx部署+配置ssl证书)