Scikit-learn'da çok katmanlı Perceptron'da Aktivasyon fonksiyonu olarak Softmax nasıl uygulanır? [kapalı]


9

Scikit çok katmanlı Perceptron Softmax aktivasyon fonksiyonunu uygulamak gerekir. Scikit dokümantasyonu Sinir ağı modellerinin konu (denetimli) diyor "MLPClassifier çıkış fonksiyonu olarak SoftMax uygulayarak çoklu sınıf sınıflandırma destekler." Soru, fonksiyonun nasıl uygulanacağıdır?

Aşağıdaki kod parçacığında, Softmax'ı aktivasyon parametresi altına eklediğimde kabul etmiyor.

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)

Hata kodu:

ValueError: 'Softmax' aktivasyonu desteklenmiyor. Desteklenen aktivasyonlar ('kimlik', 'lojistik', 'tanh', 'relu').

Scikit-learn'da çok sınıflı sınıflandırma için Softmax aktivasyon fonksiyonunu uygulamanın bir yolu var mı?

Yanıtlar:


7

Yöntemi çağırarak bir olasılık tahmini istediğinizde Softmax işlevinin uygulandığını varsayalım mlp.predict_proba(X).

Varsayımı desteklemek için bu küçük deneyi geliştirdim:

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]))

Hangi değerlerin takıldığına bakılmaksızın predict_proba(), çıkış olasılık vektörü daima 1'e kadar toplanır . Bu sadece Softmax aktivasyon fonksiyonu ile elde edilebilir (Softmax dışında bir aktivasyon kullanılarak finaldeki aktivasyonların toplamının garanti edilemeyeceği katman tam olarak bir tane olacak, özellikle görünmeyen bir örnek için).

Eğer tahminim doğru ise, belgelere bakarak Softmax'tan önce ağın çıktısını almak için herhangi bir yöntem bulamıyorum ... Belki de bu sınıf sadece sınıflandırma amaçlıdır (regresyon veya diğer süslü kurulumlar değil).


4

MLPClassifier, "çok sınıflı sınıflandırma", "ikili sınıflandırma" ve "çok etiketli sınıflandırma" için kullanılabilir. Böylece çıktı katmanı Y türüne göre belirlenir:

  1. Çok sınıf : En dış katman softmax katmanıdır

  2. Çok etiketli veya İkili sınıf : En üstteki katman lojistik / sigmoid'dir.

  3. Regresyon : En dış katman kimliktir

MLPClassifier içinde kullanılan sklearn kodunun bunu onaylayan kısmı:

        # 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. Çoklu sınıf sınıflandırması: Bir Özellik X için yalnızca bir sınıf olabilir. Örneğin Duygu Analizi Bir Metin (X) verildiğinde, çıktı (Y) pozitif, nötr veya negatiftir. Binary, yalnızca 2 olası çıkışın olduğu bir Multiclass örneğidir.
  2. Çok etiketli sınıflandırma: Bir Özellik X için birden çok sınıf olabilir.

1

Daniel Lopez'in yanıtıyla anlaşamıyorum. Benim durumumda cevap predict_proba () softmax sonuçları döndürmüyor.

TrideepRath'ın cevabı bu sorunu kolayca çözebilir. Softmax uygulamak için out_activation_ tanımlayın:

your_model.out_activation_ = 'softmax'
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.