स्किकिट-लर्न में मल्टी-लेयर पर्सेप्ट्रॉन में एक्टिवेशन फ़ंक्शन के रूप में सॉफ्टमैक्स कैसे लागू करें? [बन्द है]


9

मुझे सॉफ्टमिट में मल्टी-लेयर पर्सेप्ट्रॉन को सॉफ्टमैक्स सक्रियण फ़ंक्शन लागू करने की आवश्यकता है। न्यूरल नेटवर्क मॉडल (पर्यवेक्षित) के विषय पर स्किकिट डोक्यूमेन्टेशन कहते हैं, "MLPClassifier 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: सक्रियण 'सॉफ्टमैक्स' समर्थित नहीं है। समर्थित गतिविधियाँ हैं ('पहचान', 'लॉजिस्टिक', 'तन', 'रिलु')।

क्या स्किटिट-लर्न में मल्टी-क्लास वर्गीकरण के लिए सॉफ्टमैक्स सक्रियण फ़ंक्शन लागू करने का एक तरीका है?

जवाबों:


7

जब आप विधि को कॉल करके प्रायिकता भविष्यवाणी का अनुरोध करते हैं तो मुझे लगता है कि सॉफ्टमैक्स फ़ंक्शन लागू किया गया है 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 तक है। यह केवल सॉफ्टमैक्स ऐक्टिवेशन फंक्शन द्वारा प्राप्त किया जा सकता है। परत बिल्कुल एक होगी, विशेष रूप से अनदेखी नमूना के लिए)।

यदि मेरा अनुमान सही है, तो दस्तावेज को देखकर मुझे सॉफ्टमैक्स से पहले नेटवर्क का आउटपुट प्राप्त करने की कोई विधि नहीं मिल सकती है ... शायद इसलिए कि यह वर्ग केवल वर्गीकरण के लिए है (प्रतिगमन या अन्य फैंसी सेटअप नहीं)।


4

MLPClassifier का उपयोग "Multiclass वर्गीकरण", "बाइनरी वर्गीकरण" और "बहुभाषी वर्गीकरण" के लिए किया जा सकता है। तो आउटपुट लेयर Y के प्रकार के आधार पर तय की जाती है:

  1. बहुस्तरीय : सबसे बाहरी परत सॉफ्टमैक्स परत है

  2. मल्टीलेबेल या बाइनरी-क्लास : सबसे बाहरी परत लॉजिस्टिक / सिग्मॉइड है।

  3. प्रतिगमन : सबसे बाहरी परत पहचान है

MLPClassifier में प्रयुक्त स्केलेर से कोड का हिस्सा जो इसकी पुष्टि करता है:

        # 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. मल्टीस्कलैस वर्गीकरण: एक फ़ीचर X के लिए, केवल एक वर्ग हो सकता है। उदाहरण वाक्य का विश्लेषण एक पाठ (एक्स) को देखते हुए, आउटपुट (वाई) सकारात्मक, तटस्थ या नकारात्मक है। बाइनरी मल्टीकासल का एक मामला है जहां केवल 2 संभावित आउटपुट हैं।
  2. मल्टीलेबेल वर्गीकरण: एक फीचर एक्स के लिए, कई कक्षाएं हो सकती हैं।

1

डैनियल लोपेज के जवाब से सहमत नहीं हो सकते। मेरे मामले में उत्तर answer_proba () सॉफ्टमैक्स परिणाम नहीं लौटाता है।

त्रिदीपराथ का जवाब इस मुद्दे को आसानी से हल कर सकता है। सॉफ्टमैक्स लागू करने के लिए out_activation_ को परिभाषित करें:

your_model.out_activation_ = 'softmax'
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.