2015-02-28 5 views
13

के लिए मैं क्रॉस-सत्यापन के साथ लॉजिस्टिक रीग्रेशन मॉडल से संभावना की भविष्यवाणी करना चाहता हूं। मुझे पता है कि आप क्रॉस-सत्यापन स्कोर प्राप्त कर सकते हैं, लेकिन क्या स्कोर के बजाय predict_proba से मान वापस करना संभव है?predict_proba एक क्रॉस-मान्य मॉडल

# imports 
from sklearn.linear_model import LogisticRegression 
from sklearn.cross_validation import (StratifiedKFold, cross_val_score, 
             train_test_split) 
from sklearn import datasets 

# setup data 
iris = datasets.load_iris() 
X = iris.data 
y = iris.target 

# setup model 
cv = StratifiedKFold(y, 10) 
logreg = LogisticRegression() 

# cross-validation scores 
scores = cross_val_score(logreg, X, y, cv=cv) 

# predict probabilities 
Xtrain, Xtest, ytrain, ytest = train_test_split(X, y) 
logreg.fit(Xtrain, ytrain) 
proba = logreg.predict_proba(Xtest) 

उत्तर

4

एक समारोह cross_val_predict है कि आप की भविष्यवाणी मूल्यों देता है, लेकिन वहाँ अभी तक "predict_proba" के लिए इस तरह का कोई कार्य है। शायद हम इसे एक विकल्प बना सकते हैं।

+0

विकास संस्करण में cross_val_predict है? यह एक अच्छा विकल्प होगा। – dYz

+0

ओह, आप सही हैं, इसे अभी तक जारी नहीं किया गया है। इसे अगले सप्ताह, तीन हफ्तों के भीतर तय किया जाना चाहिए। –

+0

@AndreasMueller क्या यह विकल्प कभी भी 'cross_val_predict' में जोड़ा गया है? – Ryan

9

इस के लिए एक आसान समाधान का एक आवरण वर्ग है, जो अपने मामले के लिए

class proba_logreg(LogisticRegression): 
    def predict(self, X): 
     return LogisticRegression.predict_proba(self, X) 

होगा और उसके बाद cross_val_predict

# cross validation probabilities 
probas = cross_val_predict(proba_logreg(), X, y, cv=cv) 
+0

FYI: मैंने अभी 'RandomForestClassifier' के साथ यह कोशिश की है और यह त्रुटि मिली है' ValueError: Can बाइनरी और निरंतर-मल्टीआउटपुट ' – vlsd

+1

@vlsd का मिश्रण संभाल नहीं है, यह काम करता है - आपको अपने' predict_proba' के लिए '[:, 1]' जोड़ने की आवश्यकता है, क्योंकि यह प्रति वर्ग ("0", "1) की संभावना देता है ") और आप शायद" 1 "कक्षा में रुचि रखते हैं – ihadanny

23

यह करने के लिए वर्गीकारक वस्तु के रूप में यह का एक उदाहरण पारित बनाने के लिए है अब scikit-learn संस्करण 0.18 के हिस्से के रूप में लागू किया गया है। आप cross_val_predict विधि में 'विधि' स्ट्रिंग पैरामीटर पास कर सकते हैं। दस्तावेज़ीकरण here है।

उदाहरण:

proba = cross_val_predict(logreg, X, y, cv=cv, method='predict_proba') 

यह भी ध्यान रखें कि इस नए sklearn.model_selection पैकेज का हिस्सा है, इसलिए आप इस आयात की आवश्यकता होगी:

from sklearn.model_selection import cross_val_predict 
संबंधित मुद्दे