생각이 담아두는 곳

1. 선형회귀분석 본문

CS/ML

1. 선형회귀분석

Chang_Tree 2020. 9. 3. 17:13

선형회귀분석이란 

독립변수와 종속변수 사이의 관계를 선형의 관계로 가정한 알고리즘이라고 볼 수 있다. 

 

 

위 사진에서 Y 가 종속변수, X 들이 독립변수라고 할 수 있다.

다만 여기서 독립변수들은 꼭 1차여야 하는 것이 아니다. 

단순하게, 양적입력값이 들어가거나 log 나 루트값이 들어가도 되고, n차도 가능하고, 두 변수 사이의 교호작용도 가능하고, 질적인 입력을 위한 dummy 값을 넣을 수도 있다.  

 

양적입력과 질적입력 차이: 

가령 예를 들면 우리가 종속변수를 과일의 종류라고 하고 독립변수에 빨강, 노랑, 녹색을 넣는다고 하면,

양적입력은 그대로 색깔을 넣는 경우가 있겠고, 질적입력은 (빨강, 노랑, 녹색) -> (1,0,0) = 빨강 이런식으로 입력을 하는 방법이 되겠다.

질적입력의 경우는 차이를 대수적으로 나타낼 수 있다.  

섞인 색깔이 없고 모든 형태를 빨강, 노랑, 녹색 3개 중 하나로만 구분한다고 했을 때, 바나나는 (0,1,0), 청포도는 (0,0,1) 로 될 것인데 이렇게 변환하는 것은 encoding이라고 하고, 이 경우, 변수 2개 이상이 활성화 되는 경우는 없기 때문에 one-hot encoding이라고 한다.

 

 

1. 단순회귀분석 

(x1, y1) , (x2, y2) .... (xn, yn) 의 관계를 위와 같은 선형식으로 표현할 수 있다고 생각하면 된다. 

뒤에 ei는 error term 으로 평균이 0이고 분산이 시그마 제곱인 정규분포를 따르며, (x,y) 를 구하거나 입력하는 과정에서 생길 수 있는 오차값이라고 보면 된다. (a와 다른 점은, n에 따라 ei는 달라지지만, 분석을 통해 얻은 a는 고정임) 

오차의 평균이 0인 이유는 계산하기 편해서인데, 만약 오차의 평균이 1이라면 a에서 보정을 해주고 평균을 0으로 만든다. 

 

 

단순선형회귀의 목적은 위와 같이 나오는 에러텀 제곱의 합을 최대한 줄이는 선형계수인 a와 b 를 구하는 것이다. 

실제값이 yi 인 것이고 우리의 예측값이 a+bxi 이 둘의 차가 아까 말한 에러텀 ei인 것이다. 

출처) 위키

다시 말해 그래프에서 해석을 해보자면, 빨간점과 파란실선의 y값의 차이가 에러 텀이라고 보면 되고, 우리의 목적은 기울기인 b와 y절편인 a를 바꿔 가며 가장 에러텀의 합을 줄이는 a,b를 찾는 것이다.  

 

여기서 왜 에러의 제곱의 합을 줄이는가? -> 에러텀은 당연히 음수일수도 있고 양수일 수도 있다. 전부 양수라면 합을 0으로 가깝게 하면 되지만 이처럼 대부분 양수와 음수 두 개의 값을 가질 수 있기 때문에 제곱의 합을 0으로 가깝게 하는 a,b를 찾는 것이다. 만약 합의 절댓값을 묻는다면, 양으로 엄청 큰 에러와 음으로 엄청 큰 에러가 만나면 0으로 가기 때문에 제곱의 합으로 보는 것이 가장 정확하다. 

 

 

 

위 식 D를 각각 a,b 로 편미분한 식

이렇게 저 D를 a와 b 로 각각 편미분해서 그 값들을 0으로 만드는 a,b를 구하면 그 때 a,b 의 값이 D를 최소로 만드는 a,b의 값이다. 

그 때가 최솟값인 이유는 다변수함수의 최솟값을 검색하면 자세히 알 수 있다. 여기서는 본질에 벗어나므로 생략한다. 

 

