1. 단순 선형 회귀
단순 선형회귀는 학창시절 배웠던 1차 함수와 비슷하다고 생각하시면 됩니다.
$$ Y = \beta_1 x_1 + \beta_0 $$
$$ Y = ax + b $$
둘을 비교해보면 간단합니다.
앞으로는 기호들을 아래와 같이 부를 예정입니다.
$$ \cdot\, \beta_0 : 절편(intercept) $$
$$ \cdot\, \beta_1 : 기울기(coefficient)$$
단순 선형 회귀는 독립 변수(x)가 1개, 종속 변수(y)도 1개 입니다.
2. 다중 선형 회귀
다중 선형 회귀는 독립 변수(x)가 여러(n)개, 종속 변수(y)는 1개 입니다.
$$ Y = \beta_n x_n + \cdots + \beta_1 x_1 + \beta_0 $$
위와 같은 모양으로 생겼습니다!
0을 제외한 나머지는 수들은 각각의 변수에 대한 기울기라고 생각하시면 됩니다!
3. 선형 회귀의 4가지 가정
항목 | 내용 |
선형성 (Linearity) | 독립 변수와 종속 변수는 선형 관계여야 합니다. |
독립성 (Independence) | 각각의 변수들은 독립이어야합니다(다중 선형에서 특히 중요) |
등분산성 (Homoscedasticity) | 각각의 관측치들은 분산이 일정해야합니다. |
정규성 (Normality) | 각각의 관측치들은 정규분포를 따라야합니다! |
4. 선형 회귀 모델의 평가 지표
- r2 score(r2 square,결정계수)
- MAE (Mean Absolute Error)
- MSE (Mean Square Error)
다른 지표들도 있지만 위의 3가지를 대표적으로 설명하겠습니다.
R2 Score(결정 계수)
r2 score에 대해 설명하기 전에 SST,SSR,SSE 에 대해 설명하겠습니다
변수에 대한 설명을 통해 수식을 해석해보세요!
$$ \cdot n : 데이터의 갯수 $$
$$ \cdot Y_i : 실제값 $$
$$ \cdot \bar{Y} : 실제\,값의\,평균 $$
$$ \cdot \hat{Y_i} : 모델이\,예측한\,값 $$
이름 | 수식 및 내용 |
SST (Total Sum of Squares) | $$ SST = \sum_{i = 0}^{n}{(Y_i - \bar{Y})^2} $$ |
SSE (Error Sum of Squares) | $$ SSE = \sum_{i = 0}^{n}{(Y_i - \hat{Y_i})^2} $$ |
SSR (Regression Sum of Squares) | $$ SSR = \sum_{i = 0}^{n}{(\hat{Y_i} - \bar{Y})^2} $$ |
위의 식들을 통해 결정계수를 설명할 수 있습니다.
하나 새로운 점은
$$ SST = SSE + SSR $$
이라는 점입니다. 이해가 잘 안되실 것 같아서 그래프를 준비해왔습니다!
1,2번 그래프를 합친 그래프가 바로 3번이 됩니다!! 오 신기하죠?? 저도... 조금 신기함...
결정 계수에 대한 계산법
$$ R^2 = \frac{SSR}{SST} = 1 - \frac{SSE}{SST} $$
MSE (Mean Squared Error)
자유도에 신경쓰지 않고 간단하게 표현하면
$$ MSE = \frac{SSE}{n} $$
라고 할 수 있지만 정확한 수식을 이해하고 가는 것이 중요하다고 생각합니다.
$$ MSE = \frac{1}{n} \sum_{i = 0}^{n}{(Y_i - \hat{Y_i})^2} $$
MAE(Mean Absolute Error)
MSE는 제곱을 해줬다면 MAE는 절댓값을 씌워준다는 느낌으로 생각하면 됩니다!
$$ MAE = \frac{1}{n} \sum_{i=0}^{n}{\vert Y_i - \hat{Y_1}\vert}$$
5. 코드 리뷰
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.metrics import *
# 데이터 생성
X = np.array([1, 2, 3, 4, 5]).reshape(-1, 1)
y = np.array([3, 5.1, 9.0, 12.1, 15.3])
# 모델 학습
model = LinearRegression()
model.fit(X, y)
# 예측
y_pred = model.predict(X)
# 결과 시각화
plt.scatter(X, y, color='blue', label='Actual')
plt.plot(X, y_pred, color='red', label='Prediction')
plt.legend()
plt.show()
# 평가
print("MSE:", mean_squared_error(y, y_pred))
print("MAE:", mean_absolute_error(y, y_pred))
print("R²:", model.score(X, y))
print("기울기 :",model.coef_)
print("절편 :",model.intercept_)
실제로 코드를 작성해보면 위와 같이 작성 됩니다!!
파란색 점은 실제 값이고 빨간 색 선이 저희가 예측한 모델입니다!!
WOW!
결과들도 아래 처럼 나왔네요!!
오늘 적으면서 느끼는 점!
오늘부터 하나씩 차근차근 적기로 했습니다.
제가 아는 내용을 토대로 적으면서 다시 정리하는 느낌!
이렇게 적으면 언젠가 도움이 되겠죠! 저한테도 그리고 읽어주시는 여러분한테도!!
앞으로 꾸준히 작성하겠습니다!!
'[데이터 분석가] > [머신러닝,딥러닝]' 카테고리의 다른 글
로지스틱 회귀(Logistic Regression) (0) | 2025.01.23 |
---|---|
서포트 벡터 머신 (Support Vector Machine) (0) | 2025.01.22 |
선형 회귀 (릿지, 라쏘, 엘라스틱 넷) (0) | 2025.01.21 |