Skip to main content

이항 분류

MNIST

  • 1998년 미국 국립표준기술연구소 National Institute of Standards and Technology에서 개발
  • 가로 28 × 세로 28 크기의 손으로 쓴 숫자(0~9) 흑백 이미지
  • 6만개의 훈련용 이미지와 1만개의 테스트용 이미지로 구성
  • 가장 유명한 컴퓨터 비전 연구용 데이터

데이터 다운로드

(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()
  • x_train: 훈련용 이미지
  • y_train: 훈련용 이미지의 클래스(0, 1, 2, …, 9)
  • x_test: 테스트용 이미지
  • y_test: 테스트용 이미지의 클래스 (0, 1, 2, …, 9)

데이터 보기

데이터 크기 보기 (가로 28, 세로 28)

x_train[0].shape

이미지로 보기

from PIL import Image
Image.fromarray(x_train[0])

클래스 보기

y_train[0]

이항 분류와 다항 분류

  • 다항 분류: 셋 이상 중에 하나로 분류하는 것(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이어야 함
    • 3과 4를 뽑으면 3 → 0, 4 → 1로 레이블을 바꿔야

모형 정의

model = keras.models.Sequential(  # 딥러닝 모형의 구성 요소를 순서대로 정의
[
keras.layers.Rescaling(1/255), # 입력 값의 범위를 0~255에서 0.0 ~ 1.0으로
keras.layers.Flatten(), # 이미지 평탄화
keras.layers.Dense(1, activation='sigmoid') # 이미지마다 1개의 출력
]
)

평탄화

Dense

  • 선형 모형 y = wx + b 형태의 레이어
  • 모든 입력에 대해 가중치 w를 곱하고, 편향 b를 더함
  • Fully Connected라고도 함
  • -∞ ~ +∞ 를 출력
  • 이항 분류 문제이므로 0 또는 1로 출력을 해야 함 → 활성화 함수(activation function)

시그모이드 함수 sigmoid function

  • 출력층에서 0~1 사이의 출력을 표현하기 위해 사용
  • S자(sigma)를 닮은(oid)이라는 뜻
  • 계단 함수는 미분불가능하므로 점진적 학습이 어려움
  • 0~1 사이에서 매끄럽게 변하는 함수
  • 출력은 확률로 해석 (예: 0.8 → 1일 확률이 80%)
  • 통계에서는 로지스틱(logistic) 함수라고 부름
σ(z)=11+ez\sigma(z) = \frac{1}{1 + e^{-z}}

퀴즈

사용자 정보 입력
퀴즈를 시작하기 전에 이름과 소속을 입력해주세요.

Q&A