회귀 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)
세로로 세운다고 생각하면 된다.