고차 다항식에 대한 계수가 큰 이유는 무엇입니까?


13

기계 학습에 관한 Bishop의 저서에서는 다항식 함수를 일련의 데이터 포인트에 곡선 맞춤하는 문제에 대해 설명합니다.

M을 다항식 차수로하자. 그 상태로

우리는 M이 증가함에 따라 계수의 크기가 일반적으로 커짐을 알 수 있습니다. 특히 M = 9 다항식의 경우 계수는 양의 양수 값과 음수 값을 개발하여 데이터에 맞게 미세 조정되어 해당 다항식 함수가 각 데이터 포인트와 정확하게 일치하지만 데이터 포인트 사이 (특히 범위)이 함수는 큰 진동을 나타냅니다.

큰 값이 데이터 요소에 더 가깝게 맞는 이유를 이해하지 못합니다. 더 나은 피팅을 위해 소수점 이하 값이 더 정확해질 것이라고 생각합니다.


이 책 은 에서 10 개의 동일 간격 점에서 x를 고려합니다 여기서 은 평균이 0이고 '소형'분산이있는 가우스입니다 (따라서 9 차원 다항식을 10 포인트 ...[ 0 , 1 ] ϵy=sin(2πx)+ϵ[0,1]ϵ
seanv507

답변:


18

이것은 Runge 현상 이라고 알려진 고차 다항식에서 잘 알려진 문제입니다 . 수치 적으로 이것은 Vandermonde 행렬잘못된 조건 과 관련이 있는데, 이로 인해 계수는 데이터의 작은 변동 및 / 또는 계산의 반올림에 매우 민감합니다 (즉, 모델을 안정적으로 식별 할 수 없음 ). SciComp SE 에서이 답변 을 참조하십시오 .

Chebyshev 근사 , 스무딩 스플라인Tikhonov 정규화 와 같은이 문제에 대한 많은 솔루션이 있습니다 . Tikhonov 정규화는 능선 회귀 의 일반화로 , 표준에 불이익을줍니다가중 행렬을 평활화하기 위해 계수 벡터 는 가 미분 연산자입니다. 진동을 처벌하기 위해 . 여기서 는 데이터에서 평가 된 다항식입니다.θ Λ Λ θ = p [ x ] p [ x ]||Λθ]||θΛΛθ=p[x]p[x]

편집 : 사용자 hxd1011의 대답은 수치 적 인 잘못된 조건 문제 중 일부는 직교 다항식을 사용하여 해결할 수 있다는 점을 지적합니다. 그러나 고차 다항식의 식별 가능성 문제는 여전히 남아 있습니다. 즉, 수치 적 불량 조건은 "무한"섭동 (예 : 반올림)에 대한 민감도와 관련이있는 반면, "통계적"부정 조건은 "유한"섭동에 대한 민감도 (예 : 이상치, 반대 문제는 잘못 제기 됨 )와 관련이 있습니다.

