Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

LOWESS

散布図に従う近似線を描くために開発された局所回帰。 LOESS (locally estimated scatterplot smoothing) や LOWESS (locally weighted scatterplot smoothing) と呼ばれる。

Source
<Figure size 640x480 with 1 Axes>

LOWESSのアルゴリズム

Cleveland (1979). に記されたアルゴリズムは以下の通り。

ii番目のサンプルの目的変数yiy_iを特徴量xix_iとノンパラメトリックの平滑化関数g(xi)g(x_i)で近似することを考える。

yi=g(xi)+ϵiy_i = g(x_i) + \epsilon_i

ここでϵi\epsilon_iは平均0で分散が一定の確率変数である。

1. 重みの計算とrr個の最近傍サンプルの取得

xix_iについて、j=1,…,nj=1,\dots,nにわたって∣xi−xj∣|x_i - x_j|で距離を測り、rr番目に近いサンプルとの距離をhih_iとする。

重み関数W(⋅)W(\cdot)を用いて、k=1,…,nk=1,\dots,nについて

wk(xi)=W(hi−1(xk−xi))w_k(x_i) = W(h_i^{-1}(x_k - x_i))

を計算する

ここで重み関数W(⋅)W(\cdot)は以下の性質を満たすものとする

  1. ∣x∣<1|x| < 1について W(x)>0W(x) > 0

  2. W(−x)=W(x)W(-x)=W(x)

  3. W(x)W(x) は x≥0x \geq 0について 非増加関数

  4. ∣x∣≥1|x| \geq 1についてW(x)=0W(x)=0

hi−1(xk−xi)h_i^{-1}(x_k - x_i)は分子のxk−xix_k - x_iの絶対値が分母のhih_iより大きければ∣hi−1(xk−xi)∣≥1|h_i^{-1}(x_k - x_i)| \geq 1になるので重みが0になる。つまり、サンプルとして回帰に使用されなくなる。 なので重み関数は近傍のrr個のサンプルを取り出しつつ、rr個のサンプルにも距離に応じた重みをかける操作となる。

WWの例として tricube functionが考えられる

W(x)={(1−∣x∣3)3 for ∣x∣<10 for ∣x∣⩾1W(x) = \begin{cases} (1-|x|^3)^3 & \text { for } \quad|x|<1 \\ 0 \quad & \text { for } \quad|x| \geqslant 1 \end{cases}
Source
<Figure size 400x300 with 1 Axes>

2. 多項式回帰のフィッティング

非線形回帰としてdd次の多項式回帰を行う

min⁡β0,…,βd ∑k=1nwk(xi)(yk−β0−β1xk−…−βdxkd)2\min_{\beta_0,\dots,\beta_d} ~ \sum_{k=1}^n w_k\left(x_i\right)\left(y_k-\beta_0-\beta_1 x_k-\ldots-\beta_d x_k^d\right)^2
y^i=∑j=0dβ^j(xi)xij\hat{y}_i=\sum_{j=0}^d \hat{\beta}_j\left(x_i\right) x_i^j

3. ロバスト性重みδ\deltaの計算

続いて、外れ値の影響を除外するための重みを計算する。 bisquare weight function B(x)B(x)を以下のように定義する

B(x)={(1−x2)2 for ∣x∣<10 for ∣x∣⩾1B(x) = \begin{cases} (1 - x^2)^2 & \text { for } \quad|x| < 1 \\ 0 \quad & \text { for } \quad|x| \geqslant 1 \end{cases}

残差ei=yi−y^ie_i = y_i - \hat{y}_iの絶対値∣ei∣|e_i|の中央値をssとする。ロバスト性重み(robustness weights)を

δk=B(ek/6s)\delta_k = B(e_k / 6s)

と定義する。B(x)B(x)もtricube functionと似た形状であり、残差の絶対値の中央値の6倍(6s6s)以上の絶対値の残差∣ek/6s∣≥1|e_k/6s| \geq 1を持つ外れ値は重みδk\delta_kがゼロになり、推定に含まれなくなるので、推定からハズレ値の影響を除外できる。

Source
<Figure size 400x300 with 1 Axes>

4. δ\deltaで重み付け回帰を行う

またdd次多項式回帰を行い、新たな推定値y^i\hat{y}_iを得る。このとき、重みはδkwk(xi)\delta_k w_k (x_i)を使う。

5. 繰り返す

3.と4.のステップをtt回繰り返す。

実装

<Figure size 640x480 with 1 Axes>
<Figure size 640x480 with 1 Axes>

最近のLOWESSアルゴリズム

Wikipediaには、重み関数がtricubeではなくGaussianを使うものが紹介されている

Gaussian weight functionとは、2つのデータ点の特徴量ベクトルx,x′∈Rmx, x' \in \mathbb{R}^m(mmは特徴量の次元数)について、

w(x,x′,α)=exp⁡(−∥x−x′∥22α2)w(x, x', \alpha)=\exp \left(-\frac{\|x-x'\|^2}{2 \alpha^2}\right)

といったもの。

参考