T'SPACE

다채로운 에디터들의 이야기

컴퓨터공학/인공지능

이진 분류 Binary Classification

Tonny Kang 2024. 8. 3. 15:32
반응형

이진 분류


두 클래스 중 하나로 분류하는 것은 흔한 머신 러닝 문제입니다.

원시 데이터에서는 클래스가 "Yes""No", 또는 "Dog""Cat"와 같은 문자열로 표현될 수 있습니다. 이러한 데이터를 사용하기 전에 클래스 레이블을 할당합니다: 하나의 클래스는 0, 다른 하나는 1로 할당합니다. 숫자 레이블을 할당하면 데이터가 신경망에서 사용할 수 있는 형태가 됩니다.

정확도와 교차 엔트로피


정확도(Accuracy)는 분류 문제에서 성공을 측정하는 데 사용되는 여러 메트릭 중 하나입니다. 정확도는 올바른 예측의 비율을 총 예측의 비율로 나타냅니다: accuracy = number_correct / total. 항상 정확하게 예측하는 모델은 정확도 점수가 1.0이 됩니다. 모든 조건이 동일하다면, 데이터셋의 클래스가 비슷한 빈도로 발생할 때 정확도는 합리적인 메트릭입니다.

정확도(및 대부분의 다른 분류 메트릭)의 문제는 손실 함수로 사용할 수 없다는 것입니다. SGD는 부드럽게 변화하는 손실 함수가 필요하지만, 정확도는 카운트의 비율이기 때문에 "점프"로 변합니다. 따라서, 우리는 대체할 손실 함수를 선택해야 합니다. 이 대체물은 교차 엔트로피 함수입니다.

이제 손실 함수는 훈련 중 네트워크의 목표를 정의한다는 것을 기억하십시오. 회귀에서는 예상 결과와 예측된 결과 간의 거리를 최소화하는 것이 목표였습니다. 우리는 이 거리를 측정하기 위해 MAE를 선택했습니다.

분류에서는 우리가 원하는 것은 확률 간의 거리이며, 이것이 교차 엔트로피가 제공하는 것입니다. 교차 엔트로피는 한 확률 분포에서 다른 확률 분포까지의 거리 측정과 같습니다.

교차 엔트로피는 잘못된 확률 예측을 페널티화합니다.

아이디어는 네트워크가 확률 1.0로 올바른 클래스를 예측하기를 원한다는 것입니다. 예측된 확률이 1.0에서 멀어질수록 교차 엔트로피 손실이 커집니다.

728x90

시그모이드 함수로 확률 생성


교차 엔트로피와 정확도 함수는 모두 입력으로 확률을 필요로 합니다. 즉, 0에서 1 사이의 숫자입니다. 밀집층이 생성한 실수 값을 확률로 변환하기 위해 시그모이드 활성화라는 새로운 유형의 활성화 함수를 추가합니다.

시그모이드 함수는 실수를 [0,1] 구간으로 매핑합니다

 

최종 클래스 예측을 얻기 위해 임계값 확률을 정의합니다. 일반적으로 이는 0.5가 되어, 반올림하면 올바른 클래스가 됩니다: 0.5 미만은 레이블이 0인 클래스, 0.5 이상은 레이블이 1인 클래스를 의미합니다.

반응형

시그모이드 활성화 및 교차 엔트로피 손실을 사용하는 케라스 모델


최종 층에 'sigmoid' 활성화를 포함하여 모델이 클래스 확률을 생성하도록 합니다.

from tensorflow import keras
from tensorflow.keras import layers

model = keras.Sequential([
    layers.Dense(4, activation='relu', input_shape=[33]),
    layers.Dense(4, activation='relu'),    
    layers.Dense(1, activation='sigmoid'),
])

compile 메서드를 사용하여 모델에 교차 엔트로피 손실과 정확도 메트릭을 추가합니다. 두 클래스 문제의 경우 'binary' 버전을 사용해야 합니다. (더 많은 클래스가 있는 문제는 약간 다릅니다.) Adam 옵티마이저는 분류에도 잘 작동하므로 그대로 사용합니다.

model.compile(
    optimizer='adam',
    loss='binary_crossentropy',
    metrics=['binary_accuracy'],
)
반응형