June is Combung
[KT AIVLE SCHOOL 3기] 딥러닝(2) 본문
1. 로지스틱 회귀
로지스틱 회귀(Logistic Regression)는 분류(Classification) 문제를 해결하는 데 사용되는 통계학적인 방법이다.
로지스틱 회귀는 선형 회귀(Linear Regression)와 비슷하지만, 출력 값이 이항 분류(Binary Classification) 문제에 대한 확률로 제한된다는 점에서 다르다.
로지스틱 회귀 모델은 입력 변수와 가중치의 선형 결합을 통해 로짓 함수(Logistic Function)를 계산하고, 이를 이용하여 확률 값을 계산한다. 로짓 함수는 S자 형태의 곡선을 그리며, 출력 값은 0에서 1 사이의 확률 값으로 제한된다.
로지스틱 회귀 모델은 주어진 입력 변수에 대한 출력 값을 이항 분류 문제에 대한 확률 값으로 해석할 수 있다.
이를 바탕으로 임계값(threshold)을 설정하여 분류 결정을 내릴 수 있다.
예를 들어, 임계값을 0.5로 설정하면 0.5보다 작은 확률 값을 0으로, 0.5보다 큰 확률 값을 1로 분류할 수 있다.
로지스틱 회귀는 분류 문제를 해결하는 데 널리 사용되며, 이진 분류 외에도 다중 분류(Multi-class Classification) 문제에도 확장하여 사용할 수 있다.
2. 코드로 구현
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
# 데이터셋 로드
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()
# 입력 데이터 전처리
x_train = x_train.reshape(-1, 784).astype("float32") / 255.0
x_test = x_test.reshape(-1, 784).astype("float32") / 255.0
# 모델 구성
model = keras.Sequential([
layers.Dense(10, activation="sigmoid", input_shape=(784,))
])
# 모델 컴파일
model.compile(optimizer="adam", loss="sparse_categorical_crossentropy", metrics=["accuracy"])
# 모델 학습
model.fit(x_train, y_train, batch_size=32, epochs=10, validation_data=(x_test, y_test))
위 코드는 MNIST 데이터셋을 로드하고, 입력 데이터를 전처리한 후 로지스틱 회귀 모델을 구성하고 컴파일한 후 학습시키는 코드이다. 모델은 `keras.Sequential`을 사용하여 구성하며, `layers.Dense`를 사용하여 로지스틱 회귀 모델을 구현한다.
활성화 함수로는 시그모이드 함수(`sigmoid`)를 사용하며, 손실 함수로는 `sparse_categorical_crossentropy`를 사용한다.
`sparse_categorical_crossentropy`는 원핫인코딩이 되어있지 않은 상태에서 쓰인다.
* 보통 이진분류에서는 'binary crossentropy'를 사용한다.
학습은 `model.fit`을 사용하여 수행한다.
로지스틱 회귀는 이진 분류 문제에 대한 확률 값을 예측하는 모델이기 때문에, MNIST 데이터셋과 같이 다중 클래스 분류 문제에 대해서는 사용하기에 적합하지 않다. 따라서, 다중 클래스 분류 문제에 대해서는 로지스틱 회귀 대신 다른 모델을 사용해야 한다.
3. 멀티 클래스 분류
멀티클래스 분류는 입력 데이터를 여러 개의 클래스 중 하나로 분류하는 문제를 말한다.
이를 해결하기 위해 다양한 인공 신경망 구조가 사용된다.
가장 간단한 멀티클래스 분류 모델은 다중 로지스틱 회귀(Multi-class Logistic Regression)이다.
다중 로지스틱 회귀는 여러 개의 로지스틱 회귀 모델을 결합하여 다중 클래스 분류 문제를 해결한다.
예를 들어, 10개의 클래스로 이루어진 MNIST 데이터셋의 경우, 10개의 로지스틱 회귀 모델을 사용하여 각 클래스에 대한 확률 값을 예측하고, 이를 결합하여 최종 클래스를 예측한다.
다른 멀티클래스 분류 모델로는 다중 퍼셉트론(Multi-layer Perceptron, MLP)이 있다.
MLP는 입력 계층, 은닉 계층, 출력 계층으로 구성되며, 각 계층은 여러 개의 노드로 구성된다.
은닉 계층은 입력 데이터의 특징을 추출하는 역할을 하고, 출력 계층은 각 클래스에 대한 확률 값을 출력한다.
MLP는 각 노드의 가중치와 편향을 학습하여 입력 데이터와 출력 데이터 사이의 비선형적인 관계를 모델링한다.
MLP는 다중 클래스 분류 문제를 해결하는 데 효과적이지만, 모델 구성과 하이퍼파라미터 조정이 어렵다는 단점이 있다.
최근에는 합성곱 신경망(Convolutional Neural Network, CNN)과 같은 딥러닝 모델이 많이 사용되고 있다.
CNN은 이미지와 같은 고차원 데이터를 처리하는 데 특화된 모델로, 이미지 분류 등의 문제에서 좋은 성능을 보인다.
4. 코드 구현
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
# 데이터셋 로드
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()
# 입력 데이터 전처리
x_train = x_train.reshape(-1, 28 * 28).astype("float32") / 255.0
x_test = x_test.reshape(-1, 28 * 28).astype("float32") / 255.0
# 모델 구성
model = keras.Sequential([
layers.Dense(512, activation="relu", input_shape=(784,)),
layers.Dropout(0.5),
layers.Dense(10, activation="softmax")
])
# 모델 컴파일
model.compile(optimizer="adam", loss="sparse_categorical_crossentropy", metrics=["accuracy"])
# 모델 학습
model.fit(x_train, y_train, batch_size=32, epochs=10, validation_data=(x_test, y_test))
위 코드는 MNIST 데이터셋을 로드하고, 입력 데이터를 전처리한 후 다중 클래스 분류 모델을 구성하고 컴파일한 후 학습시키는 코드이다. 모델은 `keras.Sequential`을 사용하여 구성하며, `layers.Dense`를 사용하여 다층 신경망을 구현한다.
활성화 함수로는 ReLU 함수(`relu`)와 소프트맥스 함수(`softmax`)를 사용하며, 드롭아웃(Dropout)을 사용하여 과적합(Overfitting)을 방지한다.
손실 함수로는 `sparse_categorical_crossentropy`를 사용한다.
원핫 인코딩이 되어있다면 'categorical crossentropy'를 사용한다.
위 코드에서 `layers.Dense(10, activation="softmax")`에서 `10`은 클래스의 개수를 의미한다.
따라서, 분류하고자 하는 클래스의 개수에 맞게 값을 설정해주어야 한다.
위 코드는 MNIST 데이터셋을 예시로 들었지만, 다른 멀티 클래스 분류 문제에 대해서도 같은 방법으로 모델을 구성하고 학습시킬 수 있다.
5. 선형회귀 / 로지스틱회귀 / 멀티클래스 분류
Function\Model | Linear Regression | Logistic Regression | Multi-class Classification |
Output Layer Activation Function |
(X) or linear | sigmoid | softmax |
Loss Function | mse | binary crossentropy | categorical crossentropy |
'KT AIVLE SCHOOL 기자단 > 강의' 카테고리의 다른 글
[KT AIVLE SCHOOL 3기] 이상탐지 (0) | 2023.04.25 |
---|---|
[KT AIVLE SCHOOL 3기] AI모델 해석평가 (0) | 2023.04.25 |
[KT AIVLE SCHOOL 3기] 딥러닝(1) (0) | 2023.04.24 |
[KT AIVLE SCHOOL 3기] 머신러닝 (0) | 2023.04.23 |
[KT AIVLE SCHOOL 3기] 웹크롤링 (0) | 2023.04.23 |
Comments