회귀 sklearn

topics
types
tags
#sklearn #regression #reshape #linear-regression

회귀 (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

# 1차원 배열
arr = np.array([1, 2, 3, 4, 5, 6])

# 2차원으로 변환 (6개 → 2행 3열)
arr.reshape(2, 3)
# [[1, 2, 3],
#  [4, 5, 6]]

# -1 사용: 자동 계산
arr.reshape(2, -1)  # (2, 3) - 열 개수 자동
arr.reshape(-1, 3)  # (2, 3) - 행 개수 자동
arr.reshape(-1, 1)  # (6, 1) - 열이 1개인 2차원

sklearn에서 자주 쓰는 패턴

1차원 → 2차원 변환

# X가 1차원이면 에러
X = np.array([1, 2, 3, 4, 5])
model.fit(X, y)  # ❌ 에러!

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

특성이 여러 개일 때

# 특성 수에 따라 reshape
X.reshape(-1, d)  # d = 특성 수

# 예: 특성 3개
X.reshape(-1, 3)  # (샘플 수, 3)

선형 회귀 예제

from sklearn.linear_model import LinearRegression
import numpy as np

# 데이터 준비
X = np.array([1, 2, 3, 4, 5])
y = np.array([2, 4, 6, 8, 10])

# X를 2차원으로
X = X.reshape(-1, 1)  # (5, 1)

# 모델 학습
model = LinearRegression()
model.fit(X, y)

# 예측
pred = model.predict(<a href="/pages/600-알고리즘-코딩테스트/problem/t_숫자카드게임_96.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)

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


관련 문서