[ML/DL] 선형 회귀분석
1. 회귀분석Permalink
- 종속변수 YY에 독립변수 XX가 얼마나 영향을 주는지에 대해 분석하는 것.
- 목적: XX가 주는 영향을 추정하고, 새로운 관측값 xx에 대해 YY를 잘 예측하고자 한다.
1) 선형 회귀분석 / 비선형 회귀분석Permalink
선형 회귀분석Permalink
- YY와 XX의 관계가 선형이라고 가정하고 분석한다.
- 비교적 단순하기 때문에 구하는 방법이 간단하다.
그대신 가정들이 많다.(오차의 등분산성, 정규성, 독립성 등) - 장점: 독립변수 XX가 YY에 미치는 영향을 해석하기 쉽다..
- 단점: 실제 데이터는 매우 복잡한 경우가 많아 적용하기에는 어려움이 있다.
비선형 회귀분석Permalink
- 실제 데이터들의 관계를 보면 선형인 경우는 거의 없기 때문에 이를 반영할 수 있는 분석들이 활발하게 연구되고 있다.
- 장점: 선형 회귀분석에 비해 실제 데이터를 더 잘 예측한다.
- 단점: 계산 과정이 매우 복잡하고 XX가 YY에 미치는 영향을 해석하기 어렵다.
2) 단순 선형 회귀분석 / 다중 선형 회귀분석Permalink
- 점이 모여서 선이 되고 선이 모여서 면이 되는 것처럼
단순 선형은 설명변수 1개(xx)의 조합으로 YY를 설명하기 때문에 선으로 표현되고,
다중 선형은 설명변수 예를 들어 2개(x1,x2x1,x2)의 조합으로 YY를 설명하기 때문에 면으로 표현된다. - 이때 다중 선형에서 설명변수들의 조합으로 이루어진 공간을 초평면(hyperplane)이라고 한다.
단순 선형 회귀분석Permalink
yi=b+axi+ϵi,ϵiiid∼N(0,σ2),i=1,2,⋯,nyi=b+axi+ϵi,ϵiiid∼N(0,σ2),i=1,2,⋯,n
- aa는 기울기(slope), bb는 yy 절편(intercept)를 의미한다.
다중 선형 회귀분석Permalink
yi=w0+w1xi1+w2xi2+⋯+wKxiK+ϵi,ϵiid∼N(0,σ2),i=1,2,⋯,nyi=w0+w1xi1+w2xi2+⋯+wKxiK+ϵi,ϵiid∼N(0,σ2),i=1,2,⋯,n
[y1 y2 ⋮ yn]=[1x11x12⋯x1K 1x21x22⋯x2K ⋮⋮⋱⋮ 1xn1xn2⋯xnK][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)
- 모수의 추정값이 a0,b0이라고 하자.
- 추정된 회귀식은 다음과 같다. ˆy=a0+b0x
- 모수 추정이 잘 됐는지 확인해야 한다. ⇒ 오차(e=y−ˆy) 이용
즉, 실제 y값과 예측한 y값의 차이가 작을수록 잘 추정이 되었다고 할 수 있다. - 우리는 오차의 크기에 관심이 있기 때문에 평균제곱오차(MSE, Mean Squared Error)를 이용한다.
평균제곱오차(MSE)
- Cost Function이라고 할 수 있다. MSE가 작을수록 잘 추정했다고 할 수 있다.
- 따라서 선형 회귀분석에서 모수 추정은 MSE를 최소화하는 모수를 찾는 것이 목표이다.
그렇다면 이제 어떻게 접근해야 할까?
설명변수가 한 개일 때Permalink
MSE(a,b)=1nn∑i=1(yi−(b+axi))2- b가 주어져 있다고 할 때, MSE는 a에 대한 이차식이고,
a가 주어져 있다고 할 때, MSE는 b에 대한 이차식이다.
편미분을 하면 다음과 같다.
(상수 2는 나중에 생략한다. 상수가 있든 없든 i=1,⋯,n의 오차 크기 순서가 변하지 않기 때문에)
의미 > ˆyi=b+axi일 때
- ∂MSE∂b : −(yi−ˆyi)들의 평균이다.
- ∂MSE∂a : −xi(yi−ˆyi)들의 평균이다.
설명변수가 K 개일 때Permalink
MSE(w0,w1,⋯,wK)=1nn∑i=1(yi−(w0+w1xi1+w2xi2+⋯+wKxiK))2편미분을 하면 다음과 같다.
의미 > $\hat{y}{i} = w_0 + w_1x{i1} + w_2x_{i2}+\cdots+w_kx_{iK}$ 일 때
- ∂MSE∂w0 : −(yi−ˆyi)들의 평균이다.
- ∂MSE∂wk,(k=1,⋯,K) : −xik(yi−ˆyi)들의 평균이다.
이를 이용해서 추정하는 방법은 대표적으로 2가지이다.
1) 경사하강법(Gradient Descent)Permalink
그럼 어떻게 자동으로 이동시킬까? ⇒ 기울기에 비례하게! 나도 설정할 수 있게!
- 기울기가 크다는 것은 아직 기울기가 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
설명변수가 한 개일 때Permalink
∂MSE∂a=21nn∑i−xi(yi−(b+axi))=0∂MSE∂b=21nn∑i−(yi−(b+axi))=0Result
b=ˉy−aˉx,a=n∑i=1(x−ˉx)(y−ˉy)n∑i=1(xi−ˉx)2증명(Click!)
(1) b 추정하기
21nn∑i=1−(yi−(b+axi))=0 1nn∑i=1(yi−b−axi)=0 b=1nn∑i=1(yi−axi) ∴b=ˉy−aˉx(2) a 추정하기
21nn∑i=1−xi(yi−(b+axi))=0 1nn∑i=1xi(yi−ˉy+ˉy−(b+axi−aˉx+a¯xi))=0 1nn∑i=1xi(yi−ˉy−a(xi−¯xi)−b+ˉy−a¯xi))=0 1nn∑i=1xi(yi−ˉy−a(xi−¯xi))=0(∵b=ˉy−aˉx) 1nn∑i=1(xi−ˉx)(yi−ˉy−a(xi−¯xi))=0(∵편차의 합은 0) a⋅1nn∑i=1(xi−ˉx)2=1nn∑i=1(yi−ˉy)(xi−ˉx) ∴a=n∑i=1(x−ˉx)(y−ˉy)n∑i=1(xi−ˉx)2설명변수가 K 개일 때 (행렬로 계산)Permalink
※ 행렬의 미분
- 스칼라 aTx 또는 xTa를 벡터 x로 미분하면 벡터 a
- 이차형식 xTAx를 벡터 x로 미분하면 행렬 (A+AT)x
- 벡터 Ax를 벡터 x로 미분하면 행렬 AT
행렬의 미분(상세)(Click!)
(1) 스칼라를 벡터로 미분: Output > 열 벡터
a=[a1a2],x=[x1x2]라고 하자.
f=aTx=xTa=a1x1+a2x2 ∂f∂x=[∂f∂x1 ∂f∂x2]=[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 ∂f∂x=[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] ∂f∂x=[∂f1∂x1∂f2∂x1 ∂f1∂x2∂f2∂x2]=[a11a21 a12a22]=ATReference
- 데이터 사이언스 스쿨, link: https://datascienceschool.net
댓글남기기