스플라인이 데이터에 비해 적합합니까?


47

내 문제 : 최근 스플라인은 데이터 탐색에만 유용하고 과적 합되어 예측에 유용하지 않다는 통계학자를 만났습니다. 그는 간단한 다항식으로 탐색하는 것을 선호했습니다 ... 나는 스플라인을 좋아하는 팬이므로, 나는이 주장이 얼마나 유효한지, 그리고 안티 스플라인 그룹이 큰지에 관심이 있습니다. 거기 운동가 ?

배경 : 모델을 만들 때 Frank Harrell, Regression Modeling Strategies (1)을 따르려고합니다. 그는 제한된 입방 스플라인이 연속 변수를 탐색하기위한 유효한 도구라고 주장합니다. 그는 또한 다항식이 임계 값, 로그와 같은 특정 관계를 모델링하는 데 열악하다고 주장합니다 (2). 모델의 선형성을 테스트하기 위해 스플라인에 대한 분산 분석 테스트를 제안합니다.

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

스플라인으로 과적 합한 것으로 Google 검색했지만 그다지 유용하지는 않습니다 (매듭을 너무 많이 사용하지 않는다는 일반적인 경고 제외). 이 포럼에는 스플라인 모델링, Kolassa , Harrell , gung에 대한 선호가있는 것 같습니다 .

다항식에 대한 블로그 게시물을 찾았습니다 . 다항식 예측에 대해 이야기 하는 과적 합의 악마 . 게시물은 다음과 같은 주석으로 끝납니다.

다항식 회귀는 매우 비 강력한 것으로 알려져 있습니다. 실제로는 다항식보다 스플라인을 사용하는 것이 훨씬 좋습니다.

이제이 예제에서 스플라인의 성능을 확인하라는 메시지가 표시되었습니다.

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 Harrell, 회귀 모델링 전략 : 선형 모형, 로지스틱 회귀 및 생존 분석에 대한 응용 프로그램을 사용하여 하드 커버 1 차 버전의 소프트 커버 재 인쇄. 2001. Springer, 2010.
  2. FE Harrell, KL Lee 및 BG Pollock,“임상 연구에서의 회귀 모델 : 예측 자와 반응 간의 관계 결정,”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
나는 당신의 통계학자가 어디에서 왔는지, 솔직히 모르겠습니다. 다항식과 스플라인을 동일하게 오 버핏 할 수 있습니다. 과적 합은 과도한 용량을 가진 모델 클래스에서 비롯됩니다. 다양한 모델의 성능을 구별하는 것은 용량을 제한하는 방법입니다. (자연) 스플라인의 경우 매듭 배치 및 숫자이며 다항식의 경우 차수입니다.
guy

1
@ guy : 그것은 또한 내 믿음입니다. 사용하는 방법에 관계없이 항상 데이터를 초과 적합시킬 수 있습니다. 회귀 수업 중에 교수님은 다항식이 데이터의 대부분이 발생하는 곳을 구부리므로 극단을 더 신뢰할 수 없게 만듭니다. 이 주장을 뒷받침하는 기사를 찾지 못했습니다.
맥스 고든

첫 번째 그래프의 모든 곡선이 맨 오른쪽의 데이터에 맞지 않습니다.
Emil Friedman 2019

1
위의 그래프에서 'x'차원은 시간과 관련이 있습니까? 그렇다면이 방법들 중 어느 것도 적절하지 않습니다. 두 방법 모두 모델링하기 위해 인접한 점 (양쪽)을 사용한다는 의미에서 '전망 적'입니다.
arielf 2013

@arielf : x는 시간 변수로 사용되지 않습니다. 중앙에서 최대 관측치 수를 샘플링하는 변수로 생각했습니다. 내 연구에서 우리는 미래를 그다지 조사하지 않고 예측보다 추론 분야에 더 많이 있다고 생각합니다. 변수는 콜레스테롤, 혈압, BMI 또는 다른 일반적인 연속 변수가되도록 고안되었습니다.
Max Gordon

