데이터의 패턴을 찾는 과정: 선형 회귀
머신러닝은 수많은 데이터 속에 숨겨진 규칙성을 수학적 모델로 찾아내는 과정입니다. 예를 들어, 2차원 평면에 흩어져 있는 점들을 가장 잘 설명할 수 있는 직선을 찾는 문제를 생각해 보겠습니다. 이 직선이 곧 데이터의 흐름을 대변하는 '모델'이 됩니다.
우리는 흔히 다음과 같은 1차 함수 식으로 모델을 정의합니다.
y = wx + b
여기서 w는 가중치(Weight), b는 편향(Bias)을 의미합니다. 최적의 모델을 찾는다는 것은 데이터와 모델 사이의 오차를 최소화하는 최적의 w와 b를 찾아내는 과정입니다.
손실 함수(Loss Function)와 최소제곱법
모델이 데이터를 얼마나 잘 설명하는지 측정하기 위한 지표가 필요합니다. 이를 '손실 함수' 또는 '비용 함수'라고 부릅니다. 가장 대표적인 방법은 최소제곱법(Least Squares Method)입니다.
예측값과 실제값의 차이를 제곱하여 모두 더한 값으로, 수식은 다음과 같습니다.
차이를 제곱하는 이유는 음수 값을 제거하고, 오차가 클수록 더 큰 페널티를 부여하기 위함입니다. 이 값이 작을수록 모델의 정확도는 높아집니다.
최적화를 위한 경사 하강법(Gradient Descent)
손실 함수의 값을 최소로 만드는 가중치를 찾기 위해 경사 하강법을 사용합니다. 이는 함수의 기울기(미분값)를 따라 점진적으로 최저점을 찾아가는 알고리즘입니다.
안개가 낀 산에서 하산할 때, 현재 발밑의 경사가 가장 가파른 곳으로 한 걸음씩 내딛는 전략과 비슷합니다. 가중치를 업데이트하는 식은 다음과 같습니다.
새로운 가중치 = 현재 가중치 - (학습률 * 기울기)
학습률(Learning Rate)의 중요성
경사 하강법에서 한 번에 이동하는 거리를 학습률이라고 합니다. 이는 개발자가 직접 설정해야 하는 하이퍼파라미터(Hyperparameter)입니다.
- 너무 작은 학습률: 최저점에 도달하기까지 너무 많은 시간이 걸립니다.
- 너무 큰 학습률: 최저점을 지나쳐 버리거나 값이 발산하여 학습이 제대로 이루어지지 않습니다.
- 적절한 학습률: 안정적이고 빠르게 최적의 해에 수렴합니다.
파이썬을 활용한 선형 회귀 구현
간단한 데이터를 생성하고 선형 회귀 모델을 학습시키는 예제 코드입니다.
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
# 1. 데이터 생성
np.random.seed(10)
features = 2 * np.random.rand(20, 1)
labels = 5 + 4 * features + np.random.randn(20, 1)
# 2. 모델 생성 및 학습
model = LinearRegression()
model.fit(features, labels)
# 3. 새로운 데이터에 대한 예측
test_points = np.array([[0.5], [1.5], [2.5]])
predictions = model.predict(test_points)
# 4. 결과 시각화
plt.scatter(features, labels, color='blue', label='Actual Data')
plt.plot(features, model.predict(features), color='red', label='Regression Line')
plt.scatter(test_points, predictions, color='green', marker='X', s=100, label='Predictions')
plt.xlabel('X (Feature)')
plt.ylabel('y (Label)')
plt.legend()
plt.show()
print(f"가중치(w): {model.coef_[0][0]:.2f}")
print(f"편향(b): {model.intercept_[0]:.2f}")
주요 회귀 기법 정리
데이터의 특성과 목적에 따라 다양한 회귀 기법이 사용됩니다.
| 기법명 | 핵심 특징 | 수식/특징 요약 |
|---|---|---|
| 선형 회귀 (Linear) | 독립 변수와 종속 변수 간의 선형 관계 모델링 | y = wx + b |
| 로지스틱 회귀 (Logistic) | 이진 분류 문제 해결에 사용되는 확률 모델 | 시그모이드 함수 활용 |
| 릿지 회귀 (Ridge) | L2 규제를 사용하여 과적합 방지 | MSE + α * Σw² |
| 라쏘 회귀 (Lasso) | L1 규제를 사용하여 불필요한 특성 제거 | MSE + α * Σ|w| |
| 엘라스틱 넷 (ElasticNet) | 릿지와 라쏘의 장점을 결합한 형태 | L1 + L2 규제 혼합 |