programming/Python

tensorflow 딥러닝 모델 구축하기 with Iris 데이터셋

Jofresh 2023. 7. 20. 21:28
728x90
반응형

tensorflow 설치 

pip install tensorflow

 

예제 코드

예제에서는 Iris 데이터셋을 사용하며, 클래스 1과 2를 하나의 클래스로 묶어 이진 분류 문제로 변환합니다. 

또한 특성 데이터를 표준화하여 평균이 0이고 분산이 1이 되도록 처리합니다. 

 

딥러닝 모델은 3개의 Dense 레이어를 사용하며, 각 레이어는 ReLU 활성화 함수를 사용하고, 이진 분류를 위해 마지막 레이어는 시그모이드 활성화 함수를 사용합니다. 

 

Adam 옵티마이저와 이진 교차 엔트로피 손실로 모델을 컴파일하고, 테스트 세트에서 모델의 성능을 평가합니다.

 

import tensorflow as tf
import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler

# Iris 데이터셋 불러오기
iris = load_iris()
X, y = iris.data, iris.target

# 타겟을 이진 분류 문제로 변환
y_binary = np.where(y == 0, 0, 1)

# 데이터를 훈련과 테스트 세트로 분할
X_train, X_test, y_train, y_test = train_test_split(X, y_binary, test_size=0.2, random_state=42)

# 데이터 표준화
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

# 딥러닝 모델 정의
model = tf.keras.Sequential([
    tf.keras.layers.Input(shape=(4,)),
    tf.keras.layers.Dense(16, activation='relu'),
    tf.keras.layers.Dense(8, activation='relu'),
    tf.keras.layers.Dense(1, activation='sigmoid')
])

# 모델 컴파일
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

# 모델 훈련
epochs = 50
batch_size = 32
model.fit(X_train_scaled, y_train, epochs=epochs, batch_size=batch_size, validation_split=0.1)

# 테스트 세트에서 모델 평가
loss, accuracy = model.evaluate(X_test_scaled, y_test)
print(f"테스트 손실: {loss:.4f}, 테스트 정확도: {accuracy:.4f}")

 

#출력 결과

 

 

이진 분류 문제를 해결하기 위해 딥러닝 모델을 사용한 결과를 보여줍니다. 따라서 결과를 해석할 때는 주어진 데이터셋에 대해 모델이 어떻게 동작하는지를 이해해야 합니다.

 

1.훈련 과정:

  • 모델은 주어진 훈련 데이터(X_train_scaled)를 사용하여 학습되었습니다.
  • 지정한 에포크(epochs) 수(50회) 동안 반복하여 훈련하였습니다.
  • 배치 크기(batch_size)는 32로 설정하여 각 반복에서 32개의 데이터를 사용해 가중치를 업데이트하였습니다.
  • 학습 중에는 검증 데이터(validation_split)를 사용해 모델의 성능을 모니터링하고 오버피팅을 방지하도록 하였습니다.

2.테스트 결과:

  • 테스트 데이터(X_test_scaled)를 사용하여 학습된 모델의 성능을 평가하였습니다.
  • 평가 결과로서, 테스트 손실(Test Loss)과 테스트 정확도(Test Accuracy)를 출력합니다.

 

해석:

  • 테스트 손실(Test Loss): 모델의 예측 값과 실제 정답(레이블) 사이의 차이를 나타내는 지표입니다. 일반적으로 손실이 작을수록 좋은 모델입니다. 따라서 테스트 손실 값이 낮을수록 모델이 테스트 데이터에 대해 더 잘 일반화되었다고 볼 수 있습니다.
  • 테스트 정확도(Test Accuracy): 모델의 예측이 실제 레이블과 얼마나 일치하는지를 나타내는 지표입니다. 0과 1로 이진 분류를 수행하는 경우, 정확도는 맞은 예측의 비율을 나타냅니다. 예를 들어, 0.85의 정확도는 모델이 테스트 데이터에서 85%의 경우에 정확하게 예측했다는 것을 의미합니다. 따라서 테스트 정확도 값이 높을수록 모델이 테스트 데이터에서 더 잘 동작한다고 판단할 수 있습니다.

따라서, 위 예제에서 출력된 테스트 손실과 테스트 정확도 값은 해당 모델의 성능을 나타내며, 이 모델이 이진 분류 문제를 얼마나 잘 해결하는지를 평가하는데 사용됩니다. 더 높은 정확도와 낮은 손실 값이 보다 우수한 모델을 나타냅니다.

 

 

출력 결과를 자세히 해석해보겠습니다.

 

위 출력 결과는 모델의 훈련 과정을 보여주는 로그입니다. 각 에포크(epoch)별로 훈련 손실(loss)과 훈련 정확도(accuracy)가 표시되어 있으며, 검증 세트(validation set)에 대한 검증 손실(val_loss)과 검증 정확도(val_accuracy)도 함께 제공됩니다.

 

이제 결과를 분석해보겠습니다.

  • 훈련 과정 분석:
  1. 훈련 손실과 훈련 정확도: 에포크가 진행됨에 따라 훈련 손실과 훈련 정확도가 점차 개선되는 것을 볼 수 있습니다. 이는 모델이 훈련 데이터에 대해 더 잘 학습되고 있다는 의미입니다.
  2. 검증 손실과 검증 정확도: 검증 손실과 검증 정확도는 에포크가 진행되면서 점차 개선되고 있습니다. 이는 모델이 훈련 데이터뿐만 아니라 새로운 데이터에 대해서도 잘 일반화되고 있다는 것을 의미합니다.
  • 테스트 결과 분석:
  1. 테스트 손실과 테스트 정확도: 테스트 손실과 테스트 정확도는 마지막 에포크에서 측정된 값입니다. 테스트 손실은 약 0.0568이고, 테스트 정확도는 1.0000입니다. 이것은 테스트 데이터에 대해 모델이 매우 잘 동작하고 있다는 뜻입니다. 테스트 정확도가 1.0000으로 매우 높으므로 이 모델은 테스트 데이터에서 100%의 정확도로 예측을 수행할 수 있습니다.

 

결론적으로, 이 모델은 테스트 데이터에 대해 높은 정확도로 이진 분류를 수행할 수 있으며, 이 데이터셋에 대해 매우 좋은 모델로 평가될 수 있습니다. 하지만 이 결과는 주어진 특정 데이터셋에 대한 것이므로, 다른 데이터셋이나 문제에 대해서는 성능이 다를 수 있습니다. 따라서 모델을 실전에서 사용할 때에는 적절한 검증과 성능 평가를 수행하는 것이 중요합니다.

 

728x90
반응형