【问题标题】:Cross_val_predict: Getting predicted values and predicted probabilities in one stepcross_val_predict:一步获取预测值和预测概率
【发布时间】:2019-06-16 03:00:32
【问题描述】:

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

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]

我尝试了以下但没有成功:

test = cross_val_predict(lg, X, y, cv=4, method=['predict','predict_proba'])

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

【问题讨论】:

    标签: scikit-learn prediction cross-validation


    【解决方案1】:

    y_pred的值可以从y_prob推导出来:

    # The probabilities as in the original code sample
    y_prob = cross_val_predict(lg, X, y, cv=4, method='predict_proba')
    
    import numpy as np
    # Get a list of classes that matches the columns of `y_prob`
    y_sorted = np.unique(y)
    # Use the highest probability for predicting the label
    indices = np.argmax(y_prob, axis=1)
    # Get the label for each sample
    y_pred = y_sorted[indices]
    

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

    有关y_sorted 的基本原理,请参阅cross_val_predict 文档:

    方法:字符串,可选,默认:'predict'

    调用传递的估计器的传递方法名称。对于method='predict_proba',列对应于排序顺序的类。

    【讨论】:

      猜你喜欢
      • 2019-09-16
      • 2016-05-23
      • 2018-05-20
      • 1970-01-01
      • 2020-04-13
      • 1970-01-01
      • 2020-10-03
      • 2013-05-22
      相关资源
      最近更新 更多