여정의 기록
비지도 학습법, 주성분 분석, 오토 인코더 본문
728x90
비지도 학습법 Unsepervised learning
- 기계 학습 종류
- 데이터의 특징을 알아내는 목표
- 차원축소, 밀도 추정, 군집 분석, 독립성 분석 등
확률 모형 기반 분석 아닌 것 (Geometry 이용해서 분석)
- 주성분 분석
- 군집 분석
확률 모형 기반 분석
- 인자 분석
- 밀도 추정
심층 비지도 학습법 Deep unsupervised learning
- 딥러닝 종류
확률 모형 기반 분석이 아닌 것
- Auto Encoder
- Deep clustering
확률 모형 기반
- Generative Adversarial Network (GAN)
- Variational Auto Encoder
주성분 분석
- 차원 축소 기법
- 변수의 수를 줄이는 탐색적 자료 분석의 과정
- 변수 변환 feature transformation - 선형조합으로 새로운 변수 만듦 -> 변수 선택 feature selection
PCA
- 대표적 차원 축소 기법
- 변수 변환에 기초
- 원래 변수에 대한 선형 변환 -> 변수를 잘 설명하는 주성분 찾고 -> 데이터 차원 축소
- 데이터 분산 최대한 보존 + 서로 직교하는 주성분 찾아야함
- 주성분 변수의 유도 과정
- 제1주성분은 표본 분산 행렬 S의 가장 큰 고유값 eigenvalue 과 대응되는 고유 벡터임,
라그랑지안 방법을 이용 - 제2주성분 : 제 1주성분과 직교 & Var(Xa) 를 최대화하는 기저 a 를 찾는 것이 목표.
라그랑지안 방법을 이용, S의 두번째로 큰 고유값과 대응되는 고유 벡터임. - 제k주성분 = 표본 분산 행렬의 k번째로 큰 고유값과 대응되는 고유 벡터
- 제1주성분은 표본 분산 행렬 S의 가장 큰 고유값 eigenvalue 과 대응되는 고유 벡터임,
- 데이터를 가장 잘 설명하는 선형결합을 찾아야한다.
- 선형결합은 가장 큰 분산을 가져야 한다.
- 주성분 분석은 선형을 이용한 것이고 비선형 결합 중 가장 정보를 많이 포함하는 것을 찾기 위해 경험위험 최소화 관점을 보게된다.
경험 위험 최소화 관점
- 데이터에서 변수간의 관계를 나타내는 함수 알아내기
- 함수의 적합성을 손실 함수를 통해 수치화
- 손실 함수의 합을 최소화하는 함수 선택
# MNIST module & PCA import
from keras.datasets import mnist
from sklearn.decomposition import PCA
# MNIST data load & return shape
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train = x_train.reshape(x_train.shape[0], 28*28)
x_test = x_test.reshape(x_test.shape[0], 28*28)
# train data 이용해 주성분 찾기
# n_components : 추릴 주성분 개수
pca = PCA(n_components=10)
pca.fit(x_train)
# 10개의 주성분 그림으로 확인
import matplotlib.pyplot as plt
plt.figure(figsize=(15,3))
for i in range(10):
plt.subplot(1, 10, i*1)
plt.axis("off")
plt.imshow(pca.components_[i].reshape(28,28), cmap="gray")
plt.show()
오토인코더
- 차원축소
- 비지도 학습 방법론
- 비선형
- 출력값이 입력값을 근사하도록 함
- 인코딩 과정에서 입력된 데이터의 핵심 정보만 hidden layer 에서 학습하고 나머지 정보는 소실시킴
- 디코딩 과정에서 hidden layer의 출력값을 뽑았을 때 완벽한 복사가 아닌 입력값의 근사치가 됨
- 출력값이 입력값과 최대한 비슷해지도록 가중치 업데이트 학습
from keras.datsets import mnist
from kearas.layers import input, Dense
from keras.models import Sequential
(x_train, y_train) , (x_test, y_test) = mnist.load_data()
x_train=x_train.reshape(x_train.shape[0], 28*28)
x_test = x_test.reshape(x_test.shape[0], 28*28)
x_train = x_train.astype("float32")/255
x_test = x_test.astype("float32")/255 # 명도 , 각 픽셀을 [0,1]로 정규화
# Modeling
model = Sequential()
model.add(Dense(10, activation='relu')) # encoder , 10개의 hidden node.
model.add(784, activation='sigmoid')) # decoder
model.compile(loss="mean_squared_error", optimizer="adadelta")
# optimizer 최적화 방법, 손실함수 제곱오차 이용
hist = model.fit(x_train, batch_size=200, epochs=50, verbose=1, validation_split=.05)
x_test_pred = model.predict(x_test)
728x90
'공부중 ... > 딥러닝의통계적이해' 카테고리의 다른 글
자연어를 수치화하는 작업 Embedding, Seq2Seq, Attention(Attention is all you need~) (2) | 2022.12.15 |
---|---|
인자 분석, GAN (0) | 2022.12.13 |
전이학습, 객체검출, 얼굴인식, 이미지 스타일 변환 (0) | 2022.12.13 |
합성곱 딥러닝 모델들 (0) | 2022.12.13 |
합성곱 신경망이란 그리고 합성곱 연산 과정들에 대해서 (0) | 2022.12.13 |