답변:


18

과적 합은 너무 큰 클래스의 모델을 허용함으로써 발생합니다. 스플라인 및 다항식과 같은 연속 매개 변수가있는 모델에서는 약간 까다로워 지지만 매개 변수를 몇 가지 고유 값으로 이산하면 매듭 / 계수를 늘리면 사용 가능한 모델 수가 기하 급수적으로 증가한다는 것을 알 수 있습니다 . 모든 데이터 세트에 대해 충분한 계수 / 매듭을 허용하는 한 정확하게 맞는 스플라인과 다항식이 있습니다. 3 개의 매듭이있는 스플라인이 3 개의 계수가있는 다항식보다 더 적합 할 수 있지만 이는 공정한 비교가 아닙니다.

매개 변수 수가 적고 데이터 집합이 많으면 과적 합하지 않는 것이 합리적입니다. 더 많은 수의 매개 변수를 사용하려는 경우 테스트 세트 내에서 교차 유효성 검사를 시도하여 최상의 수를 찾거나 최소 설명 길이 와 같은 기준을 사용할 수 있습니다 .

ϵϵ

nn+1매개 변수 값. 이 정보를 통해 코드 수신자는 다항식을 복원 할 수 있습니다. 그런 다음 데이터 세트를 저장하는 데 필요한 나머지 정보를 추가합니다. 각 데이터 포인트에 대해 x 값을 제공 한 다음 데이터 포인트 위 또는 아래에 몇 개의 상자가 다항식에 있습니다. 프리픽스 프리 코딩에 저장하는 두 값은 짧은 값에 몇 비트가 필요하며 점 사이에 구분 기호가 필요하지 않습니다. (값 사이의 증분 만 저장하여 x- 값의 코드를 줄일 수 있습니다)

여기서 기본적인 요점은 트레이드 오프입니다. f (x) = 3.4와 같은 차수 다항식을 선택하면 모델을 저장하는 것이 매우 간단하지만 y 값의 경우 기본적으로 평균까지의 거리를 저장합니다. 계수가 많을수록 다항식이 더 잘 맞으며 (따라서 y 값의 경우 더 짧은 코드) 모델을 설명하는 데 더 많은 비트를 사용해야합니다. 데이터에 가장 짧은 코드를 제공하는 모델이 MDL 기준에 가장 적합합니다.

(이것은 'crude MDL'로 알려져 있으며 다양한 기술적 문제를 해결하기 위해 몇 가지 개선 사항이 있습니다.)


당신의 대답에 대한 피터 감사합니다. 나는 MDL 주위에 머리를 감싸려고 노력했다. 특히 그것을 적용하는 방법. 내 예제 중 하나를 기반으로 설명하는 것이 좋을 것입니다. 비 통계 학자로서 나는 기본 물류를 이해하기 전에 모범을 보이는 것을 좋아합니다. 위키 기사의 동전 예제가 나에게 도달하지 못했습니다.
Max Gordon

예를 추가했습니다.
Peter

예를 들어 Peter에게 감사합니다. 지금은 훨씬 더 명확합니다.
Max Gordon

20

통계 학자들은 여러 시대에 대한 다항식 피팅에 대해 논쟁 해 왔으며, 내 경험에 따르면 다음과 같습니다.

스플라인은 기본적으로 서로 다른 일련의 방정식으로 구성되며, 데이터 범위 외부로 투영하는 기능을 희생시키면서 보간 된 값의 정확도를 높이는 경향이 있습니다. 데이터가 순수하고 일관된 소스에서 온 것임을 알고 있고 값 범위 내에서 다른 값이 존재할 가능성을 설명하려는 경우에는 문제가 없습니다. 그러나 기존 스플라인이 데이터를 정확하게 설명하지 않으면 새로운 스플라인이 시작되므로 데이터를 구동하는 이론적 토대에 대해 많이 배우지 않습니다. 이를 통해 데이터 외부의 값을 거의 무가치하게 예측합니다.