최솟값을 만드는 a,b 값을 a-hat 과 b-hat이라고 하면 식이 위와 같이 정리된다. 

 

m.blog.naver.com/PostView.nhn?blogId=lucifer246&logNo=194943742&proxyReferer=https:%2F%2Fwww.google.com%2F  

 

정규방정식으로 회귀계수 구하기-회귀분석

1.회귀직선의 방정식은 오차제곱합 SSE 가 최소가 되게 상수 a b를 구한다. 2. 정규방정식 구하기 를 a ...

blog.naver.com

->  정규방정식으로 회귀계수 구하는 법 

 

단순회귀분석의 가정은 아래와 같다. 

 

1. 두 변수 X와 Y 간의 관계가 직선관계이다. 

2. 오차들의 평균이 0이고 분산이 일정하다. 

3. 오차들의 분산이 같아야한다. 

4. 오차들이 서로 독립이어야 한다. (중요)

 

우선 회귀분석이 잘 되었는지 파악하기 위해, 어떻게 해야하나? 

아까 우리가 구했던 D, 즉 오차의 제곱의 합이 작으면 회귀분석이 잘되었다고 볼 수 있지만, 여기에는 맹점이 하나 있다. 

평균의 크기에 영향을 받는다. (정확하게 말하면 평균과 오차간의 관계)

두 표본공간 X1, X2에서 D가 각각 1로 나타내진다고 할 때, X1의 평균은 10, X2의 평균은 1000이라고 하면 그 오차의 합이 가지는 의미가 다르다는 것을 쉽게 알 수 있다.

 

또 다른 방법으로는 결정계수를 구히는 방법이 있다.

결정계수란 데이터들의 변동 중 회귀분석에 의해 설명되는 부분을 나타내며 결정계수가 클수록 회귀분석이 잘 되었다고 판단 할 수 있다. 

이것이 무슨 말이냐 하면 

 

 

회귀분석을 통해 얻은 직선식이 빨간색 실선이라고 하고, 실제 y값들의 평균이 보라색, x=4 일 때 y의 실측값이 파란색, 예측값이 녹색값이라고 해보자. 여기서 평균인 y값은 x=2 일 때 나타내지는데, x=4가 되면, 우리의 예측으로 벗어나는 y값이 1-> 2 지만, 실측값은 1-> 8이다. 

여기서 우리의 회귀분석으로 설명 가능한 1->2 를 회귀변동(SSR)이라고 부르고, 설명되지 않는 오차인 2->8 (1->2 제외) 을 잔차변동(SSE)이라고 한다. 

 

즉 , 결정계수란 전체변동(SST)에서 회귀변동이 차지 하는 비율을 뜻한다. 

여기서 식을 보면 SST = SSR+ SSE 인데 위 정의에 따르면 이상하다고 생각할 수 있지만, 아까 전 오차가 음수, 양수 일 때 신경 쓰지않고 계산하기 위해 제곱한 것을 변동으로 한다고 생각하면 된다. 

 

따라서 결정계수는 0과 1사이의 값을 갖게 되고, 이게 1에 가까울수록 회귀분석이 잘된 것이라고 볼 수 있다. 

 

다만 결정계수가 1에 가까운 큰 값을 갖는다고 해도 회귀분석이 잘 되었는지 판단하기 위해 잔차분석을 해야한다. 

 

잔차분석이란, x축을 y의 예측값으로 두고 y 축을 오차로 둔 산점도 그래프를 뜻한다. 

무작위성을 띄여야 하는데(아까 위 가정 4번인 오차가 서로 독립이어야 하므로) 위 그래프처럼 특정 형태를 보인다면 독립이 아니라는 셈이 된다. 

 

이런 경우는 변수를 변환한다던가, 독립변수를 추가하는 형식으로 회귀분석을 다시 해야 된다고 한다. 

 

예제는 아래와 같다. 위 그림들과 마찬가지지만 수업 자료에서 가져왔다. 

 

 

2. 다중회귀분석 

 

위에서 배웠던 단순회귀분석과 다르게 다중회귀분석은 입력변수(독립변수) 가 2개 이상인 경우를 뜻한다.

 

다중회귀분석의 경우, 계산의 편의성을 위해 위와 같이 행렬로 나타낸다. 식을 풀이하면 이해가 된다. 

