Machine Learning
1. 회귀 모델 - 선형 회귀, 다중 선형 회귀
수현조
2024. 12. 6. 17:21
회귀 모델이란?
- 목적: 숫자(연속적인 값)를 예측하는 것.
- 예:
- 집 크기 → 집 가격
- 공부 시간 → 시험 점수
- 자동차 연비 → 주행 거리
1. 선형 회귀 (Linear Regression)
선형 회귀의 기본 아이디어
- "직선을 그려서 데이터를 설명하자!"
- 데이터를 2차원 평면에 찍은 후, 그 사이를 통과하는 최적의 직선을 찾습니다.
- 이 직선을 사용해 새로운 데이터를 예측합니다.
예시 1) 집 크기로 집 가격 예측
데이터
- 집 크기(제곱미터)와 집 가격(천만 원)의 관계:
크기 (X): 50, 60, 70, 80, 90 가격 (y): 30, 40, 50, 60, 70
작업
- 데이터를 그래프에 찍습니다:
- X축: 집 크기 (50, 60, 70...).
- Y축: 집 가격 (30, 40, 50...).
- 직선을 그립니다:
- 직선의 방정식: y=ax+by = ax + b
- 예: 가격=1×크기−20가격 = 1 \times 크기 - 20.
- 새로운 집 크기가 100이라면?
- y=1×100−20=80y = 1 \times 100 - 20 = 80
- 예측된 가격은 80천만 원.
코드 예제
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
# 데이터 준비
X = np.array([50, 60, 70, 80, 90]).reshape(-1, 1) # 크기
y = np.array([30, 40, 50, 60, 70]) # 가격
# 모델 학습
model = LinearRegression()
model.fit(X, y)
# 예측
new_house_size = np.array([[100]]) # 새로운 집 크기
predicted_price = model.predict(new_house_size)
print(f"예측된 가격: {predicted_price[0]}") # 결과 출력
# 시각화
plt.scatter(X, y, color='blue', label='Actual Data') # 실제 데이터
plt.plot(X, model.predict(X), color='red', label='Regression Line') # 회귀 직선
plt.scatter(new_house_size, predicted_price, color='green', label='Prediction') # 새로운 데이터
plt.legend()
plt.xlabel("크기")
plt.ylabel("가격")
plt.title("집 크기와 가격 관계")
plt.show()
2. 다중 선형 회귀 (Multiple Linear Regression)
무엇이 다른가요?
- 독립 변수(X)가 여러 개인 경우에도 적용 가능.
- 예: 집 크기, 방 개수, 위치를 기반으로 집 가격 예측.
예시 2) 집 크기 + 방 개수 → 집 가격
데이터
크기 (X1): 50, 60, 70, 80, 90
방 개수 (X2): 1, 2, 2, 3, 3
가격 (y): 30, 40, 50, 60, 70
모델
- 방정식: y=a1X1+a2X2+by = a_1 X_1 + a_2 X_2 + b
- 예: 가격=0.5×크기+10×방개수−20가격 = 0.5 \times 크기 + 10 \times 방개수 - 20
예측
- 크기: 100, 방 개수: 3인 집은?
- y=0.5×100+10×3−20=80y = 0.5 \times 100 + 10 \times 3 - 20 = 80
- 예측된 가격은 80천만 원.
코드 예제
# 데이터 준비
X = np.array([[50, 1], [60, 2], [70, 2], [80, 3], [90, 3]]) # 크기 + 방 개수
y = np.array([30, 40, 50, 60, 70]) # 가격
# 모델 학습
model = LinearRegression()
model.fit(X, y)
# 예측
new_house = np.array([[100, 3]]) # 크기: 100, 방 개수: 3
predicted_price = model.predict(new_house)
print(f"예측된 가격: {predicted_price[0]}")
회귀 모델을 쉽게 이해하는 방법
- 데이터를 그래프에 찍고, 데이터를 가장 잘 설명하는 선을 그린다고 생각하세요.
- 선형 회귀는:
- 독립 변수(예: 집 크기, 방 개수) → 종속 변수(예: 집 가격)로 관계를 찾는 과정이에요.
- 단일 선형 회귀와 다중 선형 회귀는 입력 변수의 개수만 다릅니다.