소프트맥스함수 (Softmax Funnction)는 다중분류에서 각클래스별 예측출력값을 0에서 1사이의 확률로 압축하고 전체 합이 1이 되도록 변환합니다.
k차원의 벡터에서 i번째 원소를 z_i, i번째 클래스가 정답일 확률을 p_i로 나타낸다고 하였을 때, 소프트맥스 함수는 를 다음과 같이 정의합니다.
만약 k=3이라면, 소프트맥스 함수는 아래와 같은 출력을 리턴합니다. 여기서, p1은 1번 class일 확율을 나타내고, 전체 확율의 합은 1입니다.
Logistric regression의 다중분류를 한 예로 보면, 아래와 같이 Fish 데이터가 어떤 class일 확율을 scikit-learn의 Logistic Regression을 이용하여 softmax 함수로 구하고 있음을 알수 있습니다.
from sklearn.linear_model import LogisticRegression
lr = LogisticRegression(C=20, max_iter=1000)
lr.fit(train_scaled, train_target)
decision = lr.decision_function(test_scaled[:5])
proba = softmax(decision, axis=1)
print(np.round(proba, decimals=3))
이때의 결과는 아래와 같습니다. 여기서, Fish0의 데이터는 Perch인 확율이 0.841임을 알수 있습니다.