마찬가지로 최적의 a, b 들을 구하기 위해 아래와 같이 오차 제곱의 합을 구한다. 

e'는 e의 transpose 를 의미한다. 

 

(y-Xb)' = y'-X'b'  

D를 0에 가깝게 하는 a,b를 구하기 위해 위 식을 b 에 대하여 미분한다. 위와 같은 방법을 최소제곱법이라고 한다. (정규방정식 풀이)

 

식에 대해 생각해보자면, 실측값은 y라 할 수 있고, 우리의 예측값은 Xb^ 이라고 할 수 있다. 

이 둘의 차가 에러텀 e가 되는데 우리의 목적은 ||e||의 크기를 0에 가깝게 만드는 것이다. (ee') 

y-Xb^ 을 0으로 만드는 b^의 값을 구하는 것으로

Xb^ = y 라 둘 수 있다. X는 열벡터라 할 수 있으므로, X'의 존재는 자명하다.

따라서 양변에 X'을 곱할 수 있다. 

X'X는 역행렬이 존재한다. (가정으로, 열벡터들이 일차독립이므로, full column rank 라)

 

따라서 b^ = (X'X)^X'y (편의상 역행렬은 ^ 으로 표기)

오차가 0으로 간다는 가정하에 b를 구할 수 있다.

 

 

다중회귀분석에서 결정계수는 단순회귀분석에서의 직선과 같이, 평면과의 거리로 구한다. (차원이 커지면 다른 형태)

아래는 마찬가지로 수업자료에서 가져왔다. 

 

여기서 X의 첫번째 열이 1인 이유는 다들 아시겠지만 , a^ 이 곱해져서 이다. 

 

여기서 b 가 우리가 구하는 실측값 Y, col(A)가 열벡터의 차원(X) 이다. 우리가 구하려는 b 가 위 그림에서는 x이다. 

직선 b에 대해서 Ax = b 를 만족하는 x 가 없으므로( 모든 A의 열벡터에 대해서) 이를 정사영 시켜 유사한 (최소제곱해) x-hat을 구한다. 이것이 다중회귀분석에서 최소제곱해가 오차의 제곱의 합을 가장 줄이는 해가 되는 이유이다. 

 

3. 곡선회귀분석(다항회귀분석)

 

결국 다중회귀분석과 같다.

 

다중공선성이란? 

설명변수(독립변수, input) 간의 상관계수가 높은 경우, 회귀계수의 값이 너무 커지는 문제. 

즉 다시 말해, 특정 설명변수가 다른 변수들의 일차결합으로 나타나지는 경우(열벡터간의 일차독립이 아님) 

교수님이 설명해주신 예시는 아래와 같다.

집의 가격이라는 지표를 예측하려고 하는데 주어진 변수들이 집의 크기와 방의 개수라고 하자.

다들 알다시피, 집의 크기가 클수록, 방의 개수가 많을수록 집의 가격은 비싸다.

다만 집의 크기가 크면, 방의 개수도 많을 확률이 높기 때문에 이 둘 변수간의 상관관계가 높다는 것이다. 이 경우, 회귀분석을 하게 되면 둘 중 하나로 나타나지는데,

1. 두 변수의 회귀계수가 무척이나 작게 나와, 유의미한 변수임에도 불구하고, 무의미하다고 판단하는 경우 

2. 집의 크기에 관한 회귀계수는 무척이나 크게, 방의 개수에 관한 회귀계수는 무척이나 작게 만들어 서로 상쇄되는 경우 

 

이런 문제도 다중공선성의 특징인데, 회귀계수의 변동성이 커져, 통계량과 모수가 서로 반대 부호를 가지는 경우다. 

이외에도  F-통계량은 크나, t- 통계량이 작으면 다중공선성이 있다고 판단할 수 있다고 한다. 

 

이러한 다중공선성이 있는지 판단하기 가장 일반적인 방법은 

분산 팽창 계수를 구하는 것이다. 

한 독립변수(집의 크기) 를 다른 독립변수(방의 개수 등등) 에 대해 회귀분석을 시행해, 아까 배운 결정계수를 구해본다. 이 값이 높게 나온다면 서로 독립적이지 않다는 말이 된다. 

 

 

즉, 결정계수가 커지면 커질수록, 분산팽창계수도 커지는 구조이다. 

 

이러한 다중공선성은 완전히 없애기는 어렵다. 

독립변수들간의 상관관계가 완전히 없는 경우가 드물어서 어느정도 존재하는게 일반적이다. 

 

없애는 것보다는 최소화 하는 방식으로 진행한다. 

 

방법으로는 크게 두가지가 있는데 

 

1. 변수선택 

여러 독립변수 중에, 특정 몇 개만 선택하는 방법(분산팽창계수 계산을 통해, 그나마 작은 값을 갖는 변수들로)

2. 변수추출(특성추출)

독립변수들을 조합해서(특정 특성들만 뽑아내어) 새로운 독립변수들을 만드는 방법

이 있다. 

 

1번 방법으로는 step-wise regression 이 있으면 forward selection방식과 backward elimination방식이 있다. 실습을 통해 자세히 알아본다. 

 

또는 OLS 추정치를 대신하는 방법으로(위에서 정규방정식을 통해 구한 해) 

1. Ridge regression 2. PCA 등의 방법이 있다. 추후에 서술한다. 

 

 

이에 대해서는 실습과 추후 글에 대해 자세히 알아보고, 우선 다중회귀분석 모델의 선택방법에 대해 알아본다. 

 

처음에 배웠던 단순회귀분석 모델의 경우, 결정계수와 잔차분석을 통해 모델을 결정했지만 다중회귀모델의 경우, 결정계수의 신뢰도가 떨어지므로(다중공선성의 문제) 다른 척도를 통해 알아본다. 

 

모델 선정 척도 = 적합 결핍 (Lack of fit) + 복잡도(complexity) 

둘 다 높으면 좋지만 둘의 관계는 trade-off이다.

결정계수는 적합 결핍을 설명해줄 수 있지만 복잡도는 설명해주지 못해 문제가 발생한다. (복잡도는 낮을수록, 즉 모델이 단순할수록 좋다)

아래와 같은 지표가 있다. 

 

p는 독립변수의 수, SSE는 아까 배운 오차의 제곱의 합인데, 일반적으로 p가 클수록, SSE는 작아진다고 한다. 

위 지표들을 보면, 두 가지를 고려해(SSE와 P 둘 다 작게) 만들어진 것을 볼 수 있다. 

 

 

모든 변수를 다 사용하기 때문에(위 계산을 떠올려 보면 알 수 있다.)

설명력에 대한 설명은 뭔가 난해하지만, 결국 독립변수를 전부 사용하지 않아도 되는데, 전부 사용해 오히려 복잡도만 높이고 모델의 설명력을 떨어뜨린다는 내용이다. 

 

이를 해결하기 위한 방법 첫번째 

변수가 10개가 있다고 하면 이 중 몇개를 선택할 지 정하고 (ex 6개) 6개의 변수를 조합할 수 있는 모든 경우를 계산해서 RSS 값이 가장 작은 모델을 선택하는 것이다.

당연하지만, 비용이 많이 든다.

따라서 완벽하지는 않지만 비용이 훨씬 적게 들고 최적의 해를 찾아가는 방법을 소개한다. 

 

 

 

Stepwise Selection의 경우, forward selection과 backward elimination을 반복한다고 보면 된다. 

 

RSS 값 으로만 보면 변수의 갯수가 8개일 때가 가장 적합한 모델이라고 보지만, 실제 상황에서는 뚝 떨어지는 부분인 k가 1,2 일 때를 선택한다. (RSS 값 차이가 크지 않으므로, 복잡도를 낮춘 모델을 선택)

 

위 그래프를 보면 모든 경우를 다 탐색하는 그리디한 best subset 방법이나 위에서 배운 forward 나 backward 방법의 퍼포먼스 측면에 있어 큰 차이가 없다는 것을 보여준다. 

 

선형회귀분석 1편은 이렇게 종료된다. 교수님께 감사를 드린다. 

회귀분석과 아까 말한 forward, backward, stepwise 방법에 대해 실습하는 글을 올릴 예정이다. 

Comments