スプラインはデータをオーバーフィットしていますか?


47

私の問題:最近、統計学者に会いましたが、スプラインはデータの探索にのみ有用であり、オーバーフィットの影響を受けるため、予測には役立ちません。彼は単純な多項式で探索することを好みました...私はスプラインの大ファンなので、これは私の直感に反するので、これらの引数がどのくらい有効であるか、そしてアンチスプラインの大規模なグループがある場合、活動家はいますか?

背景:モデルを作成するときは、フランクハレルの回帰モデリング戦略(1)を追います。彼は、制限された3次スプラインが連続変数を探索するための有効なツールであると主張します。彼はまた、多項式はしきい値、対数などの特定の関係のモデリングが不十分であると主張しています(2)。モデルの線形性をテストするために、彼はスプラインの分散分析テストを提案しています。

H0:β2=β3==βk1=0

私はスプラインでオーバーフィッティングすることをグーグルで調べましたが、それほど便利ではありませんでした(あまり多くのノットを使用しないことに関する一般的な警告は別として)。このフォーラムでは、スプラインモデリング、KolassaHarrellgungが優先されているようです。

多項式についてのブログ投稿を1つ見つけました。これは、多項式の予測について語る過剰適合の悪魔です。投稿はこれらのコメントで終わります:

ここで紹介する例はある程度不正です—多項式回帰は非常にロバストでないことが知られています。実際には、多項式よりもスプラインを使用する方がはるかに優れています。

ここで、この例でスプラインがどのように機能するかを確認するように促されました。

library(rms)
p4 <- poly(1:100, degree=4)
true4 <- p4 %*% c(1,2,-6,9)
days <- 1:70

set.seed(7987)
noise4 <- true4 + rnorm(100, sd=.5)
reg.n4.4 <- lm(noise4[1:70] ~ poly(days, 4))
reg.n4.4ns <- lm(noise4[1:70] ~ ns(days,4))
dd <- datadist(noise4[1:70], days)
options("datadist" = "dd")
reg.n4.4rcs_ols <- ols(noise4[1:70] ~ rcs(days,5))

plot(1:100, noise4)
nd <- data.frame(days=1:100)
lines(1:100, predict(reg.n4.4, newdata=nd), col="orange", lwd=3)
lines(1:100, predict(reg.n4.4ns, newdata=nd), col="red", lwd=3)
lines(1:100, predict(reg.n4.4rcs_ols, newdata=nd), col="darkblue", lwd=3)

legend("top", fill=c("orange", "red","darkblue"), 
       legend=c("Poly", "Natural splines", "RCS - ols"))

次の画像が表示されます。 スプラインと多項式の比較

結論として、私はスプラインを再考することを私に納得させるほど多くを見つけていません、私は何が欠けていますか?

  1. FEハレル、回帰モデリング戦略:線形モデルへの適用、ロジスティック回帰、および生存分析、ハードカバー第1版のソフトカバー再版。2001年。スプリンガー、2010年。
  2. FEハレル、KLリー、およびBGポロック、「臨床研究における回帰モデル:予測因子と応答の関係の決定」、JNCI J Natl Cancer Inst、vol。80、いいえ。15、pp。1198–1202、1988年10月。

更新

コメントは、データスパン内で何が起こるのか不思議に思いましたが、不快な曲線があります。上記の例が示すように、ほとんどの場合、データ境界の外側には行きません。これが予測に該当するかどうかはわかりません...

とにかく、多項式に変換できないより複雑な線を作成する例を次に示します。ほとんどの観測はデータの中心にあるため、私もそれをシミュレートしようとしました:

library(rms)
cmplx_line <-  1:200/10
cmplx_line <- cmplx_line + 0.05*(cmplx_line - quantile(cmplx_line, .7))^2
cmplx_line <- cmplx_line - 0.06*(cmplx_line - quantile(cmplx_line, .3))^2
center <- (length(cmplx_line)/4*2):(length(cmplx_line)/4*3)
cmplx_line[center] <- cmplx_line[center] + 
    dnorm(6*(1:length(center)-length(center)/2)/length(center))*10

ds <- data.frame(cmplx_line, x=1:200)

days <- 1:140/2

set.seed(1234)
sample <- round(rnorm(600, mean=100, 60))
sample <- sample[sample <= max(ds$x) & 
                     sample >= min(ds$x)]
sample_ds <- ds[sample, ]

