본문 바로가기
AI ( Artificial Intelligence )

[ 머신러닝 - 머신러닝에서 다차원 배열을 1차원 배열로 바꾸는 이유 ]

by 크라00 2025. 4. 8.

 


머신러닝에서 다차원 배열을 1차원 배열로 바꾸는 이유

머신러닝 모델을 구현하는 과정에서 타겟 레이블(y) 데이터를 다차원 배열에서 1차원 배열로 변환하는 코드는 자주 사용된다.

예시:

train_y = np.ravel(train_y)

또는

train_y = train_y.reshape(-1,)

해당 변환을 수행하는 이유는 다음과 같다.


1. Scikit-learn은 타겟 벡터를 1차원으로 요구함

Scikit-learn의 대부분의 지도 학습 모델은 타겟 값(y)이 다음 형태이길 기대한다.

  • 권장 형태: (n_samples,) → 1차원
  • 잘못된 형태: (n_samples, 1) → 2차원

예를 들어, 다음과 같은 경우 오류가 발생할 수 있다:

from sklearn.ensemble import RandomForestRegressor

# 잘못된 형태
y = np.array([[1], [0], [1], [0]])  # shape: (4, 1)
model = RandomForestRegressor()
model.fit(X, y)  # ValueError 발생 가능

따라서, y를 np.ravel() 또는 .reshape(-1,)로 1차원으로 변환해야 한다.


2. 모델 내부 연산은 벡터 연산 기반

머신러닝 모델은 내부적으로 벡터 연산을 수행하며, 타겟값을 벡터로 간주한다. 2차원 형태의 타겟은 이 연산을 방해하므로, 1차원으로 변환하여 처리해야 한다.


3. 불필요한 차원의 제거

데이터프레임에서 특정 컬럼을 슬라이싱할 때, 종종 불필요한 차원이 포함될 수 있다.

예시:

y = df[['target']]         # shape: (n, 1)
y = df['target']           # shape: (n,)

또는,

y = df.iloc[:, [0]]        # shape: (n, 1)
y = df.iloc[:, 0]          # shape: (n,)

위와 같이, 열 하나만 선택했더라도 결과가 2차원이 될 수 있으며, 이 경우에도 평탄화 작업이 필요하다.


4. 변환 방법 비교

방법 설명

np.ravel() 복사 없이 1차원으로 변환
.reshape(-1,) 원하는 모양으로 변환 (복사 가능성 있음)
.flatten() 복사하여 1차원으로 변환

대부분의 경우 np.ravel()을 사용하는 것이 빠르고 안전하다.


결론

머신러닝 모델은 타겟 레이블이 1차원 배열 형태일 것을 요구한다. 따라서, 2차원 배열로 존재하는 경우에는 np.ravel() 또는 .reshape(-1,) 등을 사용하여 1차원으로 변환해야 한다. 이는 오류를 방지하고 모델 학습 및 예측을 정상적으로 수행하기 위한 필수 전처리 작업이다.