선형회귀 완전 정복: 수학 공식 vs 경사하강법 비교

2025. 7. 1. 17:29Python(AI)

선형회귀 모델을 활용한 최적의 가중치(w), 절편(b) 찾기

1. 데이터 준비

pandas, numpy, matplotlib 등 필수 라이브러리를 불러온 후, 공부 시간과 성적 데이터를 기반으로 데이터프레임을 생성한다.

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

data = pd.DataFrame(
    [[2, 20], [4, 40], [8, 80], [9, 90]],
    index=["은유", "자영", "지희", "영화"],
    columns=["시간", "성적"]
)

2. 수학 공식을 통해 선형 회귀 모델로 최적의 w, b 구하기

sklearn의 LinearRegression을 사용하여 수학적으로 최적의 직선의 기울기(w)와 절편(b)를 계산한다.

from sklearn.linear_model import LinearRegression

linear_model = LinearRegression()
linear_model.fit(data[["시간"]], data["성적"])

print(f'가중치 : {linear_model.coef_}')
print(f'절편 : {linear_model.intercept_}')

예측

linear_model.predict([[7]])

3. 직접 수식으로 비용함수(MSE)를 계산해보기

선형 회귀 모델이 예측값을 얼마나 잘 맞췄는지를 비용함수(MSE)를 통해 수치적으로 계산해본다.

def h(w, x):
    return w * x + 0

def cost(data, target, weight):
    y_pred = h(weight, data)
    mse = ((y_pred - target) ** 2).mean()
    return float(mse)

예시:

cost(data["시간"], data["성적"], 5)
cost(data["시간"], data["성적"], 8)
cost(data["시간"], data["성적"], 10)

비용함수 시각화

cost_list = []
for w in range(1, 20):
    err = cost(data["시간"], data["성적"], w)
    cost_list.append(err)

plt.plot(range(1, 20), cost_list)
plt.xlabel("가중치(w)")
plt.ylabel("비용함수(MSE)")
plt.title("가중치 변화에 따른 비용함수 변화")
plt.show()

4. 경사하강법(Gradient Descent)을 통한 최적의 w, b 찾기

이번에는 반복적으로 손실값을 줄이며 w, b를 찾는 방식인 경사하강법을 활용한다.

from sklearn.linear_model import SGDRegressor

sgd_model = SGDRegressor(max_iter=500, eta0=0.001, verbose=1)
sgd_model.fit(data[["시간"]], data["성적"])

예측 및 가중치, 절편 확인

sgd_model.predict([[7]])
print(f'가중치 : {sgd_model.coef_}')
print(f'편향 : {sgd_model.intercept_}')

모델 성능 평가

sgd_model.score(data[["시간"]], data["성적"])

비용함수 재시각화

cost_list = []
for w in range(1, 20):
    err = cost(data["시간"], data["성적"], w)
    cost_list.append(err)

plt.plot(range(1, 20), cost_list)
plt.xlabel("가중치(w)")
plt.ylabel("비용함수(MSE)")
plt.title("가중치 변화에 따른 비용함수 변화")
plt.show()

📚 주요 용어 설명

  • 선형회귀 (Linear Regression) : 하나의 독립변수(X)가 종속변수(Y)에 어떤 영향을 미치는지를 직선 형태로 모델링하는 통계/머신러닝 기법.
  • MSE (Mean Squared Error, 평균제곱오차) : 예측값과 실제값의 차이를 제곱하여 평균낸 값. 작을수록 예측이 정확함.
  • 가중치 (Weight, w) : 입력 데이터 X가 결과에 얼마나 영향을 주는지를 나타내는 계수.
  • 절편 (Bias or Intercept, b) : 입력값이 0일 때 출력값. 직선의 시작점 역할.
  • 비용함수 (Cost Function) : 모델이 얼마나 오차가 있는지를 수치화한 함수. MSE도 그 중 하나.
  • 예측값 (Prediction) : 모델이 입력값을 기반으로 계산한 출력값.
  • 결정계수 (R² Score) : 모델이 실제 데이터를 얼마나 잘 설명하는지를 0~1 사이의 값으로 나타냄. 1에 가까울수록 좋음.
  • 경사하강법 (Gradient Descent) : 비용함수를 최소화하기 위해 가중치를 반복적으로 조정해 나가는 최적화 알고리즘.
  • 학습률 (Learning Rate, η) : 경사하강법에서 가중치를 얼마만큼 조정할지를 결정하는 하이퍼파라미터.
  • fit() : 주어진 데이터(X, y)를 이용해 모델을 학습시키는 함수.
  • predict() : 학습된 모델로 새로운 입력값에 대한 예측을 수행하는 함수.
  • score() : 회귀 모델에서 결정계수(R²)를 계산하여 모델 성능을 평가하는 함수.

⚖️ 수학 공식 기반 vs 경사하강법 차이 및 장단점

항목 수학 공식 기반 (LinearRegression) 경사하강법 (SGDRegressor)
방식 선형대수 공식으로 w, b를 한 번에 계산 손실을 줄이며 w, b를 반복적으로 조정
학습속도 빠름 (한 번에 계산) 느릴 수 있음 (반복 수행)
복잡한 데이터 적용이 어려움 (선형 가정 필요) 복잡한 문제에 유연하게 적용 가능
적용 대상 작은 데이터셋 / 선형 관계 대용량 데이터 / 온라인 학습
장점 정확하고 빠름, 수학적으로 명확 확장성, 유연성, 다양한 최적화 가능
단점 선형에만 사용 가능, 유연성 부족 하이퍼파라미터(학습률 등) 튜닝 필요, 수렴 보장 X

5. 마무리

수학 공식을 통한 선형 회귀 모델과 경사하강법을 이용한 최적화 두 가지 방법을 통해 MSE를 최소화하는 최적의 w, b를 구할 수 있다. 직접 비용함수 값을 계산하고 시각화하면서 모델의 동작 원리를 더욱 명확히 이해할 수 있다.