반응형

주택 가격 예측을 통해 선형 회귀의 원리와 구현을 코드로 익힙니다
시리즈: 머신러닝 실전 완전 정복
6편: 선형 회귀 기초 7편: RANSAC과 다항 회귀 8편: 규제 기법
1. 회귀 분석이란?
회귀 분석은 연속형 목표 변수를 예측하는 머신러닝 기법입니다.
분류(Classification) vs 회귀(Regression)
- 분류: 이산형 클래스 예측 (예: 스팸 메일 여부)
- 회귀: 연속형 수치 예측 (예: 주택 가격, 온도)
2. 주택 데이터셋 탐색
Boston Housing 데이터는 1970년대 미국 보스턴 주택 정보로, 13개 특성과 주택 가격(MEDV)으로 구성됩니다.
import numpy as np
import pandas as pd
from sklearn.datasets import load_boston
boston = load_boston()
X = boston.data
y = boston.target
print(f"특성 개수: {X.shape[1]}, 샘플 개수: {X.shape[0]}")
💡 팁: 산점도 행렬과 상관관계 행렬로 특성과 목표 변수의 관계를 시각화하면 모델 선택에 도움이 됩니다.
3. 선형 회귀 직접 구현 (경사 하강법)
경사 하강법(Gradient Descent)은 비용 함수를 최소화하는 가중치를 반복적으로 찾는 알고리즘입니다.
class LinearRegressionGD(object):
"""경사 하강법을 사용한 선형 회귀"""
def __init__(self, eta=0.001, n_iter=20):
self.eta = eta
self.n_iter = n_iter
def fit(self, X, y):
self.w_ = np.zeros(1 + X.shape[1])
self.cost_ = []
for i in range(self.n_iter):
output = self.net_input(X)
errors = (y - output)
self.w_[1:] += self.eta * X.T.dot(errors)
self.w_[0] += self.eta * errors.sum()
cost = (errors**2).sum() / 2.0
self.cost_.append(cost)
return self
주요 개념
- eta (η): 학습률 — 가중치 업데이트 크기 조절
- n_iter: 반복 횟수
- cost_: 각 반복의 비용 함수 값 저장
4. scikit-learn LinearRegression
반응형
실무에서는 scikit-learn의 최적화된 구현을 사용합니다.
from sklearn.linear_model import LinearRegression
slr = LinearRegression()
slr.fit(X_train, y_train)
y_pred = slr.predict(X_test)
5. 정규 방정식 (Normal Equation)
행렬 연산으로 한 번에 최적 가중치를 구하는 방법입니다. 반복이 필요 없어 작은 데이터셋에 효율적입니다.
Xb = np.hstack((np.ones((X.shape[0], 1)), X))
w = np.dot(np.linalg.inv(np.dot(Xb.T, Xb)), np.dot(Xb.T, y))
6. 모델 평가
회귀 모델의 성능을 평가하는 주요 지표입니다.
from sklearn.metrics import mean_squared_error, r2_score
print('훈련 MSE: %.3f' % mean_squared_error(y_train, y_train_pred))
print('훈련 R^2: %.3f' % r2_score(y_train, y_train_pred))
✓ 핵심 정리
- 회귀 분석은 연속형 수치 예측
- 경사 하강법은 반복적 최적화 방법
- 정규 방정식은 직접 해를 구하는 방법
- MSE와 R²로 모델 성능 평가
다음 편에서는 이상치에 강한 RANSAC과 곡선을 그리는 다항 회귀를 배웁니다.
반응형
'정보 > IT 지식 정보' 카테고리의 다른 글
| K-Means 클러스터링이란? 엘보우 방법과 실루엣 분석까지 [9편] (0) | 2026.04.06 |
|---|---|
| RANSAC과 다항 회귀 — 이상치와 비선형 관계 다루기 [7편] (0) | 2026.04.04 |
| 배깅 vs 부스팅 — 결정 트리의 과적합을 잡는 두 전략[5편] (0) | 2026.04.03 |
| 앙상블 학습이란? 보팅 분류기로 모델 성능 높이기 [4편] (0) | 2026.04.02 |
| GridSearchCV vs RandomizedSearchCV — 최적의 하이퍼파라미터 찾기 [3편] (0) | 2026.04.01 |
댓글