본문 바로가기
PYTHON/딥러닝

[PYTHON] 딥러닝 분류 모델 (Classifier Model)

by G허니 2024. 4. 28.

딥러닝 분류는 딥러닝(신경망)을 사용하여 데이터를 여러 범주(Class)로 분류하는 기술입니다. 주어진 입력 데이터가 어떤 범주에 속하는지를 예측하는 문제를 해결합니다. 딥러닝 분류는 이미지, 텍스트, 음성 등 다양한 유형의 데이터에 적용될 수 있습니다. 이를 통해 이미지 분류, 텍스트 감성 분석, 음성 인식 등 다양한 응용 분야에서 활용됩니다.

 

 

알고리즘 동작 방식:

  1. 인공 신경망 구성: 딥러닝 분류는 여러 층으로 구성된 인공 신경망을 사용합니다. 이 신경망은 입력층, 은닉층(하나 이상), 출력층으로 구성되며, 각 층은 뉴런(노드)으로 구성됩니다.
  2. 순전파(Forward Propagation): 입력 데이터가 인공 신경망의 입력층으로 전달되고, 각 층의 가중치와 편향을 고려하여 계산된 출력이 순차적으로 전달됩니다. 이러한 과정을 통해 최종 출력값을 예측합니다.
  3. 활성화 함수 사용: 각 층의 출력값에 활성화 함수가 적용됩니다. 주로 사용되는 활성화 함수로는 시그모이드(Sigmoid), 렐루(ReLU), 소프트맥스(Softmax) 등이 있습니다.
  4. 손실 함수 계산: 예측된 출력값과 실제 출력값 간의 차이를 계산하기 위해 손실 함수가 사용됩니다. 분류 문제에서는 주로 크로스 엔트로피 손실 함수(Cross-Entropy Loss)가 사용됩니다.
  5. 역전파(Backpropagation): 손실 함수의 값을 최소화하기 위해 역전파 알고리즘이 사용됩니다. 이 과정에서 경사 하강법(Gradient Descent)을 통해 가중치와 편향이 조정되어 손실 함수를 최소화하는 방향으로 학습이 진행됩니다.
  6. 모델 평가: 학습된 딥러닝 모델은 테스트 데이터에 대해 예측을 수행하고, 평가 지표(예: 정확도, 정밀도, 재현율, F1 점수)를 사용하여 모델의 성능을 평가합니다.

주요 특징:

  • 비선형성: 딥러닝 모델은 비선형 함수를 사용하여 복잡한 데이터 패턴을 학습할 수 있습니다.
  • 자동 특징 추출: 딥러닝은 입력 데이터로부터 특징을 자동으로 추출하고 학습할 수 있습니다. 이는 특징 공학의 필요성을 줄여줍니다.
  • 스케일에 민감: 일반적으로 입력 데이터를 정규화하거나 표준화하는 것이 모델의 학습에 도움이 됩니다.

적용 분야:

  • 이미지 분류: 손글씨 인식, 객체 감지, 얼굴 인식 등의 이미지 분류 문제에 활용됩니다.
  • 텍스트 분류: 스팸 메일 분류, 감성 분석, 토픽 모델링 등의 텍스트 분류 문제에 사용됩니다.
  • 음성 인식: 음성 명령 인식, 스피치 투 텍스트 변환 등의 음성 인식 문제에 활용됩니다.
이진분류
from keras.models import Sequential
from keras.layers import Dense
from keras.backend import clear_session
from keras.optimizers import Adam

clear_session()

# 모델링
model = Sequential([
    Dense(64, input_shape=(n,), activation='relu'),
    Dense(32, activation='relu'),
    Dense(16, activation='relu'),
    Dense(1, activation='sigmoid')
])

# 모델 구조 확인
model.summary()

# 모델 컴파일
model.compile(optimizer=Adam(0.1), loss='binary_crossentropy')

# 모델 학습
hist = model.fit(x_train, y_train, epochs=50, validation_split=0.2, verbose=0).history

# 모델 예측 및 성능평가
pred = model.predict(x_val)
pred = np.where(pred>0.5, 1, 0) # 0.5를 기준으로 분류
print(classification_report(y_val, pred))

 

다중분류
from keras.models import Sequential
from keras.layers import Dense
from keras.backend import clear_session
from keras.optimizers import Adam

# 메모리 정리
clear_session()

# Sequential 타입 모델 선언
model = Sequential([Dense(64 , input_shape = (nfeatures,), activation = 'relu'),
                    Dense(32 , activation = 'softmax'),
                    Dense(16 , activation = 'softmax'),
                    Dense(3 , activation = 'softmax'), # 분류할 Class 만큼 출력
])

# 모델요약
model.summary()

# 모델 컴파일
model.compile(optimizer=Adam(learning_rate=0.01), loss= 'sparse_categorical_crossentropy')

# 모델 학습
history = model.fit(x_train, y_train, epochs = 50, validation_split=0.2).history

# 예측
pred = model.predict(x_val)
pred_1 = pred.argmax(axis=1) # # pred_1 = np.argmax(pred, axis = 1)

# 모델 평가
print(confusion_matrix(y_val, pred_1))
print(classification_report(y_val, pred_1))

 

딥러닝 분류는 딥러닝을 사용하여 데이터를 여러 범주로 분류하는 기술로, 비선형성, 자동 특징 추출, 다양한 응용 분야에 활용될 수 있는 유연성 등의 특징을 가지고 있습니다. 다양한 분야에서 높은 정확도와 성능을 보여줍니다.