Note
Go to the end to download the full example code or to run this example in your browser via JupyterLite or Binder
Plotting Cross-Validated Predictions¶
This example shows how to use
cross_val_predict
together with
PredictionErrorDisplay
to visualize prediction
errors.
We will load the diabetes dataset and create an instance of a linear regression model.
from sklearn.datasets import load_diabetes
from sklearn.linear_model import LinearRegression
X, y = load_diabetes(return_X_y=True)
lr = LinearRegression()
cross_val_predict
returns an array of the
same size of y
where each entry is a prediction obtained by cross
validation.
from sklearn.model_selection import cross_val_predict
y_pred = cross_val_predict(lr, X, y, cv=10)
Since cv=10
, it means that we trained 10 models and each model was
used to predict on one of the 10 folds. We can now use the
PredictionErrorDisplay
to visualize the
prediction errors.
On the left axis, we plot the observed values \(y\) vs. the predicted values \(\hat{y}\) given by the models. On the right axis, we plot the residuals (i.e. the difference between the observed values and the predicted values) vs. the predicted values.
import matplotlib.pyplot as plt
from sklearn.metrics import PredictionErrorDisplay
fig, axs = plt.subplots(ncols=2, figsize=(8, 4))
PredictionErrorDisplay.from_predictions(
y,
y_pred=y_pred,
kind="actual_vs_predicted",
subsample=100,
ax=axs[0],
random_state=0,
)
axs[0].set_title("Actual vs. Predicted values")
PredictionErrorDisplay.from_predictions(
y,
y_pred=y_pred,
kind="residual_vs_predicted",
subsample=100,
ax=axs[1],
random_state=0,
)
axs[1].set_title("Residuals vs. Predicted Values")
fig.suptitle("Plotting cross-validated predictions")
plt.tight_layout()
plt.show()
It is important to note that we used
cross_val_predict
for visualization
purpose only in this example.
It would be problematic to
quantitatively assess the model performance by computing a single
performance metric from the concatenated predictions returned by
cross_val_predict
when the different CV folds vary by size and distributions.
In is recommended to compute per-fold performance metrics using:
cross_val_score
or
cross_validate
instead.
Total running time of the script: (0 minutes 0.188 seconds)