2022 하계 모각코

[5회차] AI - Classification

yeonarom 2022. 8. 4. 19:10

[AI]

기계 학습(Machine Learning)은 컴퓨터 프로그램이 데이터와 처리 경험을 이용한 학습을 통해 정보 처리 능력을 향상시키는 것을 말한다.

이런 기계 학습에는 지도 학습과 비지도 학습이 있는데, Classification은 지도 학습에 해당한다.

지도 학습(Supervised Learning)은 기계 학습 중 컴퓨터가 입력값과 그에 따른 출력값이 있는 데이터를 이용하여 주어진 입력에 맞는 출력을 찾는 학습 방법이다.

Classification

Classification은 분류라는 뜻으로 지도 학습의 한 종류로서 데이터의 범주를 파악하고 새로운 데이터의 범주를 스스로 판별하는 과정이다.

얼마나 큰지, 많은지 등 숫자로 표현할 수 있는 데이터를 양적 데이터라고 하고, 이름 등 단어로 표현할 수 있는 데이터를 범주형 데이터라고 한다.

Classification은 데이터의 독립변수로 종속변수를 도출해 낼 때 종속변수가 범주형 데이터인 경우에 사용한다.

예를 들어 Hops Classification의 경우 Hops라는 맥주 양조에 사용되는 식물을 사진을 통한 학습으로 식물의 상태를 건강, 질병(노균병), 질병(흰가루병), 해충, 영양의 5가지로 구분하였다.

Classification의 대표적인 기술들

의사결정 트리(Decision Tree)

의사 결정 트리는 특정 기준에 따라 데이터를 구분하는 모델이다.

뿌리 마디(root node), 부모 마디, 자식 마디, 끝 마디(terminal node)로 구성되어 있다.

뿌리 마디에서 끝 마디 사이에 존재하는 여러 마디에서 질문을 던져 짊누에 대해 yes or no로 판단하여 최종 끝 마디로 분류한다.

여기서 끝마디를 범주라고 생각하면 된다.

의사 결정 트리(Decision Tree)

Random Forest

Random Forest는여러 개의 결정 트리를 모아 새로운 데이터를 각 트리에 넣어 분류된 결과 중 가장 빈도가 높은 분류 결과를 선택하는 방식이다.

이렇게 할 경우, 일부 트리가 과적합 되어있다 하더라도 다른 트리가 많아 큰 영향을 미치지 못한다.

Random Forest

KNN(K-Nearest Neighbor)

KNN이란 어떤 데이터가 주어졌을 때 그 주변의 데이터의 정보를 이용해서 주어진 데이터의 종속변수를 예측하는 것이다.

더 구체적으로 얘기하자면 주어진 데이터로부터 거리가 가까운 데이터 k개를 보고 가장 많이 나타나는 범주로 주어진 데이터의 종속변수 값을 예측하는 것이다.

여기서 k의 값을 어떻게 정할지가 가장 중요하다.

만약 k의 값을 너무 작게 설정하면 학습 데이터의 예외적인 상화에 대해서도 학습하게 되어 학습 데이터에 대한 정확도는 높아지겠지만 실제 데이터에 대한 정확도는 떨어질 것이다.

반대로 k의 값을 너무 크게 설정하면 학습 데이터에 대한 학습조차 제대로 이루어지지 않아 학습 데이터의 정확도가 부족하게 될 것이다.

KNN(K-Nearest Neighbor)

CNN(Convolutional Neural Network)

CNN은 딥러닝에서 이미지나 영상 데이터를 처리할 때 쓰이며, Convolution이라는 전처리 작업이 들어가는 신경망이다.

CNN을 쓰기 시작한 이유는 DNN의 문제점 때문이다.

DNN(Deep Neural Network)은 기본적으로 1차원의 데이터를 사용한다.

하지만 이미지의 경우 2차원의 형태이기 때문에 이를 한 줄 데이터로 만들어야 했는데, 이 과정에서 이미지의 데이터(공간적/지역적 정보)가 손실되었다.

이런 문제점을 해결하기 위해 만들어진 것이 CNN이다.

CNN은 이미지를 그대로 받아 데이터를 유지한 채 특성들의 계층을 쌓는다.