sample_ds$noise4 <- sample_ds$cmplx_line + rnorm(nrow(sample_ds), sd=2)
reg.n4.4 <- lm(noise4 ~ poly(x, 6), data=sample_ds)
dd <- datadist(sample_ds)
options("datadist" = "dd")
reg.n4.4rcs_ols <- ols(noise4 ~ rcs(x, 7), data=sample_ds)
AIC(reg.n4.4)

plot(sample_ds$x, sample_ds$noise4, col="#AAAAAA")
lines(x=ds$x, y=ds$cmplx_line, lwd=3, col="black", lty=4)

nd <- data.frame(x=ds$x)
lines(ds$x, predict(reg.n4.4, newdata=ds), col="orange", lwd=3)
lines(ds$x, predict(reg.n4.4rcs_ols, newdata=ds), col="lightblue", lwd=3)

legend("bottomright", fill=c("black", "orange","lightblue"), 
       legend=c("True line", "Poly", "RCS - ols"), inset=.05)

これにより、次のプロットが得られます。

より複雑な非多項式ラインプロット

更新2

この投稿以来、大規模なデータセットの年齢の非線形性を調べる記事を公開しまし。補足は異なる方法を比較します、そして、私はそれに関するブログ投稿を書きまし


16
正直に言うと、統計学者の友人がどこから来たのか本当にわかりません。多項式とスプラインを同じようにオーバーフィットできます。過剰適合は、過剰な容量を持つモデルのクラスから生じます。さまざまなモデルのパフォーマンスを区別するのは、容量を制限する方法です。(自然な)スプラインの場合、それはノットの配置と数であり、多項式の場合は次数です。

1
@guy:それも私の信念です。どの方法を使用しても、データをいつでもオーバーフィットできます。私の回帰クラスで、教授は、データの大部分が発生する場所で多項式が曲がり、極端なデータの信頼性が低下することを教えてくれました。この主張を裏付ける記事は見つかりませんでしたが。
マックスゴードン

最初のグラフのすべての曲線は、右端のデータに適合していません。
エミルフリードマン

1
上記のグラフの「x」次元は時間に関連していますか?そうである場合、これらの方法はどれも適切ではありません。なぜなら、モデル化に隣接する点(両側)を使用するという意味で、両方とも「前向き」だからです。
arielf

@arielf:いいえ、xは時間変数として意図されていません。中心で最大数の観測値をサンプリングする変数と考えました。私の研究では、私たちは将来をそれほど見ていません。予測よりも推論の分野にあると思います。変数は、コレステロール、血圧、BMI、またはその他の一般的な連続変数であることが意図されています。
マックスゴードン

回答:


18

過剰適合は、大きすぎるモデルのクラスを許可することに起因します。これは、連続パラメーター(スプラインや多項式など)を持つモデルでは少し注意が必要ですが、パラメーターをいくつかの異なる値に離散化すると、ノット/係数の数を増やすと利用可能なモデルの数が指数関数的に増加することがわかります。すべてのデータセットには、十分な係数/ノットを許可する限り、正確に適合するスプラインと多項式があります。3つのノットを持つスプラインは、3つの係数を持つ多項式よりもオーバーフィットする場合がありますが、それは公平な比較ではありません。

パラメーターの数が少なく、データセットが大きい場合は、過剰適合していないことを合理的に確信できます。より多くのパラメーターを試す場合は、テストセット内で相互検証を試して最適な数を見つけるか、Minimum Description Lengthなどの基準を使用します。

編集:コメントで要求されているように、MDLをどのように適用するかの例。最初に、データが連続的であるという事実に対処する必要があるため、有限コードで表現することはできません。簡単にするために、データスペースをサイドボックスに分割し、データポイントを記述する代わりに、データが含まれるボックスを記述します。これは、精度がいくらか失われることを意味しますが、任意に小さくできるため、それほど重要ではありません。ϵϵϵ

ここでのタスクは、多項式を使用してデータセットをできる限り簡潔に記述することです。まず、多項式について説明します。n次多項式の場合、(n + 1)係数を保存するだけです。繰り返しますが、これらの値を離散化する必要があります。その後、まずプレフィックスなしのコーディングで値を保存する必要があります(したがって、読み取りを停止するタイミングがわかります)。次に、n + 1nn+1パラメータ値。この情報を使用して、コードの受信者は多項式を復元できます。次に、データセットの保存に必要な残りの情報を追加します。各データポイントに対して、x値を指定し、データポイントの上下にあるボックスの数を多項式から外します。両方の値はプレフィックスなしのコーディングで保存されるため、短い値には数ビットが必要であり、ポイント間に区切り文字は必要ありません。(値間の増分を保存するだけでx値のコードを短縮できます)

