Data science

선형 회귀 모델 + 다중 선형 회귀 개념 정리 및 실습 w.Colab

리밋T 2022. 4. 26. 08:00
반응형

지난 글에서 살펴본 것과 같이, 머신러닝 학습 종류에는 지도학습, 비지도학습, 강화학습 등이 있다.

2022.04.25 - [Data science] - 머신러닝이 뭐지? 3분 안에 정리하는 기초 개념

 

 선형회귀의 개념

그 중 선형회귀는 지도학습의 대표적인 예시로, 레이블(정답)이 있는 데이터를 가지고 학습하는 지도학습의 대표적인 예시로, 가장 자주 쓰이는 모델이다.

회귀는, 연속적인 값을 예측할 때 쓰이며, 평균으로 돌아간다는 뜻을 가지고 있다.

 

좌측의 그래프가 데이터 위치라고 생각했을 때, 데이터들을 잘 설명하기 위해서는 우측과 같이 y=x 그래프를 그려야 할 것이다. 이렇게 데이터를 대표할 수 있는 그래프를 그려야 하는 것을 직관적으로 알 수 있다.

회귀분석은 이렇게 점들을 가장 잘 대변하도록 직선을 긋고 그 모습을 찾는 것이라 생각하면 된다.

 

위와 같은 붉은 직선, 즉 그래프를 우리는 y=ax+b의 형태로 배웠다. a는 기울기, b는 절편으로 말이다.

이를 머신러닝에서는 H(x)=Wx+b 형태로 표현한다. 이 때 H는 가설을 의미한다.

우측 그래프의 오른쪽 상단을 확대하여 살펴보자.

이렇게 데이터를 대표할 수 있는 그래프를 그린 후에는 , 데이터와 이 선과의 차이점을 확인해야 한다. 이 차이를 잔차라고 하며, H(x)에서 y를 빼면 각각 음수와 양수가 나올테니 제곱을 해준다. 이를 MSE라고 한다.

MSE는 평균제곱차이라 n으로 나눠지며, 이는 비용함수라는 개념에 활용된다.

cost(W) = 비용함수란 ? 가설이 얼마나 잘 맞는지 검토하기 위해 사용하는 함수이다.

선형 회귀분석의 목적은 "회귀식에서 MSE를 통해 가장 적합한 W와 b를 찾는 것"이다.

MSE를 함수로 표현하면 아래와 같은 2차함수가 될 것이다.

 

우리는 이 비용함수의 값이 최소가 되게 하는 W와 b를 찾는 것이 가장 중요하다. 그래서 경사하강법을 사용한다.

경사하강법이란, 임의로 W값을 하나 선정한 다음, 최적의 w값을 찾아가는 것이다.

비용함수를 W에 대해서 편미분해준 것에, 학습률이라 불리는 a를 mse에 곱해서 , W에서 빼주면 되는데, 이렇게 W에 대해 편미분을 해주면 현재 W위치에서의 접선의 기울기가 나오기 때문에, 최소값을 찾을 때까지 그만두게 한다. 이런 접선의 기울기가 0이 될 때가 최적의 W값이 될 것임을 직관적으로 알 수 있다.

 

 

 

 

경사하강법을 사용할 때의 주의점이 있는데, 학습률(Learning rate) 알파값 a은 경사하강법에서 W값의 이동 보폭에 영향을 미친다. a가 너무 작으면 W값의 이동 보폭이 작게, 조금씩 이동하므로 시간이 오래 걸리며, 반면 알파값 a가 너무 크면 한 번에 W값이 너무 많이 움직이므로 최적의 값을 지나치는 경우가 있다.

그래서 Learning rate를 잘 설정해주어야 한다.

또 하나의 주의점으로, Local minimum과 Global minimum이 있다.

 

경사하강법의 단점은 그래프 전체가 아니라 특정 W값에서 시작을 하므로, 2차함수가 아닌 4차함수 이상으로 가버리면 그래프 전체의 최소점이 아니라 자신이 시작했던 W값에서부터 기울기가 0이 되는 값, 즉 로컬 미니멈만을 찾게 된다. 위의 그래프에서는 좌측 체크에 해당하는 지점일 것이다.

