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加权线性回归通过动态调整各个数据点的权重,为数据拟合提供了更大的灵活性。这种方法能够有效处理散点数据中由于距离、噪声等因素造成的复杂情况,特别是在局部回归分析中,能够显著提高拟合精度和可解释性
参考资料
- https://blog.csdn.net/jesseyule/article/details/95245350?spm=1001.2014.3001.5506
- 《智能供应链:预测算法理论与实践》庄晓天等著;