이항 분류
PyTorch와 Keras
PyTorch 설치:
- 홈페이지 참고 https://pytorch.org
- 처음부터 PyTorch로 개발을 하는 것은 어려우므로 Keras를 함께 사용
설치:
!pip install torch torchvision torchaudio keras
임포트:
import os
os.environ["KERAS_BACKEND"] = "torch"
import keras
MNIST
- 1998년 미국 국립표준기술연구소 National Institute of Standards and Technology에서 개발한 숫자 자료를 수정한 것(Modified).
- 가로 28 × 세로 28 크기의 손으로 쓴 숫자(0~9) 흑백 이미지
- 6만개의 훈련용 이미지와 1만개의 테스트용 이미지로 구성
- 가장 유명한 컴퓨터 비전 연구용 데이터

데이터 다운로드
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()
(
x_train.shape,
y_train.shape,
x_test.shape,
y_test.shape,
)
실행 결과
((60000, 28, 28), (60000,), (10000, 28, 28), (10000,))
x_train: 훈련용 이미지y_train: 훈련용 이미지의 클래스(0, 1, 2, …, 9)x_test: 테스트용 이미지y_test: 테스트용 이미지의 클래스 (0, 1, 2, …, 9)
데이터 보기
데이터 크기 보기 (가로 28, 세로 28)
x_train[0].shape # 이미지 한 장의 형태
실행 결과
(28, 28)
이미지로 보기
from PIL import Image
Image.fromarray(x_train[0])

클래스 보기
y_train[0] # 첫 이미지의 클래스
실행 결과
np.uint8(5)
이항 분류와 다항 분류
- 다항 분류: 셋 이상 중에 하나로 분류하는 것(MNIST는 10가지로 분류하는 다항 분류 데이터셋)
- 이항 분류: 둘 중에 하나로 분류하는 것
- 이항 분류를 위해 0과 1만 뽑음
import numpy as np
def filter_binary(x, y, neg_cls, pos_cls):
cond = (y == neg_cls) | (y == pos_cls)
x_bin = x[cond]
y_bin = np.where(y[cond] == neg_cls, 0, 1)
return x_bin, y_bin
x_train_binary, y_train_binary = filter_binary(
x_train, y_train, 0, 1 # 숫자 0은 음성, 숫자 1은 양성 클래스
)
(
x_train_binary.shape,
y_train_binary.shape,
y_train_binary[:5],
)
실행 결과
((12665, 28, 28), (12665,), array([0, 1, 1, 1, 1]))
- 위 함수는 레이블이 0과 1로 바꿈
- 3과 4를 뽑으면 3 → 0, 4 → 1로
- 숫자 0과 1만 남긴 훈련 이미지는 12,665장