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

Loess 局部权重回归

Loess 局部权重回归

写在前面:
?我有个问题,STL是什么...
想知道STL是什么东东,我们不妨先把它拆开看(解剖):

请添加图片描述

关于非参数(补充)
(1)非参数方法通常是通过对数据进行分组或平滑处理来构建模型,依据数据的实际分布和特征进行估计,
而不是基于预设的方程;
(2)常见的非参数回归方法包括核回归(Kernel Regression)、局部加权回归(LOESS)等,
这些方法在处理复杂数据时尤其有用,例如当数据中存在噪音或者未知的非线性关系时;

拆开后,我们对STL的每个地方尝试进行逐步理解,(这篇文章)首先先看“L”(Loess)

1 基本概念

loess(locally weighted regression)是一种用于局部回归分析的非参数方法,它主要是把样本划分成一个个小区间,对区间中的样本进行多项式拟合,不断重复这个过程得到在不同区间的加权回归曲线,最后再把这些回归曲线的中心连在一起合成完整的回归曲线

具体过程如下:

· 决定拟合点的数量和位置
· 以拟合点为中心,确定k个最接近的点
· 通过权重函数计算这k个点的权重
· 通过加权线性回归进行多项式拟合(一次或者二次)
· 对所有拟合点重复以上步骤

2 关于权重的确定

确定距离,将距离归一化处理 ---> 降速平滑 ---> 对区间内的散点进行加权线性回归进行拟合

2.1 归一化处理

为了计算某个点 x 0 x_0 x0 的加权值 w i ​ ( x 0 ​ ) w_i​(x_0​) wi(x0),需要对区间内的所有点到 x 0 ​ x_0​ x0 的距离进行标准化处理

w i ​ ( x 0 ​ ) = W ( ∣ x 0 ​ − x i ​ ∣ Δ ( x 0 ​ ) ​ ) w_i​(x_0​)=W(\frac{∣x_0​−x_i​∣}{Δ(x_0​)​}) wi(x0)=W(Δ(x0)x0xi)

**W(⋅):是权重函数(例如 tricube 权重函数)。这里的输入是经过标准化的距离,即将绝对距离除以最大距离 Δ( x 0 x_0 x0)Δ( x 0 x_0 x0​)。这样做的目的是使得权重函数的输入范围限制在 [0, 1] 之间,以便能够使用权重函数进行权重计算。

2.2 权重函数 Tricube

权重通常是根据距离来分配的,距离拟合点越近的数据点,其权重就越大,反之则越小。

三次立方权重函数(tricube weight function)是一种常用的权重分配方式,用来在LOESS中为邻近数据点分配权重。其形式为:

