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)∣x0−xi∣)

**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)={(1−∣u∣3)30if ∣u∣≤1otherwise

解释:

  • 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能有效地利用近邻信息,同时抑制远离点的影响。

参考代码:

python 复制代码
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=1∑Nwi(yi−axi−b)2加权线性回归通过动态调整各个数据点的权重,为数据拟合提供了更大的灵活性。这种方法能够有效处理散点数据中由于距离、噪声等因素造成的复杂情况,特别是在局部回归分析中,能够显著提高拟合精度和可解释性

参考资料


  1. https://blog.csdn.net/jesseyule/article/details/95245350?spm=1001.2014.3001.5506
  2. 《智能供应链:预测算法理论与实践》庄晓天等著;
相关推荐
熊猫钓鱼>_>3 小时前
Kotlin Multiplatform for OpenHarmony 实战:为 KMPNotifier 实现 OpenHarmony 本地通知引擎
kotlin·ai编程·harmonyos·鸿蒙·openharmony·适配·kmp
DongQiShanRen10 小时前
裁决台账双向互校(上):名册与实物的第一道对账
java·linux·运维·数据库·人工智能·自然语言处理·数据挖掘
传奇开心果编程11 小时前
【Compose Multiplatform 跨端开发学与练】第3课 布局与组件
android·windows·学习·ui·ios·kotlin·composer
事圆则缓12 小时前
Kotlin 入门与面试:从空安全、扩展函数到协程
安全·面试·kotlin
传奇开心果编程14 小时前
【Compose Multiplatform 跨端开发学与练】第8课 资源管理与主题
android·windows·学习·ios·kotlin·web·composer
传奇开心果编程15 小时前
【Compose Multiplatform 跨端开发学与练】第9课 测试与调试
android·学习·macos·ios·kotlin·web·composer
传奇开心果编程15 小时前
【Compose Multiplatform 跨端开发学与练】第4课 导航与路由
android·windows·学习·ui·ios·kotlin·composer
传奇开心果编程16 小时前
【Compose Multiplatform 跨端开发学与练】第6课 状态管理与架构
android·学习·ui·ios·架构·kotlin·composer
传奇开心果编程16 小时前
【Compose Multiplatform 跨端开发学与练】第2课 Compose 基础语法
android·windows·学习·ui·ios·kotlin·composer
β添砖java16 小时前
机器学习8:数据挖掘案例-南方电网电力负荷预测 ---完结!
人工智能·机器学习·数据挖掘