ここでの基本的なポイントはトレードオフです。次数多項式(f(x)= 3.4など)を選択した場合、モデルの保存は非常に簡単ですが、y値については、本質的に平均までの距離を保存しています。係数が多いほど、より良い近似多項式が得られます(したがって、y値のコードが短くなります)が、モデルを記述するビットを多く費やす必要があります。データの最短コードを提供するモデルは、MDL基準に最適です。

(これは「粗MDL」と呼ばれ、さまざまな技術的な問題を解決するためにいくつかの改良が可能であることに注意してください)。


ピーターに答えてくれてありがとう。私は、特にMDLをどのように適用するかについて、MDLに頭を包んでみました。私の例の1つに基づいて説明していただければ幸いです。非統計学者として、基礎となるロジスティクスを理解する前に物事を例示することが好きです。ウィキ-記事のコインの例では、...私には達しなかった
マックス・ゴードン

例を追加しました。
ピーター

例をありがとうピーター、それは今私にずっと明確です。
マックスゴードン

20

統計学者は、年齢に対する多項式近似について議論してきましたが、私の経験では、これは次のようになります。

スプラインは、基本的にはつなぎ合わされた一連の異なる方程式であり、データ範囲外に投影する能力を犠牲にして補間値の精度を向上させる傾向があります。データが純粋で一貫したソースからのものであることがわかっている場合、および値の範囲内で異なる値が存在する可能性を記述しようとしている場合、これは問題ありません。ただし、古いスプラインがデータの正確な記述を停止すると新しいスプラインが開始されるため、通常、データを駆動する理論的基盤についてはあまり学習しません。これにより、データ外の値を予測する価値がほとんどなくなります。

現在、スプラインはこの点でユニークではありません。変数を選択するために理論的なフレームワークを使用せずにデータを近似するだけの場合、多項式関数は実際に同じ問題の影響を受けます。どの変数を変化させるか、そしてデータの外で予測を外挿する複雑な多項式関数の能力をどれだけ信頼するかを駆動する整形式理論を持っている人。

ただし、多くの統計学者は、事前に確立された理論的枠組みの助けを借りずにデータを操作しており、これにより一部の人々は単純な多項式に向かっています。彼らは、データに適合する柔軟性の低い関数は、データ内の異常に左右されにくいため、データ外の値を正確に予測する可能性が高いと考えています。私はこれについて単純な多項式を好む人々と会話しましたが、アンチスプラインのグループのような感覚を得たことはありません。単純な多項式により、一部の統計学者が過剰適合を回避することをより快適に感じるようになります。

免責事項

個人的には、ほとんどのデータでスプラインや単純な多項式を使用する傾向はありません。なぜなら、私は多くの事前に確立された理論的枠組みを持つ分野で働いているからです。また、私は通常、データの収集を観察しており、結果の原因となっているものを適切に把握することができます。その場合、多項式関数の適合度をテストするのではなく、より多くの論理アルゴリズムを構築し、アルゴリズムの適合度をテストしています。この塩の粒を私の答えに追加できます。


18
多項式は、スプラインよりもデータ内の異常に対してはるかに敏感です。データセット内の任意の場所にある異常値は大規模なグローバル効果を持ち、スプラインでは効果はローカルです。

私はあなたの要点を理解しました。完璧な情報アプローチを使用している場合、またはデータの性質に関する十分な情報を持っていない場合、それは真実です。多くの統計学者(私自身も含む)は不完全な情報を想定し、データを適合させる前に既知の情報に基づいて除外基準を適用しようとします。理論的には、危険な外れ値をフィッティングの試行から除外する必要があります。データの性質に関する既知の情報を持っていない場合(これは非常に一般的です)、外れ値を回避しようとして立ち往生しています。
ディンレ

5
回帰スプラインは多項式よりもより危険な外挿であると確信する必要があります。
フランクハレル

1
これは新しいものではありません。むしろ、それは理解の初期段階で行われた統計と理解の後期段階で行われた統計の間に見られる違いです。システムを理解すればするほど、適合関数への依存度は低くなり、理論モデルへの依存度は高くなります。
ディンレ

1
データポイントの外側で関数が線形になるように制限する制限付き3次スプラインを使用するのはどうですか(私はHarrellの本を読んでいます)。とにかく外挿は常に疑わしいです。超伝導またはプラズマを発見した実験を考えてください。理論は実験によって証明されるべきです!どの関数が適合するかは、補間問題により関連すると思います。理論がなければ、十分なデータを与えたとしても、エラーの予測変数(未知の分布)とy | xの未知の分布を持つモデルを1つだけ選択することはできないと思います。
KHキム
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.