Cross_val_predict:一步获得预测值和预测概率

Chr*_*her 3 prediction scikit-learn cross-validation

以下示例脚本输出预测值和预测概率:

from sklearn import datasets, linear_model
from sklearn.model_selection import cross_val_predict
diabetes = datasets.load_diabetes()
X = diabetes.data
y = diabetes.target
lg = linear_model.LogisticRegression(random_state=0, solver='lbfgs')
y_prob = cross_val_predict(lg, X, y, cv=4, method='predict_proba')
y_pred = cross_val_predict(lg, X, y, cv=4)

y_prob[0:5]
y_pred[0:5]
Run Code Online (Sandbox Code Playgroud)

我尝试以下但没有成功:

test = cross_val_predict(lg, X, y, cv=4, method=['predict','predict_proba'])
Run Code Online (Sandbox Code Playgroud)

问题:有没有一种方法可以一步获得预测值和预测概率,而无需运行两次交叉验证?另外,我必须确保值和概率对应于相同的输入数据。

rvf*_*rvf 5

\n 的值y_pred可以源自y_prob

\n\n
# The probabilities as in the original code sample\ny_prob = cross_val_predict(lg, X, y, cv=4, method=\'predict_proba\')\n\nimport numpy as np\n# Get a list of classes that matches the columns of `y_prob`\ny_sorted = np.unique(y)\n# Use the highest probability for predicting the label\nindices = np.argmax(y_prob, axis=1)\n# Get the label for each sample\ny_pred = y_sorted[indices]\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在,可能会发生y_predfrom在所有情况下cross_val_predict都不匹配y_predhere 的情况。当多个类具有相同的最高概率时,就会发生这种情况,就像示例代码中的情况一样。例如,第一个样本的所有类别的预测概率均为零。无论如何,在我看来,逻辑回归(实际上是分类)不适合糖尿病数据集。

\n\n

有关原理y_sorted请参阅cross_val_predict文档:

\n\n
\n

方法:字符串,可选,默认:\xe2\x80\x98predict\xe2\x80\x99

\n\n

调用传递的估计器的传递方法名称。对于 method=\xe2\x80\x99predict_proba\xe2\x80\x99,列对应于按排序顺序的类。

\n
\n