#4-12 다중분류
binary와 다르게 3개 이상으로 분류하는 것이 필요할 경우 다중분류를 사용해야 한다.
사용하는 방법이 엄청나게 다르진 않지만 미묘~ 하게 다르며 몇가지 이해하고 가야할 내용들이 있다.
일단 먼저 분석할 준비를 한다.
#필요한 라이브러리 가져오기
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
|
데이터의 경향성을 확인해보자
seaborn에서 다양한 그래프 기능을 제공해주는데 이 중에서 pairplot을 사용하면 그래프로 상관도를 볼 수 있다.
색상을 species에 줘서 각 꽃의 종류에 따라 상관분포를 볼 수 있게 했다.
그래프를 보니..뭔가 있어보이긴한다..
1. 데이터 확인하기
sns.pairplot(df,hue='species');
plt.show()
|
2. 원핫인코딩
다음으로는 이번 장에서의 꽃인 원핫인코딩이다.
원핫인코딩이란 한 컬럼에 분류된 카테고리를 세 컬럼으로 나누고 이를 0과 1로 재기재해주는 방식이다.
현재엔 y에 배정한 species가 아래처럼 나오는데
0 Iris-setosa
1 Iris-setosa
2 Iris-setosa
3 Iris-setosa
4 Iris-setosa
원핫인코딩을 하면 다음처럼 나온다
이렇게 해야 컴퓨터가 아 얘가 여기에 해당하는 애고 저기에 해당하는 애구나 를 분류할 수 있게 된다.
그런데 원핫인코딩을 이미 천재님들께서 편하게 만들게 해줘서 그냥 간단하게 판다스로 할 수 있음. 댕꿀!
#x.y정해주기
X = df.iloc[: , :4]
y = df.iloc[: , 4]
#원핫인코딩 해주기
y = pd.get_dummies(y)
|
3. 소프트맥스
딥러닝 모델을 만들건데 이번엔 활성화 함수를 시그모이드가 아니라 소프트맥스를 사용한다.
소프트맥스를 사용하는 이유는 출력값이 0과 1, 2개가 아니라 3개가 되었기 때문이다.
시그모이드 함수를 사용할 때엔 0.5이상이면 1로 0.5이하면 0으로 판단했으나 ... 3개면....?
그래서 소프트맥스 활성화 함수를 사용한다.
소프트맥스 활성화 함수는 각 카테고리에 해당할 확률 (모두 다하면 1)을 구해주며 이 중 가장 높은 것으로 분류해주게 된다.
#모델설정
model = Sequential()
model.add(Dense(12, input_dim = 4, activation='relu'))
model.add(Dense(8,activation = 'relu'))
model.add(Dense(3,activation = 'softmax'))
model.summary()
|
Model: "sequential_1"
_________________________________________________________________
Layer (type) Output Shape Param # =================================================================
dense_3 (Dense) (None, 12) 60
dense_4 (Dense) (None, 8) 104
dense_5 (Dense) (None, 3) 27
================================================================= Total params: 191 Trainable params: 191 Non-trainable params: 0
또한 오차함수를 categorical 로 변경해줘야한다.
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
history = model.fit(X,y, epochs = 50, batch_size = 5)
|
이렇게 하게 되면 정확도는 96.0%가 나오게 된다.
지금까지 이항, 다항분류에서 분류 예측을 살펴보았는데
이 정확도를 어떻게 신뢰할 수 있는 지 예측 결과의 신뢰도를 높이는 방법을 담에 알아보려고 한다!
그건 놀고 와서!
'👩💻LEARN : ML&Data > Book Study' 카테고리의 다른 글
[모두의 딥러닝] #4-14. 모델 성능 향상시키 (0) | 2023.02.20 |
---|---|
[모두의 딥러닝] #4-13. 모델 성능 검증하기 (0) | 2023.02.19 |
[모두의 딥러닝] #4-11. 데이터 다루기 : 피마 인디언 데이터 예측하기 (0) | 2023.02.16 |
[모두의 딥러닝] #4-10. 딥러닝 모델 설계하기 (0) | 2023.02.15 |
[모두의 딥러닝] #3-8. 오차역전파 : 은닉층 오차 수정과 계산 (0) | 2023.02.14 |