이제 스플라인은이 점에서 고유하지 않습니다. 다항식 함수는 변수를 선택하기 위해 이론적 프레임 워크를 사용하지 않고 데이터를 피팅하는 경우 실제로 동일한 문제로 고통받습니다. 변수를 다양하게 만들 수 있고 이론적으로 데이터 외부의 예측을 추정하는 복잡한 다항식 함수의 능력을 얼마나 신뢰할 수 있는가?

그러나 많은 통계 학자들은 사전에 확립 된 이론적 프레임 워크의 도움없이 데이터를 사용하고 있으며,이를 통해 일부 사람들은 단순한 다항식으로 나아가게됩니다. 그들은 데이터에 적합한 융통성이 적은 함수가 데이터 외부의 값에 의해 좌우되지 않기 때문에 데이터 외부의 값을 정확하게 예측할 가능성이 더 높다고 생각합니다. 나는 간단한 다항식을 선호하는 사람들과 이것에 대해 대화를 나누었지만, 스플라인 방지 그룹의 느낌을 결코 얻지 못했습니다. 단순한 다항식처럼 느껴지므로 일부 통계 전문가는 과적 합을 피하는 데 더 편합니다.

기권

개인적으로, 나는 많은 사전 확립 된 이론적 틀이있는 분야에서 일하기 때문에 대부분의 데이터에 스플라인이나 간단한 다항식을 사용하지 않습니다. 또한 일반적으로 데이터 수집을 관찰했으며 결과를 이끌어 낸 내용을 알 수 있습니다. 이 경우 다항 함수의 적합성을 테스트하는 대신 논리 알고리즘을 더 많이 구축하고 알고리즘의 적합성을 테스트합니다. 이 답을 소금에 넣을 수 있습니다.


18
다항식은 스플라인보다 데이터 내의 이상에 훨씬 민감합니다. 데이터 세트의 어느 곳에서나 특이한 전역 효과가 있지만 스플라인에서는 효과가 로컬입니다.
guy

나는 당신의 요점을 알고 있으며, 완벽한 정보 접근 방식을 사용하거나 데이터의 성격에 대한 충분한 정보가 없다면 사실입니다. 많은 통계 학자 (자체 포함)는 불완전한 정보를 가정하고 데이터를 맞추기 전에 알려진 정보를 기반으로 제외 기준을 적용하려고 시도합니다. 위험한 이상 치는 이론적으로 피팅 시도에서 제외해야합니다. 데이터의 특성에 대한 알려진 정보가 없으면 (이것은 매우 일반적 임), 특이 치 문제를 해결하려고 노력하고 있습니다.
Dinre

5
회귀 스플라인이 다항식보다 더 위험하게 외삽한다는 사실을 더 잘 확신해야 할 것입니다.
Frank Harrell

1
이것은 새로운 것이 아닙니다. 오히려 이해의 초기 단계에서 수행 된 통계와 이해의 후 단계에서 수행 된 통계 사이의 차이입니다. 시스템에 대한 이해가 많을수록 적합 함수에 대한 의존도가 줄어들고 이론적 모델에 대한 의존도가 높아집니다.
Dinre

1
데이터 포인트 외부에서 함수를 선형으로 제한하는 제한된 입방 스플라인을 사용하는 것은 어떻습니까 (Harrell의 책을 읽고 있습니다). 어쨌든 외삽은 항상 의심 스럽다. 초전도성 또는 플라즈마를 발견 한 실험을 생각해보십시오. 이론은 실험을 통해 증명되어야합니다! 맞는 함수가 보간 문제와 더 관련이 있다고 생각합니다. 이론이 없으면 충분한 데이터를 제공하더라도 오류 (알 수없는 분포) 및 알 수없는 y | x 분포의 예측 변수가있는 하나의 모형 만 선택할 수는 없습니다.
KH Kim
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.