두 번째 단락에서 언급 한 방법은이 특이한 민감도 와 관련이 있습니다. 이 민감도를 표준 선형 회귀 모델을 위반하는 것으로 생각할 수 있습니다. 부정합 을 사용하면 암시 적으로 데이터가 가우스 인 것으로 가정합니다. 스플라인 및 Tikhonov 정규화는 맞춤 전에 매끄러움을 부과하여이 특이 치 감도를 처리합니다. 체비 쇼프 근사 는 데이터 영역 뿐만 아니라 연속 영역에 적용된 misfit 을 사용하여이를 처리합니다. Chebyshev 다항식은 직교 형이지만 (특정 가중치 내부 제품에는 가 데이터에 않을 경우 감도 가 여전히 이라고 생각 합니다.L L 2L2LL2


@ hxd1011 맞습니다. Chebyshev 다항식의 예를 들었습니다. 그러나 특이 치가 있고 데이터 불일치가 여전히 인 경우 직교 다항식은 실제로 실제로 문제를 해결 합니까? 나는 Runge 현상이 여전히이 경우 계수의 신뢰성 문제를 야기 할 것이라고 생각한다 (즉, 무한 반올림에 대한 데이터의 유한 / 대형 변동)L2
GeoMatt22

1
+1. 의견 에 좋은 . 스플라인 스무딩이 어떻게 작동하는지 연구하는 것은 눈을 뜨는 것입니다. p
Matthew Drury

1
이 "vandermonde 매트릭스의 잘못된 컨디셔닝"비즈니스에 대한 자세한 정보는 어디서 얻을 수 있습니까?
Matthew Drury

@ MatthewDrury 나는 일반적으로 hxd1011이 제안한 경험적 접근을합니다. 그러나 쿼리 후 빠른 Google은 관심이있을 수있는 최근 논문을 공개했습니다 : Vandermonde Matrices는 얼마나 나쁜가요? (VY Pan, 2015) . (DFT 행렬은 반데 몬드하지만 이유를 예를 들어 그는 해결 하지 나쁜 조건.)
GeoMatt22

@ GeoMatt22 감사합니다. Google을 통해 죄송하게 생각합니다. 개인적으로 좋아하는 소스가 있다고 생각합니다.
Matthew Drury

8

가장 먼저 확인하려는 것은 저자가 원시 다항식 대 직교 다항식에 대해 이야기하고 있는지 입니다.

직교 다항식의 경우. 계수가 "더 크게"얻지 않습니다.

다음은 2 차 및 15 차 다항식 확장의 두 가지 예입니다. 먼저 2 차 확장에 대한 계수를 보여줍니다.

summary(lm(mpg~poly(wt,2),mtcars))

Call:
lm(formula = mpg ~ poly(wt, 2), data = mtcars)

Residuals:
   Min     1Q Median     3Q    Max 
-3.483 -1.998 -0.773  1.462  6.238 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept)   20.0906     0.4686  42.877  < 2e-16 ***
poly(wt, 2)1 -29.1157     2.6506 -10.985 7.52e-12 ***
poly(wt, 2)2   8.6358     2.6506   3.258  0.00286 ** 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 2.651 on 29 degrees of freedom
Multiple R-squared:  0.8191,    Adjusted R-squared:  0.8066 
F-statistic: 65.64 on 2 and 29 DF,  p-value: 1.715e-11

그런 다음 15 번째 순서를 보여줍니다.

summary(lm(mpg~poly(wt,15),mtcars))

Call:
lm(formula = mpg ~ poly(wt, 15), data = mtcars)

Residuals:
    Min      1Q  Median      3Q     Max 
-5.3233 -0.4641  0.0072  0.6401  4.0394 

Coefficients:
               Estimate Std. Error t value Pr(>|t|)    
(Intercept)     20.0906     0.4551  44.147  < 2e-16 ***
poly(wt, 15)1  -29.1157     2.5743 -11.310 4.83e-09 ***
poly(wt, 15)2    8.6358     2.5743   3.355  0.00403 ** 
poly(wt, 15)3    0.2749     2.5743   0.107  0.91629    
poly(wt, 15)4   -1.7891     2.5743  -0.695  0.49705    
poly(wt, 15)5    1.8797     2.5743   0.730  0.47584    
poly(wt, 15)6   -2.8354     2.5743  -1.101  0.28702    
poly(wt, 15)7    2.5613     2.5743   0.995  0.33459    
poly(wt, 15)8    1.5772     2.5743   0.613  0.54872    
poly(wt, 15)9   -5.2412     2.5743  -2.036  0.05866 .  
poly(wt, 15)10  -2.4959     2.5743  -0.970  0.34672    
poly(wt, 15)11   2.5007     2.5743   0.971  0.34580    
poly(wt, 15)12   2.4263     2.5743   0.942  0.35996    
poly(wt, 15)13  -2.0134     2.5743  -0.782  0.44559    
poly(wt, 15)14   3.3994     2.5743   1.320  0.20525    
poly(wt, 15)15  -3.5161     2.5743  -1.366  0.19089    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 2.574 on 16 degrees of freedom
Multiple R-squared:  0.9058,    Adjusted R-squared:  0.8176 
F-statistic: 10.26 on 15 and 16 DF,  p-value: 1.558e-05

