[NLP] 머신 러닝 - (10) 소프트맥스 회귀 실습

김규리·2022년 7월 12일
0

NLP

목록 보기
32/33
post-thumbnail

1. 아이리스 품종 데이터에 대한 이해 및 전처리

샘플의 개수 : 150
   Id  SepalLengthCm  SepalWidthCm  PetalLengthCm  PetalWidthCm      Species
0   1            5.1           3.5            1.4           0.2  Iris-setosa
1   2            4.9           3.0            1.4           0.2  Iris-setosa
2   3            4.7           3.2            1.3           0.2  Iris-setosa
3   4            4.6           3.1            1.5           0.2  Iris-setosa
4   5            5.0           3.6            1.4           0.2  Iris-setosa
sns.set(style="ticks", color_codes=True)
g = sns.pairplot(data, hue="Species", palette="husl")

# 원-핫 인코딩 수행 전 정수 인코딩
# Iris-virginica는 0, Iris-setosa는 1, Iris-versicolor는 2가 됨.
data['Species'] = data['Species'].replace(['Iris-virginica','Iris-setosa','Iris-versicolor'],[0,1,2])

# 종속 변수와 독립 변수 데이터로 분리
# X 데이터, 특성은 총 4개
data_X = data[['SepalLengthCm', 'SepalWidthCm', 'PetalLengthCm', 'PetalWidthCm']].values

# Y 데이터, 예측 대상
data_y = data['Species'].values

# 훈련 데이터와 테스트 데이터를 8:2로 분리
(X_train, X_test, y_train, y_test) = train_test_split(data_X, data_y, train_size=0.8, random_state=1)

# 원-핫 인코딩
y_train = to_categorical(y_train)
y_test = to_categorical(y_test)

2. 소프트맥스 회귀

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

model = Sequential()
model.add(Dense(3, input_dim=4, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) # 옵티마이저는 경사 하강법의 일종인 아담(adam) 사용
history = model.fit(X_train, y_train, epochs=200, batch_size=1, validation_data=(X_test, y_test))

# accuracy: 훈련 데이터에 대한 정확도
# val_accuracy: 테스트 데이터에 대한 정확도

# 한 번 에포크에 따른 정확도
epochs = range(1, len(history.history['accuracy']) + 1)
plt.plot(epochs, history.history['loss'])
plt.plot(epochs, history.history['val_loss'])
plt.title('model loss')
plt.ylabel('loss')
plt.xlabel('epoch')
plt.legend(['train', 'val'], loc='upper left')
plt.show()


ㄴ 에포크가 증가함에 따라 오차(loss)가 점차적으로 줄어듦

print("\n 테스트 정확도: %.4f" % (model.evaluate(X_test, y_test)[1]))
# 테스트 정확도: 0.9667
profile
connecting the dots

0개의 댓글