मैं केरल में लिखे गए एक लॉजिस्टिक रजिस्ट्रार के परिणाम को डिफ़ॉल्ट स्केलेर्न लॉगेग में तुलना कर रहा हूं। मेरा इनपुट एक-आयामी है। मेरे आउटपुट में दो वर्ग हैं और मुझे संभावना है कि आउटपुट कक्षा 1 से संबंधित है।केरास और स्केलेर्न लॉग्रेग अलग-अलग परिणाम लौट रहे हैं
मुझे उम्मीद है कि परिणाम लगभग समान होने की उम्मीद कर रहे हैं, लेकिन वे भी करीब नहीं हैं।
यहां बताया गया है कि मैं अपना यादृच्छिक डेटा कैसे उत्पन्न करता हूं। ध्यान दें कि X_train, X_test अभी भी वैक्टर हैं, मैं सिर्फ पूंजी अक्षरों का उपयोग कर रहा हूं क्योंकि मुझे इसका उपयोग किया जाता है। इस मामले में स्केलिंग की कोई आवश्यकता नहीं है।
X = np.linspace(0, 1, 10000)
y = np.random.sample(X.shape)
y = np.where(y<X, 1, 0)
यहां एक्स पर प्लॉट किए गए y का cumsum है। यहां एक प्रतिगमन करना रॉकेट विज्ञान नहीं है।
from sklearn.linear_model import LogisticRegression
sk_lr = LogisticRegression()
sk_lr.fit(X_train, y_train)
sklearn_logreg_result = sk_lr.predict_proba(X_test)[:,1]
और एक रसद regressor है कि मैं में लिखें:
X_train, X_test, y_train, y_test = train_test_split(X, y)
X_train = X_train.reshape(-1,1)
X_test = X_test.reshape(-1,1)
इसके बाद, मैं एक डिफ़ॉल्ट रसद regressor प्रशिक्षित:
मैं एक मानक ट्रेन परीक्षण विभाजित करना केरास:
from keras.models import Sequential
from keras.layers import Dense
keras_lr = Sequential()
keras_lr.add(Dense(1, activation='sigmoid', input_dim=1))
keras_lr.compile(loss='mse', optimizer='sgd', metrics=['accuracy'])
_ = keras_lr.fit(X_train, y_train, verbose=0)
keras_lr_result = keras_lr.predict(X_test)[:,0]
और एक हाथ से बनाई गई समाधान:
pearson_corr = np.corrcoef(X_train.reshape(X_train.shape[0],), y_train)[0,1]
b = pearson_corr * np.std(y_train)/np.std(X_train)
a = np.mean(y_train) - b * np.mean(X_train)
handmade_result = (a + b * X_test)[:,0]
मैं सभी तीन समान परिणाम देने के लिए उम्मीद है, लेकिन यहां क्या होता है। यह 100 डिब्बे का उपयोग कर एक विश्वसनीयता आरेख है।
मैं नुकसान कार्य करता है और अन्य मानकों के साथ चारों ओर खेल चुके हैं, लेकिन Keras logreg इस तरह मोटे तौर पर रहता है। समस्या क्या हो सकती है?
संपादित करें: इस साजिश द्वारा दिखाए गए अनुसार बाइनरी क्रॉसेंट्रॉपी का समाधान यहां समाधान नहीं है (ध्यान दें कि दो भूखंडों के बीच इनपुट डेटा बदल गया है)।
क्या आप युगों की संख्या में वृद्धि करने की कोशिश कर सकते हैं? उदाहरण के लिए _ = keras_lr.fit (X_train, y_train, nb_epoch = 300 verbose = 0)। या _ = keras_lr.fit (X_train, y_train, epochs = 300 verbose = 0) यदि कैमरा 2 – maz
का उपयोग करते हैं तो औसत पर sklearn समाधान 0.76 की सटीकता तक पहुंचता है। दस युग के बाद औसत तापमान 0.75 की सटीकता है। यह युग की बढ़ती संख्या के साथ सुधार नहीं करता है। – Darina
@maz मैं उपर्युक्त टिप्पणी वापस लेता हूं। आप सही हैं, प्रदर्शन में सुधार होता है। ऐसा क्यों है कि लॉग्रेग को इतनी सरल सेटिंग में इतने सारे युग की जरूरत है? मुझे कोई अंतर्ज्ञान नहीं है। यदि आप युग-संख्या को उत्तर के रूप में रखते हैं, तो मैं इसे स्वीकार करूंगा। – Darina