선형 회귀 — 사이킷런과 경사 하강법

교재 7.4 ~ 7.12 절. 사이킷런 LinearRegression API → 결정계수 R² → 평균제곱오차 → 경사 하강법 이론 + 인터랙티브 데모.


1. 사이킷런(scikit-learn)

  • 2007 Google Summer of Code 에서 출발
  • 지도 · 비지도 학습의 방대한 표준 라이브러리
  • ML 파이프라인 5단계:
    1. 특성(features) + 레이블
    2. 모델(model) 선택
    3. 하이퍼파라미터 설정
    4. 훈련(fit)
    5. 검증(score/predict)

1.1 특성(feature)이란?

관찰되는 현상에서 측정할 수 있는 개별 속성. 모델에 입력되는 변수들. y = f(x) 에서 x 가 곧 특성.


2. 선형 회귀의 수식

2.1 단변량 (1차원 입력)

  • w: 계수(coefficient), 직선의 기울기
  • b: 절편(intercept), 직선이 y축과 만나는 y 좌표

2.2 다변량 — 초평면 (hyperplane)

  • 2D 입력 → 평면, 3D 이상 → 초평면
  • w_0 을 흡수하기 위해 x_0 = 1 을 추가하는 것이 관례

3. 사이킷런 API — fit / predict / score

PYTHON
from sklearn import linear_model
import numpy as np
 
# 입력은 반드시 2차원 배열
X = [[163], [179], [166], [169], [171]]
y = [54, 63, 57, 56, 58]
 
regr = linear_model.LinearRegression()
regr.fit(X, y)
 
print(regr.coef_)        # 기울기 w (배열)
print(regr.intercept_)   # 절편 b (스칼라)
print(regr.score(X, y))  # R² 결정계수
 
# 예측
print(regr.predict([[167]]))

3.1 왜 X 는 반드시 2차원인가?

LinearRegression다변량을 전제로 설계되어, 각 샘플을 벡터로 간주합니다. 1차원 특성이라도 [163] 처럼 래핑 필요.

3.2 결정계수 R²

  • 값 1: 완벽한 모델
  • 값 0: 평균을 예측하는 것과 동일 (쓸모 없음)
  • 음수: 평균보다 더 못한 모델 (대참사)

4. 오차 함수 (Error Function)

4.1 단순 오차 합은 왜 안 되는가?

실제 {1, 2, 3}, 예측 {1, 4, 1}

합이 0! 부호가 상쇄되어 전혀 잘못된 신호를 줍니다.

4.2 평균 제곱 오차 (MSE)

  • 제곱 → 음/양 상쇄 방지
  • 추가 효과: 파라미터 공간에서 볼록한 그릇 모양 (convex bowl)
  • → 최적 해가 유일하고 찾기 쉬움
PYTHON
from sklearn.metrics import mean_squared_error
mean_squared_error(y_true, y_pred)

5. 경사 하강법 (Gradient Descent)

5.1 직관

오차 곡선이 그릇 모양이라면, 바닥(최솟값) 을 찾는 방법은?

→ 현재 위치에서 기울기 방향의 반대로 조금씩 이동.

5.2 수식

  • η (eta): 학습률 (learning rate) — 한 번에 얼마나 움직일지
  • ∂E/∂w: 오차의 w 에 대한 편미분 (그 지점의 접선 기울기)

5.3 기울기 부호의 의미

  • 현재 위치에서 기울기 + → w 를 감소시키면 오차 ↓ → w ← w - η·(+)
  • 현재 위치에서 기울기 → w 를 증가시키면 오차 ↓ → w ← w - η·(−)

둘 다 같은 식 w ← w - η · g 로 자연스럽게 해결됨.


6. 인터랙티브 데모 — 직접 굴려 보기

경사 하강법 — MSE 곡선을 따라 내려가 보기

실습
wMSE(w)min w≈0.85
w (현재)
1.600
MSE
3.218
접선 기울기 ∂E/∂w
11.640
step
0
0.050

학습률이 너무 작으면 수렴이 느리고, 너무 크면 진동 · 발산. 최적 η 는 보통 0.01 ~ 0.1 범위. 매 스텝 w ← w − η·∂E/∂w 를 수행합니다.

실험 과제:

  • η 를 0.001 로 낮추고 재생 → 수렴이 너무 느려 정답 근처에 못 감
  • η 를 0.4 이상으로 올리고 재생 → 진동 / 발산
  • η 를 0.05 정도에 두고 재생 → 부드럽게 최적점 수렴

7. 학습률의 3가지 상황 정리

η결과대응
너무 작음 (0.00001)수렴 지나치게 느림, 정답 못 찾음올림
적절 (0.01 ~ 0.1)정상 수렴유지
너무 큼 (1.0+)발산 · 진동내림

에폭(epoch) = 전체 훈련 데이터를 한 번 통과. 일반적으로 수십 ~ 수천 에폭 반복하며 파라미터를 갱신.


8. 다변수 w, b 동시 업데이트 — 손계산 ⭐

📐 수학 풀이는 별도 페이지로 분리: 경사 하강법 — 손계산 마스터 에서 ∂E/∂w, ∂E/∂b 유도 + 5점 데이터 epoch 1 손계산 + 풀이 연습 (11문제) 까지 모두 다룹니다.

이 페이지에선 사이킷런이 그 손계산을 자동으로 어떻게 해주는지에 집중합니다.

8.1 사이킷런이 내부에서 하는 일

위 페이지에서 손으로 계산한 갱신식 w ← w − η · Σ x·E, b ← b − η · Σ E수십~수천 epoch 반복하는 것 — 그게 바로 regr.fit(X, y) 한 줄이 하는 일입니다. 코드로 보면:

PYTHON
y_hat = w * X + b              # 예측값 벡터
error = y_hat - y              # E = ŷ − y
w = w - lr * (error * X).sum() # ∑ x·E
b = b - lr * error.sum()       # ∑ E

(실제 LinearRegression 은 닫힌 해(정규방정식)를 쓰지만, SGDRegressor 같은 클래스는 위 경사 하강법을 사용합니다.)

8.2 손계산 풀이는 별도 페이지

여기서는 코드 한 줄로 끝났지만, 그 한 줄이 내부적으로 무엇을 하는지 표 형식으로 손계산하는 패턴은 별도 페이지에서 자세히 다룹니다 — 시험 출제 1순위입니다.

→ 👉 경사 하강법 — 손계산 마스터 로 이동해 다음을 확인하세요:

  • ∂E/∂w, ∂E/∂b 가 어디서 나오는지 (체인룰 풀이)
  • 5점 데이터로 epoch 1 표 형식 손계산 (시험 단골 패턴)
  • 새 데이터로 직접 풀어보는 11문제 (다변수 동시 갱신)

📝 Checkpoint

Quiz

선형 회귀 · 경사 하강법 Checkpoint

Q 1 / 5

사이킷런 LinearRegression 에서 입력 X 가 반드시 2차원 배열이어야 하는 이유는?


🔗 다음 학습