아이리스(iris) 품종 데이터
- 아이리스 꽃잎의 모양과 길이에 따라 세 가지 품종으로 나눈 데이터
- 여러 개의 답 중 하나를 고르는 다중 분류 사용
1. 환경 및 데이터 준비
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
# 아이리스 데이터를 불러옴
df = pd.read_csv('./data/iris3.csv')
2. 상관도 그래프 - 시본(seaborn) 라이브러리 활용
- pairplot()
: 데이터프레임에 있는 모든 수치형 변수들 간의 관계를 시각화
: 각 변수 쌍에 대해 산점도(scatter plot)와 히스토그램(histogram)을 함께 그려줌
: seaborn에 존재
- hue : 주어진 데이터 중 어떤 카테고리를 중심으로 그릴지 결정하는 옵션
sns.pairplot(df, hue='species');
plt.show()
3. 원 - 핫 인코딩
- 여러 개의 값으로 된 문자열을 0과 1로만 이루어진 형태로 만들어 주는 과정
- 각 범주를 이진 형태의 벡터로 표현하여 해당 범주에 해당하는 인덱스만 1이고 나머지는 모두 0인 형태로 변환
# 속성을 X, 클래스를 y로 저장
X = df.iloc[:,0:4]
y = df.iloc[:,4]
# X와 y의 첫 5줄을 출력
print(X[0:5])
print(y[0:5])
- get_dummies()
: 각 범주에 해당하는 열을 생성하고, 해당 범주에 해당하는 행에는 1을, 나머지 행에는 0을 할당
: 범주형 변수를 원 - 핫 인코딩할 때 사용
: pandas에 존재
# 원-핫 인코딩 처리
y = pd.get_dummies(y)
# 원-핫 인코딩 결과를 확인
print(y[0:5])
4. 소프트맥스(softmax)
- 입력된 값들을 다중 분류 문제에서 각 클래스에 속할 확률로 변환하는 활성화 함수
- 각 항목당 예측 확률을 0과 1 사이의 값으로 나타내줌
- 각 샘플당 예측 확률의 총합이 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.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
- categorical_crossentropy
: 다항 분류에서 사용하는 손실 함수
- 모델 실행
history=model.fit(X, y, epochs=30, batch_size=5)
'모두의 딥러닝 개정 3판'의 내용과 https://github.com/taehojo/deeplearning의 코드 참고