交叉验证模型的预测概率

2024-09-30 20:24:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用交叉验证的Logistic回归模型来预测概率。我知道你可以得到交叉验证分数,但是否可以从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)

Tags: fromimportirismodelsklearnpredict交叉分数
3条回答

一个简单的解决方法是创建一个包装类,对于您的案例来说

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)

有一个函数cross_val_predict为您提供预测值,但是“predict_proba”还没有这样的函数。也许我们可以选择。

这现在作为scikit learn版本0.18的一部分实现。可以将“method”字符串参数传递给交叉值预测方法。文档是here

示例:

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

还要注意,这是新的sklearn.model_选择包的一部分,因此您将需要此导入:

from sklearn.model_selection import cross_val_predict

相关问题 更多 >