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. 《智能供应链:预测算法理论与实践》庄晓天等著;
相关推荐
Gerry_Liang39 分钟前
Android Studio 无法查看Kotlin源码的解决办法
android·kotlin·android studio
墨@#≯2 小时前
回归与分类中的过拟合问题探讨与解决
机器学习·分类·回归·正则化·过拟合
sp_fyf_202412 小时前
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-27
人工智能·深度学习·算法·机器学习·语言模型·自然语言处理·数据挖掘
小白熊_XBX13 小时前
机器学习实战——基于粒子群优化算法(PSO)优化支持向量回归(SVR)模型(附完整代码)
人工智能·算法·机器学习·分类·数据挖掘·回归·sklearn
AI研习星球20 小时前
数据分析-38-关于互联网企业黑名单的探索
深度学习·机器学习·计算机视觉·数据挖掘·数据分析·论文辅导·算法辅导
菜鸟的人工智能之路1 天前
雷达图:多维数据的可视化利器
数据挖掘·数据分析·健康医疗
彭于晏6892 天前
【Android】Kotlin教程(7)
android·开发语言·kotlin
宾有为2 天前
【Android】多渠道打包配置
android·java·kotlin·1024程序员节·多渠道打包
快乐江小鱼2 天前
数据挖掘(三)
人工智能·python·数据挖掘