딥러닝 다중 분류 문제

전수향·2023년 4월 17일
0

인공지능

목록 보기
7/10

오늘은 인공지능 프로그래밍 시간에 배운 다중 분류 문제 해결에 대해 알아보자.

1. Iris 시각화

꽃잎 모양과 길이에 따라 여러 품종으로 나뉘는 아이리스 꽃이 다중 분류 문제의 좋은 예시다. 아이리스 데이터를 시각화 해보자.

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# 깃허브에 준비된 데이터를 가져옵니다.
!git clone https://github.com/taehojo/data.git   

# 아이리스 데이터를 불러옵니다.
df = pd.read_csv('./data/iris3.csv')

sns.pairplot(df, hue='species'); ----- ➊
plt.show()

깃허브에 준비된 데이터를 불러와서, pairplot을 통해 전체 상관도를 볼 수 있습니다. 위 상관도 그래프를 통해 사진상으로 비슷해 보이던 꽃잎과 꽃받침의 크기와 너비가 품종별로 어떤 차이가 있는지 알 수 있다.

2. One Hot encoding

여러 개의 값으로 된 문자열을 0과 1로만 이루어진 형태로 만들어 주는 과정을 원-핫 인코딩(one-hot encoding)이라고 한다.

원-핫 인코딩을 파이썬 코드로 작성해보자.

X = df.iloc[:,0:4]
y = df.iloc[:,4]

# 원-핫 인코딩 처리를 합니다.
y = pd.get_dummies(y)

# 원-핫 인코딩 결과를 확인합니다.
print(y[0:5])

불러왔던 데이터 프레임을 X, Y로 나누고, 원-핫 인코딩 처리 후 결과를 확인해보면

실행 결과

Iris-setosaIris-setosaIris-versicolorIris-virginica
0100
1100
2100
3100
4100

가 나온다.

3. Softmax

# 모델 설정
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.compile(loss='categorical_crossentropy', optimizer='adam',
metrics=['accuracy'])

앞서 했던 것과 달리 model에 Dense에 3과 activation에 softmax를 넣는다.
그리고 이항 분류에서 binary_crossentropy를 썼다면, 다항 분류에서는 categorical_crossentropy를 쓰면 된다.

4. 결과

# 모델 실행
history = model.fit(X, y, epochs=50, batch_size=5)

마지막으로 모델을 실행해보면 정확도 96.0%가 나온다.

profile
꿈나무 개발자

0개의 댓글