우리는 직교 다항식을 사용 하고 있기 때문에, 낮은 차수의 계수는 높은 차수의 결과에서 해당 항과 정확히 동일합니다. 예를 들어, 1 차의 절편과 계수는 두 모델 모두에서 20.09 및 -29.11입니다.

반면에 원시 확장을 사용하면 그러한 일이 발생하지 않습니다. 그리고 우리는 크고 민감한 계수를 가질 것입니다! 다음 예에서 계수는 약 수준에 있습니다.106

> summary(lm(mpg~poly(wt,15, raw=T),mtcars))

Call:
lm(formula = mpg ~ poly(wt, 15, raw = T), data = mtcars)

Residuals:
    Min      1Q  Median      3Q     Max 
-5.6217 -0.7544  0.0306  1.1678  5.4308 

Coefficients: (3 not defined because of singularities)
                          Estimate Std. Error t value Pr(>|t|)
(Intercept)              6.287e+05  9.991e+05   0.629    0.537
poly(wt, 15, raw = T)1  -2.713e+06  4.195e+06  -0.647    0.526
poly(wt, 15, raw = T)2   5.246e+06  7.893e+06   0.665    0.514
poly(wt, 15, raw = T)3  -6.001e+06  8.784e+06  -0.683    0.503
poly(wt, 15, raw = T)4   4.512e+06  6.427e+06   0.702    0.491
poly(wt, 15, raw = T)5  -2.340e+06  3.246e+06  -0.721    0.480
poly(wt, 15, raw = T)6   8.537e+05  1.154e+06   0.740    0.468
poly(wt, 15, raw = T)7  -2.184e+05  2.880e+05  -0.758    0.458
poly(wt, 15, raw = T)8   3.809e+04  4.910e+04   0.776    0.447
poly(wt, 15, raw = T)9  -4.212e+03  5.314e+03  -0.793    0.438
poly(wt, 15, raw = T)10  2.382e+02  2.947e+02   0.809    0.429
poly(wt, 15, raw = T)11         NA         NA      NA       NA
poly(wt, 15, raw = T)12 -5.642e-01  6.742e-01  -0.837    0.413
poly(wt, 15, raw = T)13         NA         NA      NA       NA
poly(wt, 15, raw = T)14         NA         NA      NA       NA
poly(wt, 15, raw = T)15  1.259e-04  1.447e-04   0.870    0.395

Residual standard error: 2.659 on 19 degrees of freedom
Multiple R-squared:  0.8807,    Adjusted R-squared:  0.8053 
F-statistic: 11.68 on 12 and 19 DF,  p-value: 2.362e-06

구문이 올바른지 확실하지 않지만 직교 v 원시의 결과와 다음 줄을 따라 다른 것을 summary(lm(mpg~poly(wt,2),mtcars)); summary(lm(mpg~poly(wt,5),mtcars)); summary(lm(mpg~ wt + I(wt^2),mtcars)); summary(lm(mpg~ wt + I(wt^2) + I(wt^3) + I(wt^4) + I(wt^5),mtcars))
비교해 보지 않겠습니까?

@AntoniParellada 좋은 제안, 나는 개정 할 것이다. BTW, 우리는 원시 확장을 쉽게 할 수 있습니다poly(x,2,raw=T)
Haitao Du

좋은 속임수 .. 그러면 당신은 15를 고수하고 할 수있을 것 같아요 summary(lm(mpg~poly(wt,15, raw=T),mtcars)). 계수의 대규모 효과!
Antoni Parellada

