회귀 sklearn

topics 100-데이터분석 & AI 101 머신러닝
types 실습 레퍼런스
tags

회귀 (sklearn)

sklearn 입력 데이터 형태

sklearn의 모든 모델은 입력 데이터를 2차원 배열 형태로 받는다.

형태: (샘플 수, 특성 수) = (n, d)

  • n: 데이터 샘플(행)의 개수
  • d: 특성(피처, 변수, 열)의 개수

왜 2차원이어야 할까?

행렬 곱을 생각하면 쉽다.

  • X (n × d) 와 가중치 w (d × 1)를 곱해서 예측값 y (n × 1)를 만든다
  • 수학적으로 y = Xw + b 형태

1차원 배열을 넣으면 에러가 난다. 무조건 2차원으로 reshape 해야 한다.


reshape 사용법

reshape 기본

차원을 바꾸는 함수다. -1을 넣으면 다른 차원을 자동으로 계산한다.

import numpy as np

# <span id="1차원-배열"></span>1차원 배열
arr = np.array([1, 2, 3, 4, 5, 6])

# <span id="2차원으로-변환-6개-2행-3열"></span>2차원으로 변환 (6개 → 2행 3열)
arr.reshape(2, 3)
# <span id="1-2-3"></span>[[1, 2, 3],
# <span id="4-5-6"></span>[4, 5, 6]]

# <span id="-1-사용-자동-계산"></span>-1 사용: 자동 계산
arr.reshape(2, -1)  # (2, 3) - 열 개수 자동
arr.reshape(-1, 3)  # (2, 3) - 행 개수 자동
arr.reshape(-1, 1)  # (6, 1) - 열이 1개인 2차원

sklearn에서 자주 쓰는 패턴

1차원 → 2차원 변환

# <span id="x가-1차원이면-에러"></span>X가 1차원이면 에러
X = np.array([1, 2, 3, 4, 5])
model.fit(X, y)  # ❌ 에러!

# <span id="reshape로-2차원-변환"></span>reshape로 2차원 변환
X = X.reshape(-1, 1)  # (5, 1) 형태
model.fit(X, y)  # ✅ 작동!

특성이 여러 개일 때

# <span id="특성-수에-따라-reshape"></span>특성 수에 따라 reshape
X.reshape(-1, d)  # d = 특성 수

# <span id="예-특성-3개"></span>예: 특성 3개
X.reshape(-1, 3)  # (샘플 수, 3)

선형 회귀 예제

from sklearn.linear_model import LinearRegression
import numpy as np

# <span id="데이터-준비"></span>데이터 준비
X = np.array([1, 2, 3, 4, 5])
y = np.array([2, 4, 6, 8, 10])

# <span id="x를-2차원으로"></span>X를 2차원으로
X = X.reshape(-1, 1)  # (5, 1)

# <span id="모델-학습"></span>모델 학습
model = LinearRegression()
model.fit(X, y)

# <span id="예측"></span>예측
pred = model.predict(<a href="/pages/6.html" class="wiki-link">6</a>)  # 12 예측
print(f"기울기: {model.coef_[0]}")  # 2.0
print(f"절편: {model.intercept_}")  # 0.0

reshape 팁

인자 개수로 차원 결정

  • reshape(-1): 1차원 변환
  • reshape(-1, 1): 2차원, 열이 1개
  • reshape(2, 3): 2차원, 2행 3열
  • reshape(2, 3, 4): 3차원

행렬 곱 느낌으로 이해

y값 회전하는 느낌이다.

X (5,) → reshape(-1, 1) → X (5, 1)

세로로 세운다고 생각하면 된다.


관련 문서