반응형

책(혼공머신러닝) 을 보고 공부 중 이전에 학습했던 내용이 다시 나오는데 기억이 나지 않아 정리합니다.

train_scaled 데이터를 2D 배열 형태로 변환합니다. 이는 머신러닝 모델에서 데이터를 입력으로 사용할 수 있도록 준비하는 중요한 과정입니다.

train_scaled = train_scaled.reshape(-1, 28*28)
  • reshape: NumPy 배열의 형태(차원)를 변경하는 메서드입니다. 데이터를 새롭게 구조화할 때 사용됩니다.
  • -1: 이 위치에 들어갈 크기를 자동으로 계산하라는 의미입니다.
    • NumPy는 전체 요소 수를 유지하면서, 다른 차원의 크기를 기준으로 이 값(-1)을 계산합니다.
  • 28*28: Fashion MNIST 데이터의 각 이미지는 28x28 픽셀 크기의 2D 배열입니다. 이 값을 지정하여 2D 이미지를 1D 벡터로 변환합니다.
    • 여기서는 28과 28을 곱하여 784(픽셀의 총 개수) 크기의 1D 벡터로 변환합니다.

reshape가 필요한 이유

SGDClassifier와 같은 전통적인 머신러닝 알고리즘은 1D 벡터 형태의 입력 데이터를 요구합니다.

  • 원본 Fashion MNIST 데이터는 (이미지 개수, 28, 28) 형태의 3D 배열입니다.
    • 예시: (60000, 28, 28) (60000개의 28x28 이미지를 포함)
  • 이를 2D 형태의 입력 데이터로 변환해야 합니다.
    • 변환 후: (60000, 784) (각 이미지가 길이 784의 벡터로 변환됨)

SGDClassifier는 각 벡터를 개별 데이터 포인트로 간주하며, 모든 픽셀 값을 입력 특성(feature)으로 사용하여 모델을 학습합니다.


코드 실행 결과 예시

변환 전:

  • 데이터의 형태: (60000, 28, 28)
    • 60000개의 28x28 픽셀 이미지를 포함한 3D 배열.

변환 후:

  • 데이터의 형태: (60000, 784)
    • 60000개의 길이 784(=28*28)인 벡터로 이루어진 2D 배열.

왜 -1을 사용하는가?

reshape 메서드에서 **-1**은 크기를 자동으로 계산하기 위한 편리한 방식입니다.

  • 예를 들어, 데이터의 총 크기가 60000 x 28 x 28이라면, **28*28**을 고정했을 때, **60000**은 자동으로 계산됩니다.
  • 따라서, **-1**을 사용하면 데이터 크기가 변경되더라도 코드를 수정할 필요가 없습니다.

최종적으로 데이터 준비 과정 요약

  • 정규화:
train_scaled = train_input / 255.0

 

  • 이미지를  255로 나누어 0~1 사이로 정규화하여 숫자 값을 축소합니다.
  • 이 작업은 학습 안정성과 모델 성능을 개선하는 데 도움이 됩니다.
  • 차원 변경:
train_scaled = train_scaled.reshape(-1, 28*28)

 

  • 28x28 크기의 2D 이미지를 784 픽셀 길이의 1D 벡터로 변환합니다.
  • 각 벡터가 SGDClassifier에 입력됩니다.

전체적인 맥락

SGDClassifier는 벡터 형태의 입력 데이터만 처리할 수 있기 때문에, 2D 이미지를 1D 벡터로 변환하는 reshape 작업이 필수입니다. 이 과정은 다른 전통적 머신러닝 알고리즘(예: SVM, Logistic Regression 등)에서도 동일하게 적용됩니다.

728x90
반응형

+ Recent posts