import seaborn as sns
import matplotlib.pyplot as plt
sns.pairplot(df, hue='species')
plt.show()
여러 개의 값으로 된 문자열을 0과 1로만 이루어진 형태로 만들어 주는 과정을 원-핫 인코딩(one-hot encoding)이라고 합니다. 원-핫 인코딩은 판다스가 제공하는 get_dummies() 함수를 사용하면 간단하게 해낼 수 있습니다.
# 원-핫 인코딩 처리를 합니다.
y = pd.get_dummies(y)
# 원-핫 인코딩 결과를 확인합니다.
print(y[0:5])
Iris-setosa Iris-versicolor Iris-virginica
0 1 0 0
1 1 0 0
2 1 0 0
3 1 0 0
4 1 0 0
소프트맥스(softmax)는 다중 클래스 분류를 위한 함수로, 각 클래스에 대한 확률을 예측하는 데 사용됩니다. 이 함수는 각 클래스에 대한 예측값을 0과 1 사이의 값으로 정규화하며, 이들의 합이 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
# 깃허브에 준비된 데이터를 가져옵니다.
!git clone https://github.com/taehojo/data.git
# 아이리스 데이터를 불러옵니다.
df = pd.read_csv('./data/iris3.csv')
# 속성을 X, 클래스를 y로 저장합니다.
X = df.iloc[:,0:4]
y = df.iloc[:,4]
# 원-핫 인코딩 처리를 합니다.
y = pd.get_dummies(y)
# 모델 설정
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'])
# 모델 실행
history = model.fit(X, y, epochs=50, batch_size=5)
Epoch 1/30
30/30 [==============================] - 2s 2ms/step - loss: 1.4888 - accu
racy: 0.3333
... (중략) ...
Epoch 30/30
30/30 [==============================] - 0s 2ms/step - loss: 0.2746 - accu
racy: 0.9667
다음과 같은 결과가 나왔다.