CNN의 주요 특징에는 이미지 전체보다 부분을 보는 것, 이미지의 한 픽셀과 주변의 픽셀들의 연관성을 살리는 것이 있다.

 

Classification(CNN) 모델 만들기

Kaggle의 Garbage Classification 데이터셋을 사용했다.

Garbage Classification은 쓰레기를 분류하는 Classification으로 6가지 클래스로 구분된 다양한 쓰레기 사진으로 학습하여 쓰레기를 판지, 유리, 금속, 종이, 플라스틱, 일반쓰레기의 6가지 종류로 분류한다.

 

데이터셋의 사진들을 224x224 크기로 사이즈 조정을 해주고 사진은 X 데이터로, 사진의 클래스는 Y 데이터로 만들어준다.

이 과정에서 데이터셋의 약 10%를 validation data(val_X, val_Y)로 만들어주었다.

총 6개의 클래스로 분류하는 것이니 Y와 val_Y를 아래와 같이 one hot 해준다.

Y = tf.one_hot(Y, 6)
val_Y = tf.one_hot(val_Y, 6)

Garbage Classification을 분류하는 모델을 VGGNet과 ResNet으로 두 가지 모델을 만들어 봤다.

 

VGGNet

모델은 아래의 그림을 보고 만들었다.

VGGNet

그림의 한 과정이 끝날 때마다 BatchNormalization과 Dropout을 해주었다.

완성된 모델을 summary 하면 아래와 같은 결과가 나온다.

VGGNet 모델

앞서 만든 X와 Y를 각각 입력 데이터, 출력 데이터로 하고, val_X, val_Y를 validation data로 지정하여 모델을 학습시키면 아래와 같은 결과가 나온다.

입력 데이터와 출력 데이터에 대한 loss와 precision, recall 그리고 validation data에 대한 loss와 precision, recall을 확인할 수 있다.

model.compile("adam", "bce", metrics  = [tf.keras.metrics.Precision(), tf.keras.metrics.Recall()])
model.fit(X, Y, batch_size = 32, epochs = 100, validation_data=(val_X, val_Y))

VGGNet 모델 학습 결과

모델의 precision과 val_precision, recall과 val_recall을 그래프로 나타내면 아래와 같다.

왼쪽의 그래프가 precision과 val_precision의 변화를 나타낸 것이고, 오른쪽의 그래프가 recall과 val_recall의 변화를 나타낸 것이다.

그래프의 파란색 선이 precision과 recall이고 주황색 선이 val_precision과 val_recall이다.

VGGNet 모델의 학습 중 precision과 recall 변화

ResNet

모델은 아래의 그림을 보고 만들었다.

ResNet

그림의 한 과정이 끝날 때마다 BatchNormalization을 해주었다.

완성된 모델을 summary하면 아래와 같은 결과가 나온다.

ResNet 모델

앞서 만든 X와 Y를 각각 입력 데이터, 출력 데이터로 하고, val_X, val_Y를 validation data로 지정하여 모델을 학습시키면 아래와 같은 결과가 나온다.

model_res.compile("adam", "bce", metrics = [tf.keras.metrics.Precision(), tf.keras.metrics.Recall()])
model_res.fit(X, Y, batch_size = 32, epochs = 100, validation_data=(val_X, val_Y))

ResNet 모델 학습 결과

모델의 precision과 val_precision, recall과 val_recall을 그래프로 나타내면 아래와 같다.

왼쪽의 그래프가 precision과 val_precision의 변화를 나타낸 것이고, 오른쪽의 그래프가 recall과 val_recall의 변화를 나타낸 것이다.

그래프의 파란색 선이 precision과 recall이고 주황색 선이 val_precision과 val_recall이다.

ResNet 모델의 학습 중 precision과 recall의 변화

'2022 하계 모각코' 카테고리의 다른 글

[6회차] AI - Regression  (0) 2022.08.09
[6회차] 학습 계획서  (0) 2022.08.09
[5회차] 학습 계획서  (0) 2022.08.04
[4회차] Deep Learning - AutoEncoder  (0) 2022.07.26
[4회차] Deep Learning - MLP(Multi-Layer Perceptron)  (0) 2022.07.26