Python/Sklearn

[Sklearn] 파이썬 MNIST 데이터셋 불러오기, 숫자 시각화 예제

jimmy_AI 2022. 5. 31. 17:17
반응형

파이썬 사이킷런으로 손글씨 숫자 인식 데이터셋 다루기

파이썬에서 손글씨 숫자 인식 데이터셋인 MNIST를 불러오고

데이터를 몇개 뽑아 숫자 글씨의 상태를 시각화해보는 예제를 살펴보도록 하겠습니다.

 

 

MNIST 데이터셋 로드

MNIST의 각 데이터는 28 * 28 픽셀(총 784개)의 각 위치에

0~255 사이의 정수 값이 저장된 형태입니다.

 

MNIST 전체는 총 7만 장의 사진으로 구성되어 있기에 따라서 데이터프레임으로 불러오게 된다면

행이 7만개이고, 열이 784개로 이루어진 형태를 나타내게 됩니다.

 

파이썬에서는 sklearn의 fetch_openml 함수로 아래처럼 mnist 데이터를 불러올 수 있습니다.

(데이터셋을 불러오는 데에는 수 분 가량이 소요될 수도 있습니다.)

from sklearn.datasets import fetch_openml
import pandas as pd

mnist = fetch_openml('mnist_784')
df = mnist.data

df

 

이제 각 데이터가 0~9의 손글씨 숫자 중 어느 숫자였는지에 대한 라벨 정보

가져와야 합니다. 이는 위에서 불러온 mnist 객체의 target 속성으로 불러올 수 있으며,

데이터프레임의 마지막 열에 라벨 정보를 추가하는 코드와 실행 결과는 다음과 같습니다.

# 라벨 정보 가져와서 새로운 열에 추가
df['label'] = mnist.target

df

반응형

MNIST 시각화

matplotlib 라이브러리를 이용하여 데이터 일부를 뽑은 뒤,

픽셀 값에 따른 시각화를 진행해볼 수 있습니다.

 

데이터 10개를 랜덤으로 선별하여 라벨과 픽셀을 시각화한 예시는 아래와 같습니다.

각 줄의 코드에 대한 상세 설명은 주석을 참고해주세요.

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.pyplot import style

# 0~69999 숫자 중 랜덤으로 10개 선별(인덱스 기준)
random_idx = np.random.choice(70000, 10)

# 흰색 배경 및 크기 지정
style.use('default')
figure = plt.figure()
figure.set_size_inches(10, 4)

# 시각화를 위한 label column 제외
columns_list = list(df.columns)
columns_list.remove('label')

# 흑백으로 출력하기 위한 스타일 설정
style.use('grayscale')

# 2 * 5 사이즈의 격자 설정
axes = []
for i in range(1, 11):
    axes.append(figure.add_subplot(2, 5, i))

num_list = []
for i in range(10):
    num = df.loc[random_idx[i], columns_list] # 랜덤으로 선별된 인덱스 위치에 해당하는 픽셀 정보 가져오기
    num = np.array(num).reshape(-1, 28).astype(int) # 픽셀값을 28 * 28 사이즈로 바꾸고 정수형 변환 진행
    num_list.append(num)

for i in range(10):
    axes[i].matshow(num_list[i]) # 10개 숫자 차례대로 시각화
    axes[i].set_axis_off() # x축, y축 눈금 제거