배우고 느낀 것들
과제#15 Visualizing Mnist 본문
Mnist 라는 데이터셋을 사이킥런을 통해 불러옴
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import fetch_openml #데이터셋 불러오는 기능인듯?
mnist = fetch_openml('mnist_784', cache = False)
X = mnist.data.astype('float32').to_numpy()
y = mnist.target.astype('int64').to_numpy()
평면 상에 이미지를 불러옴
plt.figure(figsize=(5,5))
idx = 5 #5번째 값 불러오기?
grid_data = X[idx].reshape(28,28) #784개짜리를 28*28로 변환
plt.imshow(grid_data, interpolation = "none") #interpolation : 이미지 보정
plt.show()
다른 이미지도 불러서 확인해보고, 숫자나 모양을 갖춘건 드물다는 것을 확인!
plt.clf() # 좌표평면상의 내용 지움
plt.figure(figsize = (5,5))
rand_img = np.random.rand(28,28)
plt.imshow(rand_img)
plt.show()
데이터 전체 42000개를 다루는 대신, 15000개 정도만 추리고, 15000개도 많기 때문에 정규화 진행
# 42000개의 데이터 15000개로 줄이기 -> (15000,784)의 모양
labels = y[:15000]
data = X[:15000]
# 15000은 큰 값이기 때문에 z-score 정규화 진행
from sklearn.preprocessing import StandardScaler
standardized_data = StandardScaler().fit_transform(data)
sample_data = standardized_data
PCA를 통해 모양을 갖춘 이미지들을 좀 더 낮은 차원으로 끌어내림
: 데이터가 가장 흩어져있는(분산이 높은) 축으로 옮겨 원하는 차원 개수만큼 줄이는 방법
#784 차원을 2차원으로 축소 -> 변경된 모양 : (15000,2)
pca.n_components = 2
pca_data = pca.fit_transform(sample_data)
pca_data = np.vstack((pca_data.T, labels)).T
#.T : 행렬의 전치
#vstack : 행렬을 세로로 합침
#-> pca_data를 뒤집고 labels와 합친 뒤, 다시 뒤집음
import seaborn as sn
pca_df = pd.DataFrame(data=pca_data, columns=("1st_principal", "2nd_principal", "label"))
sn.FacetGrid(pca_df, hue="label", size=6).map(plt.scatter, '1st_principal', '2nd_principal').add_legend()
plt.show()
참고:
MNIST의 이진 분류 : https://junsik-hwang.tistory.com/47
머신러닝 - MNIST 알아보기 (분류) - Python
머신러닝을 공부하는 사람이라면 한 번쯤 경험해봤거나 들어봤을 데이터셋이다. MNIST! 이 데이터 셋은 미국 고등학생들과 인구조사국 직원분들이 손으로 직접 쓴 숫자 데이터셋이다. 시작해보
junsik-hwang.tistory.com
'머신러닝' 카테고리의 다른 글
과제 #16 K-means Clustering (0) | 2023.01.03 |
---|---|
과제 # 12 Logistic Regression (0) | 2022.11.29 |
[혼자공부하는머신러닝] 2장 (0) | 2022.11.18 |
가공에 필요한 함수들 (0) | 2022.10.29 |
명목형 변수를 이진형 변수로 바꾸기 (0) | 2022.10.23 |
Comments