이렇게는 우측의 진짜 최소점인 글로벌 미니멈을 찾을 수 없게 될 것이므로, 이를 염두에 두고 사용하여야 한다.

W와 b는 같은 방법으로 최적의 값을 찾을 수 있다.

 

 다중선형회귀

 

앞에서 살펴본 건 단순선형회귀이다. 즉, y에 영향을 미치는 x값이 하나라는 뜻인데, 실제로는 y에 영향을 미치는 변수, 즉 x값이 하나가 아니라 여러개인 경우가 더 많을 것이다. 수식으로 살펴보면 그 차이를 간단하게 이해할 수 있다.

단순선형회귀 : H(x) = Wx+b

다중선형회귀 : H(x1,x2) = w1x1+w2x2+b

단순선형회귀에서 최적의 cost function을 찾기 위해 경사하강법을 이용한 것처럼 다중선형회귀에서도 동일한 방법을 이용할 수 있다.

다중선형회귀에서 유의할 점은, 실제 데이터 분석 시 모든 변수를 다 투입하지는 않으므로 데이터를 골라내는 것도 큰 작업 중에 하나라는 것인데, 시각화로도 데이터를 추려낼 수 있고, PCA나 상관관계분석 등으로 어떤 데이터를 추출해서 사용할지 선택할 수 있으며 전진선택법과 후진선택법도 많이 이용되는 편이다.

전진선택법은 x가 없는 상수모형부터 시작해서 중요하다고 생각되는 설명변수부터 하나씩 추가하는 것이고, 후진제거법은 반대로 가장 덜 영향을 준다고 생각하는 변수를 전체에서 1개씩 제외해나가는 것이다.


현재 공부하고 있는 강의의 강사님은 코랩google colaboratory(colab)을 추천하신다. 원래는 주로 파이썬으로 돌릴 때 주피터노트북을 많이 쓰는데, 코랩은 별도의 파이썬 설치 없이 tensorflow 등 많이 사용하는 라이브러리가 많이 설치되어있고, 무엇보다 GPU를 사용할 수 있다는 장점이 있어 딥러닝 시에 유용하게 활용할 수 있다고 한다.

코랩 사용법은 어이없을 정도로 간단하다.

Gmail 계정에 로그인된 상태에서, 크롬으로 아래와 같이 Colab을 검색하여 접속하면 끝이다.

 

아래 새 노트를 클릭하면 주피터 노트북과 같은 화면이 생성된다.

실행법도 주피터 노트북처럼 한 줄씩 shift+enter로 실행이 가능하다.

!python --version으로 파이썬 버전 확인 후,

런타임-런타임 유형 변경을 선택하면 '하드웨어 가속기'에서 GPU를 선택할 수 있다. TPU는 데이터분석용 하드웨어이나 GPU로도 충분하다고 한다.

import numpy as np
data=[1,2,3,5]
arr= np.array(data)
arr.shape
arr.dtype
np.zeros((10,2))

 

import pandas as pd
import matplotlib.pyplot as plt
a=np.array([5,10,15,20])
b=np.array([15,20,34,50])
result=pd.DataFrame({
    "A":a,
    "B":b
})
result

plt.plot(a,b,'o')

# 선형회귀 실습 코드 : x값이 하나인 선형회귀
height = np.array([183,150,180,197,160,175])
height=height.reshape(-1,1) #2차원값이 들어가야 해서
math=np.array([85,45,80,99,45,75])

from sklearn.linear_model import LinearRegression
line_fitter = LinearRegression()
line_fitter.fit(height,math)

# line_fitter.coef_ : 기울기 저장
# line_fitter.intercept_ : 절편을 저장

score_predict = line_fitter.predict(height) #키를 가지고 예측하겠다
plt.plot(height,math,'x')
plt.plot(height, score_predict)
plt.show()

 

아래는 간단하므로 캡쳐로 첨부해둔다.

이 때, EOF 에러(괄호 실수)가 나기 쉬우므로 주의하자.

반응형