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
    

작업

  1. 데이터를 그래프에 찍습니다:
    • X축: 집 크기 (50, 60, 70...).
    • Y축: 집 가격 (30, 40, 50...).
  2. 직선을 그립니다:
    • 직선의 방정식: y=ax+by = ax + b
    • 예: 가격=1×크기−20가격 = 1 \times 크기 - 20.
  3. 새로운 집 크기가 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]}")

회귀 모델을 쉽게 이해하는 방법

  1. 데이터를 그래프에 찍고, 데이터를 가장 잘 설명하는 선을 그린다고 생각하세요.
  2. 선형 회귀는:
    • 독립 변수(예: 집 크기, 방 개수) → 종속 변수(예: 집 가격)로 관계를 찾는 과정이에요.
  3. 단일 선형 회귀와 다중 선형 회귀는 입력 변수의 개수만 다릅니다.