Note
Go to the end to download the full example code. or to run this example in your browser via Binder
绘制交叉验证预测#
本示例展示了如何使用
cross_val_predict
以及
PredictionErrorDisplay
来可视化预测误差。
我们将加载糖尿病数据集并创建一个线性回归模型实例。
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
返回一个与 y
大小相同的数组,其中每个条目都是通过交叉验证获得的预测。
from sklearn.model_selection import cross_val_predict
y_pred = cross_val_predict(lr, X, y, cv=10)
由于 cv=10
,这意味着我们训练了10个模型,每个模型用于对10个折中的一个进行预测。我们现在可以使用 PredictionErrorDisplay
来可视化预测误差。
在左轴上,我们绘制观测值 \(y\) 与模型给出的预测值 \(\hat{y}\) 的关系图。在右轴上,我们绘制残差(即观测值与预测值之间的差异)与预测值的关系图。
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()
需要注意的是,在本例中我们使用了 cross_val_predict
仅用于可视化目的。
当不同的交叉验证(CV)折叠在大小和分布上有所不同时,通过计算从 cross_val_predict
返回的连接预测值的单一性能指标来定量评估模型性能将是有问题的。
建议使用 cross_val_score
或 cross_validate
计算每折的性能指标。
Total running time of the script: (0 minutes 0.080 seconds)
Related examples
k-means 假设的演示
scikit-learn 1.2 版本发布亮点
转换回归模型中的目标变量的效果
使用堆叠方法结合预测器