1. 회귀분석Permalink

  • 종속변수 YY에 독립변수 XX가 얼마나 영향을 주는지에 대해 분석하는 것.
  • 목적: XX가 주는 영향을 추정하고, 새로운 관측값 xx에 대해 YY를 잘 예측하고자 한다.

1) 선형 회귀분석 / 비선형 회귀분석Permalink

선형 회귀분석Permalink

  • YYXX의 관계가 선형이라고 가정하고 분석한다.
  • 비교적 단순하기 때문에 구하는 방법이 간단하다.
    그대신 가정들이 많다.(오차의 등분산성, 정규성, 독립성 등)
  • 장점: 독립변수 XXYY에 미치는 영향을 해석하기 쉽다..
  • 단점: 실제 데이터는 매우 복잡한 경우가 많아 적용하기에는 어려움이 있다.

비선형 회귀분석Permalink

  • 실제 데이터들의 관계를 보면 선형인 경우는 거의 없기 때문에 이를 반영할 수 있는 분석들이 활발하게 연구되고 있다.
  • 장점: 선형 회귀분석에 비해 실제 데이터를 더 잘 예측한다.
  • 단점: 계산 과정이 매우 복잡하고 XXYY에 미치는 영향을 해석하기 어렵다.

2) 단순 선형 회귀분석 / 다중 선형 회귀분석Permalink

  • 점이 모여서 선이 되고 선이 모여서 면이 되는 것처럼
    단순 선형은 설명변수 1개(xx)의 조합으로 YY를 설명하기 때문에 선으로 표현되고,
    다중 선형은 설명변수 예를 들어 2개(x1,x2x1,x2)의 조합으로 YY를 설명하기 때문에 면으로 표현된다.
  • 이때 다중 선형에서 설명변수들의 조합으로 이루어진 공간을 초평면(hyperplane)이라고 한다.

단순 선형 회귀분석Permalink

yi=b+axi+ϵi,ϵiiidN(0,σ2),i=1,2,,nyi=b+axi+ϵi,ϵiiidN(0,σ2),i=1,2,,n

  • aa는 기울기(slope), bbyy 절편(intercept)를 의미한다.

다중 선형 회귀분석Permalink

yi=w0+w1xi1+w2xi2++wKxiK+ϵi,ϵiidN(0,σ2),i=1,2,,nyi=w0+w1xi1+w2xi2++wKxiK+ϵi,ϵiidN(0,σ2),i=1,2,,n

[y1 y2  yn]=[1x11x12x1K 1x21x22x2K  1xn1xn2xnK][w0 w1  wK]+[ϵ1 ϵ2  ϵn]
  • 행렬로 나타내면 Y=Xw가 되고,
    행렬의 크기는 (n×1)=(n×(K+1))((K+1)×1)+(n×1)가 된다.
  • w1,w2,wK는 각 설명변수들(x1,x2,,xK)가 Y에 미치는 영향에 대한 크기를 의미한다.
    이를 가중치(weight)라고도 부른다.

2. 모수 추정Permalink

단순 선형으로 예를 들어보자. 추정해야할 모수는 2개이다.(a,b)

  1. 모수의 추정값이 a0,b0이라고 하자.
  2. 추정된 회귀식은 다음과 같다. ˆy=a0+b0x
  3. 모수 추정이 잘 됐는지 확인해야 한다. 오차(e=yˆy) 이용
    즉, 실제 y값과 예측한 y값의 차이가 작을수록 잘 추정이 되었다고 할 수 있다.
  4. 우리는 오차의 크기에 관심이 있기 때문에 평균제곱오차(MSE, Mean Squared Error)를 이용한다.
MSE=1nni=1(yiˆy)2=1nni=1(yi(b+axi))2

평균제곱오차(MSE)

  • Cost Function이라고 할 수 있다. MSE가 작을수록 잘 추정했다고 할 수 있다.
  • 따라서 선형 회귀분석에서 모수 추정은 MSE를 최소화하는 모수를 찾는 것이 목표이다.

그렇다면 이제 어떻게 접근해야 할까?

IDEA! MSE의 식이 모수에 대한 이차식이니까 기울기가 0인 곳이 최소값이 되지 않을까?

설명변수가 한 개일 때Permalink

MSE(a,b)=1nni=1(yi(b+axi))2
  • b가 주어져 있다고 할 때, MSE는 a에 대한 이차식이고,
    a가 주어져 있다고 할 때, MSE는 b에 대한 이차식이다.

편미분을 하면 다음과 같다.
(상수 2는 나중에 생략한다. 상수가 있든 없든 i=1,,n의 오차 크기 순서가 변하지 않기 때문에)

MSEb=21nni(yi(b+axi)) MSEa=21nnixi(yi(b+axi))

의미 > ˆyi=b+axi일 때

  • MSEb : (yiˆyi)들의 평균이다.
  • MSEa : xi(yiˆyi)들의 평균이다.

설명변수가 K 개일 때Permalink

MSE(w0,w1,,wK)=1nni=1(yi(w0+w1xi1+w2xi2++wKxiK))2

편미분을 하면 다음과 같다.

