2015-02-28 9 views
13

Çapraz geçerliliği olan Lojistik Regresyon modelinden olasılığı tahmin etmek istiyorum. Çapraz doğrulama puanlarını alabileceğinizi biliyorum, ancak puanları yerine predict_proba değerlerini döndürmek mümkün mü?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) 

cevap

4

size tahmin değerlerini veren bir işlev cross_val_predict yoktur, ancak henüz "predict_proba" için böyle bir işlevi yoktur. Belki bunu bir seçenek yapabiliriz.

+0

geliştirme sürümünde cross_val_predict mı? Güzel bir seçenek olurdu. – dYz

+0

Oh, haklısın, henüz serbest değil. Bundan sonraki üç hafta içinde düzeltilmelidir. –

+0

@AndreasMueller bu seçenek hiç 'cross_val_predict' eklenebilmeniz mü? – Ryan

9

bunun için kolay bir geçici çözüm dava için

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

olacağını ve daha sonra cross_val_predict

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

Bilginize [burada] bakınız 't ikili ve sürekli multioutput' – vlsd

+1

@vlsd karışımını işlemek, bu çalışır - eklemek gerekir '[: 1]' senin 'predict_proba' için, bu sınıfın başına olasılığını döndürür olarak ('0', "1 ") ile muhtemelen ilgilendiğiniz '1' class – ihadanny

23

Bu kadar sınıflandırıcı nesnesi olarak bunun bir örneğini geçmesi bir sarmalayıcı sınıf, yaratmaktır şimdi scikit-öğrenme sürümü 0.18'in bir parçası olarak uygulanmaktadır. Bir 'method' string parametresini cross_val_predict yöntemine iletebilirsiniz. Belgeler, here.

Örnek:

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

Bu içe aktarma gerekir böylece Ayrıca, bu yeni sklearn.model_selection paketinin bir parçası olduğuna dikkat:

from sklearn.model_selection import cross_val_predict