PYTHON/딥러닝

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

G허니 2024. 4. 28. 21:38

딥러닝 분류는 딥러닝(신경망)을 사용하여 데이터를 여러 범주(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))

 

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