scikit-learn의 다층 Perceptron에서 Softmax를 활성화 기능으로 적용하는 방법은 무엇입니까? [닫은]


9

scikit의 다층 Perceptron에 Softmax 활성화 기능을 적용해야합니다. 신경망 모델 (관리 대상) 주제에 대한 scikit 문서"MLPClassifier가 Softmax를 출력 함수로 적용하여 다중 클래스 분류를 지원합니다." 라고 말합니다 . 문제는 기능을 적용하는 방법입니다.

아래 코드 조각에서 Softmax를 활성화 매개 변수 아래에 추가하면 허용되지 않습니다.

MLPClassifier(activation='Softmax', alpha=1e-05, batch_size='auto',
       beta_1=0.9, beta_2=0.999, early_stopping=False,
       epsilon=1e-08, hidden_layer_sizes=(15,), learning_rate='constant',
       learning_rate_init=0.001, max_iter=200, momentum=0.9,
       nesterovs_momentum=True, power_t=0.5, random_state=1, shuffle=True,
       solver='lbfgs', tol=0.0001, validation_fraction=0.1, verbose=False,
       warm_start=False)

오류 코드는 다음과 같습니다

ValueError : 'Softmax'활성화가 지원되지 않습니다. 지원되는 활성화는 ( 'identity', 'logistic', 'tanh', 'relu')입니다.

scikit-learn에서 멀티 클래스 분류에 Softmax 활성화 기능을 적용하는 방법이 있습니까?

답변:


7

메소드를 호출하여 확률 예측을 요청할 때 Softmax 함수가 적용되는 것으로 가정합니다 mlp.predict_proba(X).

내 가정을 뒷받침하기 위해 나는이 작은 실험을 개발했다 :

from sklearn.neural_network import MLPClassifier
from sklearn.datasets import load_iris
import numpy as np

X,Y = load_iris().data, load_iris().target

mlp = MLPClassifier()
mlp.fit(X, Y)

print mlp.predict([3.1,  2.5,  8.4,  2.2])
print mlp.predict_proba([3.1,  2.5,  8.4,  2.2])
print "sum: %f"%np.sum(mlp.predict_proba([3.1,  2.5,  8.4,  2.2]))

어떤 값에 연결되어 있든지 predict_proba()출력 확률 벡터는 항상 1의 합계입니다. 이는 Softmax 활성화 기능에 의해서만 달성 될 수 있습니다 (Softmax 이외의 활성화를 사용하면 최종의 활성화 합계가 보장되지 않습니다) 레이어는 정확히 보이지 않으며 특히 보이지 않는 샘플의 경우).

내 추측이 맞다면 문서를 보면 Softmax 이전에 네트워크의 출력을 얻는 방법을 찾을 수 없습니다 ... 아마도이 클래스는 분류 (회귀 또는 기타 멋진 설정이 아닌)만을위한 것입니다.


4

MLPClassifier는 "멀티 클래스 분류", "이진 분류"및 "멀티 라벨 분류"에 사용할 수 있습니다. 따라서 출력 레이어는 Y 유형에 따라 결정됩니다.

  1. 멀티 클래스 : 가장 바깥 쪽 레이어는 softmax 레이어입니다

  2. 멀티 라벨 또는 이진 클래스 : 최 외곽 레이어는 로지스틱 / 시그 모이 드입니다.

  3. 회귀 : 가장 바깥층은 정체성

그것을 확인하는 MLPClassifier에서 사용되는 sklearn의 코드 일부 :

        # Output for regression
        if not is_classifier(self):
            self.out_activation_ = 'identity'
        # Output for multi class
        elif self._label_binarizer.y_type_ == 'multiclass':
            self.out_activation_ = 'softmax'
        # Output for binary class and multi-label
        else:
            self.out_activation_ = 'logistic'
  1. 멀티 클래스 분류 : Feature X의 경우 하나의 클래스 만있을 수 있습니다. 예 : 감정 분석 Text (X)가 주어지면 출력 (Y)은 양, 중립 또는 음입니다. 바이너리는 2 개의 가능한 출력 만있는 멀티 클래스의 경우입니다.
  2. 다중 레이블 분류 : Feature X의 경우 여러 클래스가있을 수 있습니다.

1

Daniel Lopez의 답변에 동의 할 수 없습니다. 제 경우에는 predict_proba ()가 softmax 결과를 반환하지 않습니다.

TrideepRath의 답변으로이 문제를 쉽게 해결할 수 있습니다. softmax를 적용하려면 out_activation_을 정의하십시오.

your_model.out_activation_ = 'softmax'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.