@ seanv507의 답변에 대한 의견은 다음에 대해 궁금해했습니다. 직교 다항식을 사용하고 이상 값에 대한 민감도를 줄이려면 표준 능선 회귀로 충분합니까? 아니면 고차 다진 다항식은 여전히 ​​가중치가 필요합니까? (후자는 예를 들어 DFT 매트릭스가 직교 적이라고 생각하지만, 고주파수를
낮추는

3

Abhishek, 계수의 정밀도를 높이면 정확도가 향상 될 것입니다.

우리는 M이 증가함에 따라 계수의 크기가 일반적으로 커짐을 알 수 있습니다. 특히 M = 9 다항식의 경우 계수는 양의 양수 값과 음수 값을 개발하여 데이터에 맞게 미세 조정되어 해당 다항식 함수가 각 데이터 포인트와 정확하게 일치하지만 데이터 포인트 사이 (특히 범위)이 함수는 큰 진동을 나타냅니다.

크기 문제는 제한된 데이터에 복잡한 모델을 사용하면 '과적 합 (overfitting)'으로 이어진다는 비숍의 전반적인 요점과는 관련이 없다고 생각합니다. 그의 예에서, 10 개의 데이터 포인트는 9 차원 다항식 (즉, 10 개의 변수 및 10 개의 미지수)을 추정하는데 사용된다.

사인파 (잡음 없음)를 피팅하면 다항식을 사용하여 사인파 (고정 간격)를 임의의 정확도로 근사 할 수 있으므로 피팅이 완벽하게 작동합니다. 그러나 주교의 예에서 우리는 맞지 않아야 할 일정한 양의 '소음'을 가지고 있습니다. 이를 수행하는 방법은 데이터 포인트 수를 모델 변수 (다항식 계수) 수로 크게 유지하거나 정규화를 사용하는 것입니다. (0,1)의 10dat 포인트에 9 차 다항식 적합

정규화는 모델 (예 : 릿지 회귀)에 '부드러운'구속 조건을 부과합니다. 최소화하려고하는 비용 함수는 '피팅 오류'와 모델 복잡성의 조합입니다. 예를 들어 릿지 회귀에서 복잡도는 이로 인해 오차를 줄이는 데 비용이 발생합니다. 계수를 늘리면 피팅 오차가 충분히 크게 줄어드는 경우에만 허용됩니다 (모델 복잡성 항의 승수로 얼마나 큰지가 지정된 경우). 따라서 적절한 승수를 선택하면 추가 개선 된 잡음 계수가 적합하지 않기 때문에 추가 소 노이즈 항에 적합하지 않기를 바랍니다.

왜 큰 계수가 피팅의 품질을 향상시키는 지 물었습니다. 본질적으로 그 이유는 추정 된 함수 (sin + noise)가 다항식이 아니며, 다항식으로 노이즈 효과를 근사화하는 데 필요한 곡률의 큰 변화는 큰 계수가 필요하기 때문입니다.

직교 다항식을 사용해도 아무런 효과가 없습니다 (직교와 원시 다항식이 서로 위에 있지 않도록 오프셋을 0.1로 추가했습니다)

require (penalized)
poly_order<-9
x_long<-seq(0,1, length.out = 100)
nx<-10
x<-seq(0,1, length.out = nx)
noise<- rnorm(nx, 0, 1)
noise_scale<-0.2
y<-sin(2*pi*x)+noise_scale*noise

training_data<-data.frame(x=x,y=y)
y_long<-sin(2*pi*x_long)

plot(x,y, col ='blue',ylim=c(-1.5,1.5))
lines(x_long,y_long,col='green')

polyfit_raw<-lm(y~poly(x,poly_order,raw=TRUE),data=training_data)
summary(polyfit_raw)

polyfit_raw_ridge1<-penalized(y,~poly(x,poly_order,raw=TRUE), model='linear', data=training_data, lambda2=0.0001, maxiter=10000, standardize=TRUE)

polyfit_orthog<-lm(y~poly(x,poly_order),data=training_data)
summary(polyfit_orthog)

pred_raw<-predict(polyfit_raw,data.frame(x=x_long))
pred_ortho<-predict(polyfit_orthog,data.frame(x=x_long))
pred_raw_ridge<-predict(polyfit_raw_ridge1,data=data.frame(x=x_long))[,'mu']
lines(x_long,pred_raw,col='red')
# add 0.1 offset to make visible
lines(x_long,pred_ortho+0.1,col='black')
lines(x_long,pred_raw_ridge,col='purple')
legend("bottomleft",legend=c('data sin(2 pi x) + noise','sin(2 pi x)', 
                             'raw poly','orthog poly +0.1 offset','raw poly + ridge regression'),
       fill=c('blue','green','red','black','purple'))
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.