W ( u ) = { ( 1 − ∣ u ∣ 3 ) 3 i f   ∣ u ∣ ≤ 1 0 o t h e r w i s e W(u)=\left\{ \begin{array}{l l} {{\left(1-|u|^{3}\right)^{3}}} & {{\mathrm{if~}}|u|\leq1} \\ {{\bf0}} & {{\mathrm{otherwise}}} \end{array}\right. W(u)={(1u3)30if u1otherwise

解释:

  • u u u:表示标准化距离,通常计算为 u = d h u=\frac{d}{h} u=hd​,其中 d d d 是目标点与某个邻近点之间的实际距离,而 h h h 是带宽参数(平滑参数),用于控制模型的灵活性和光滑度

  • 权重值

    • 当∣u∣≤1∣u∣≤1时,权重值根据距离计算得到,离目标点越近的点权重越高
    • 当∣u∣>1∣u∣>1时,权重为0,这意味着超出带宽范围的数据点不会被考虑在内。

指数可以选择二次(B函数)或三次(W函数),三次方对周围权值的降速更快,平滑效果更好,切适用于大多数分布,但增加了残差的方差,一般来说,第一次迭代会更多实用W函数,第二次迭代会选择B函数。

权重函数的形状
  • 形状特征:Tricube 权重函数呈现出一个 (倒)“U” 形,中心最高,边缘降到零。具体来说,权重在0处达到最大值1,然后随着距离的增加迅速减小,最终在距离带宽阈值处降为0。这种设计使得LOESS能有效地利用近邻信息,同时抑制远离点的影响。

参考代码:

import numpy as np  
import matplotlib.pyplot as plt  
  
# 定义 tricube 权重函数  
def tricube_weight(u):  
    return np.where(np.abs(u) <= 1, (1 - np.abs(u)**3)**3, 0)  
  
# 生成 u 的值  
u = np.linspace(-1.5, 1.5, 400)  
  
# 计算权重  
weights = tricube_weight(u)  
  
# 绘制图形  
plt.figure(figsize=(8, 5))  
plt.plot(u, weights, label='Tricube Weight Function', color='blue')  
plt.title('Tricube Weight Function')  
plt.xlabel('u (standardized distance)')  
plt.ylabel('Weight W(u)')  
plt.axhline(0, color='black', lw=0.5, ls='--')  
plt.axvline(0, color='black', lw=0.5, ls='--')  
plt.xlim(-1.5, 1.5)  
plt.ylim(-0.1, 1.1)  
plt.grid()  
plt.legend()  
plt.show()

参考图像:
请添加图片描述

2.3 加权线性回归

在 LOESS 中,我们认为距离拟合点更近的数据点对模型的影响应该更大,而远离拟合点的数据点影响较小,所以我们要定义损失函数的时候,应该优先降低附近的点与拟合直线的误差,这也就是我们对普通的最小二乘法要加上权重的原因,实际上这就是加权最小二乘法: J ( a , b ) = 1 N ​ ∑ N i = 1 w i ​ ( y i ​ − a x i ​ − b ) 2 J(a,b)=\frac{1}{N}​\underset{{i=1}}{\overset{{N}}{\sum}}w_i​(y_i​−ax_i​−b)^2 J(a,b)=N1i=1Nwi(yiaxib)2加权线性回归通过动态调整各个数据点的权重,为数据拟合提供了更大的灵活性。这种方法能够有效处理散点数据中由于距离、噪声等因素造成的复杂情况,特别是在局部回归分析中,能够显著提高拟合精度和可解释性

参考资料


  1. https://blog.csdn.net/jesseyule/article/details/95245350?spm=1001.2014.3001.5506
  2. 《智能供应链:预测算法理论与实践》庄晓天等著;

http://www.kler.cn/news/366006.html

相关文章:

  • 解决Github下载速度慢的问题
  • Scala 提取器(Extractor)
  • 找不到包的老版本???scikit-learn,numpy,scipy等等!!
  • java中Set,Map,List集合的比较(不包含增删改查函数方法)
  • [linux]软件安装
  • 微信小程序绘制轨迹
  • 构建中小企业设备管理平台:Spring Boot应用
  • 享元设计模式在Java坦克游戏中的应用
  • 深入详解 Java - Spring MVC
  • 15. 缓存(Cache)
  • 24-10-21-读书笔记(二十八)-《契诃夫文集》(十二)下([俄] 契诃夫 [译] 汝龙)我们会生活下去!
  • Island Architecture 孤岛架构
  • 正则表达式基本语法(快速认知)
  • 用xshell给服务器上传jar包
  • PVE系统无损挂载ntfs格式物理磁盘
  • 中小企业设备管理:Spring Boot实现指南
  • 2024-10-22 问AI: [AI面试题] 讨论递归神经网络 (RNN) 的概念
  • 枫清科技高雪峰:大模型要成为生产力才有生命力
  • Docker 镜像下载问题及解决办法
  • OpenCV单目相机内参标定C++
  • 深度剖析:电商 API 接口如何成就卓越用户体验
  • edge下默认pdf图标的修复办法
  • 新手入门之高级maven
  • iOS 本地存储地址(位置)
  • Python爬虫教程:从入门到精通
  • Flutter不常用组件----InteractiveViewer