Machine Learning/기초 개념

[머신 러닝] 선형 회귀

꿈을 파는 두더지 2024. 7. 7. 14:51

선형 회귀 (linear regression) 이란

어떤 독립 변수와 종속 변수들과의 관계를 선형 관계 (1차 함수)로 가정해서 모델링하는 지도학습 알고리즘이다.
그리고 변수의 개수에 따라 단순 선형 회귀, 다중 선형 회귀로 분류할 수 있다.
아래의 식은 Linear Regression 선형 관계식의 기본형이다.
$$ y = \beta_{0} + \beta_{1} x_{1} + \beta_{2} x_{2} + \epsilon $$

y: 종속 변수, βk :회귀 계수, Xk:독립 변수, ε: 오차항(모델으로 설명할 수 없는 부분)
X1까지만 존재하면, 단순 선형 회귀 분석이라 할 수 있다.

 

Linear Regression의 Residual(잔차)

종속 변수는 관찰의 결과에서 나오는 확률 변수이다. 이에 오차를 포함한다.
linear regression은 오차를 잔차(residual)의 개념을 사용하여 표현한다.
여기서 잔차란, 표본 집단으로 학습된 모델의 예측 값과 실제 관측값 사이의 차이이다.
이때, iid (독립 항등 분포)를 따르기 때문에 모든 각 확률 변수들이나 데이터 포인터들이 독립적이라는 것을 가정하고 진행한다.

 

RSS (잔차 제곱의 합) 의 도입

선형 회귀에 대해 모델 추청을 하기 위해서 잔차 제곱의 합 (RSS)이라는 개념을 도입한다.
RSS는 데이터와 추정 모델 사이의 불일치를 측정하는 지표로 사용된다.
RSS 값이 작으면 회귀 모델이 데이터에 잘 부합한다는 의미이다.


Residual Sum of Squares (RSS) = Sum of Squared Residuals (SSR) = Sum of Squared estimate of Error (SSE)로,
세 개 다 같은 의미를 표현한다. -> RSS = SSE = SSR (Sum of Squares)

잔차의 합이 아닌 잔차제곱합으로 구하는 이유는 잔차의 합이 0이 되는 경우는 유일하지 않으며, 잔차의 절대값의 합은 미분이 불가능하기 때문에 잔차 제곱의 합을 도입하여 미분 가능한 형태로 만들었다고 한다.

 

Linear Regression 학습

선형 회귀에서는 RSS가 다음과 같이 표현된다.

n : 데이터 포인트의 총 개수 / yi : i번째 데이터 포인트의 실제 값 / xi : i번째 데이터 포인트의 독립 변수 값
W0, W1 : 모델의 가중치, 각각 절편과 기울기를 나타낸다. (결정 계수라고 한다.)

결정 계수는 회귀 분석에서 실제 데이터를 잘 예측하는지 나타내는 지표이므로 잘 인지하고 있어야 한다.

 

Linear Regression 실습

공부 시간에 따른 시험 점수에 대한 데이터를 파이썬 코드로 표현해보자.

import matplotlib.pyplot as plt
import pandas as pd

dataset = pd.read_csv('LinearRegressionData.csv')

dataset.head()

X = dataset.iloc[:, :-1].values # 처음부터 마지막 컬럼 직전까지의 데이터 (독립 변수 - 원인)
y = dataset.iloc[:, -1].values # 마지막 컬럼 데이터 (종속 변수 - 결과)

X, y

데이터셋 출력

 

from sklearn.linear_model import LinearRegression
reg = LinearRegression() # 객체 생성
reg.fit(X, y) # 학습 (모델 생성)

y_pred = reg.predict(X) # X 에 대한 예측 값
y_pred

linear regression 모델에 학습 후 예측값 표현

 

plt.scatter(X, y, color='blue') # 산점도
plt.plot(X, y_pred, color='green') # 선 그래프
plt.title('Score by hours') # 제목
plt.xlabel('hours') # X 축 이름
plt.ylabel('score') # Y 축 이름
plt.show()

선형 회귀 그래프 표현

 

번외 : scikit learn

우리가 모든 알고리즘을 짤 필요 없이 scikit learn이라는 툴을 이용하여 회귀 모델을 만들어낼 수 있었다.
심화 학습 이후에는 처음부터 논리대로 알고리즘을 구현해보도록 하겠다.

 

[Machine Learning] 사이킷런(sklearn) - 기초

머신러닝 중 사이킷런(sklearn)을 배우고 기본 예제를 실행해보았습니다.

velog.io

 

참고 문헌

https://devhwi.tistory.com/13

https://wikidocs.net/235825

https://dsbook.tistory.com/17