MSEw0=21nni(yi(w0+w1xi1+w2xi2++wkxiK)) MSEw1=21nnixi1(yi(w0+w1xi1+w2xi2++wkxiK)) MSEw2=21nnixi2(yi(w0+w1xi1+w2xi2++wkxiK))  MSEwK=21nnixiK(yi(w0+w1xi1+w2xi2++wkxiK))

의미 > $\hat{y}{i} = w_0 + w_1x{i1} + w_2x_{i2}+\cdots+w_kx_{iK}$ 일 때

  • MSEw0 : (yiˆyi)들의 평균이다.
  • MSEwk,(k=1,,K) : xik(yiˆyi)들의 평균이다.

이를 이용해서 추정하는 방법은 대표적으로 2가지이다.

1) 경사하강법(Gradient Descent)Permalink

IDEA! 기울기가 0이 될 때까지 계속 반복하면서 이동해보자.

그럼 어떻게 자동으로 이동시킬까? 기울기에 비례하게! 나도 설정할 수 있게!

  • 기울기가 크다는 것은 아직 기울기가 0인 곳까지 도착하려면 멀었다는 의미 크게 움직이자.
  • 기울기가 작다는 것은 곧 기울기가 0인 곳에 도착한다는 의미 작게 움직이자.
  • 나도 움직임의 크기에 영향을 주고 싶다. 학습률(learning rate) 등장

(학습률×기울기)만큼 움직이자!

  • 기울기가 +이면(A) 왼쪽(-)으로 이동
  • 기울기가 -이면(B) 오른쪽(+)으로 이동

a = a - lr * (a일 때 기울기), b = b - lr * (b일 때 기울기)

STEP 1. 반복 횟수(epochs), 학습률(learning rate)과 초기값 a,b를 설정한다.
STEP 2. 예측값(ˆy)을 계산한다. ˆyi=b+axi
STEP 3. MSE를 계산한다. MSE=(yˆy)2
STEP 4. MSE의 기울기 값을 계산한다.
STEP 5. 새로운 a, b를 업데이트 한다.
STEP 6. STEP2 ~ STEP5을 epochs 만큼 반복

2) 최소제곱법(Least Square Method)Permalink

IDEA! 기울기를 0이라고 할 때 모수 값을 계산해보자.

설명변수가 한 개일 때Permalink

MSEa=21nnixi(yi(b+axi))=0MSEb=21nni(yi(b+axi))=0

Result

b=ˉyaˉx,a=ni=1(xˉx)(yˉy)ni=1(xiˉx)2
증명(Click!)

(1) b 추정하기

21nni=1(yi(b+axi))=0 1nni=1(yibaxi)=0 b=1nni=1(yiaxi) b=ˉyaˉx

(2) a 추정하기

21nni=1xi(yi(b+axi))=0 1nni=1xi(yiˉy+ˉy(b+axiaˉx+a¯xi))=0 1nni=1xi(yiˉya(xi¯xi)b+ˉya¯xi))=0 1nni=1xi(yiˉya(xi¯xi))=0(b=ˉyaˉx) 1nni=1(xiˉx)(yiˉya(xi¯xi))=0(편차의 합은 0) a1nni=1(xiˉx)2=1nni=1(yiˉy)(xiˉx) a=ni=1(xˉx)(yˉy)ni=1(xiˉx)2

설명변수가 K 개일 때 (행렬로 계산)Permalink

※ 행렬의 미분

  1. 스칼라 aTx 또는 xTa를 벡터 x로 미분하면 벡터 a
  2. 이차형식 xTAx를 벡터 x로 미분하면 행렬 (A+AT)x
  3. 벡터 Ax를 벡터 x로 미분하면 행렬 AT
행렬의 미분(상세)(Click!)

(1) 스칼라를 벡터로 미분: Output > 열 벡터

a=[a1a2],x=[x1x2]라고 하자.

f=aTx=xTa=a1x1+a2x2 fx=[fx1 fx2]=[a1 a2]=a

(2) 이차형식을 벡터로 미분: Output > 행렬

A=[a11a12a21a22],x=[x1x2]라고 하자.

f=xTAx=[x1x2][a11a12 a21a22][x1 x2] =[a11x1+a21x2a12x1+a22x2][x1 x2] =a11x21+a21x1x2+a12x1x2+a22x22 fx=[2a11x1+a21x2+a12x2 a21x1+a12x1+2a22x2]=[a11x1+a12x2+a11x1+a21x2 a21x1+a22x2+a12x1+a22x2] =([a11a12 a21a22]+[a11a12 a21a22])[x1 x2]=(A+AT)x

(3) 벡터를 벡터로 미분: Output > 행렬

A=[a11a12a21a22],x=[x1x2]라고 하자.

f=Ax=[f1 f2]=[a11x1+a12x2 a21x1+a22x2] fx=[f1x1f2x1 f1x2f2x2]=[a11a21 a12a22]=AT
MSE=(yXw)T(yXw) =(yTwTXT)(yXw) =yTywTXTyyTXw+wTXTXw =yTy2yTXw+wTXTXw(wTXTy는 스칼라이므로 전치행렬의 의미가 없다.) =yTy(XTy)Tw+wTXTXw MSEw=2XTy+2XTXw=0 w=(XTX)1XTy

Reference

댓글남기기