交叉验证

使用 scikit-learn 的监督学习

George Boorman

Core Curriculum Manager, DataCamp

交叉验证的动机

  • 模型性能取决于数据如何划分

  • 不能代表模型对未见数据的泛化能力

  • 解决方案:交叉验证!

使用 scikit-learn 的监督学习

交叉验证基础

表头:拆分1,折叠1、折叠2、折叠3、折叠4、折叠5

使用 scikit-learn 的监督学习

交叉验证基础

将拆分1保留为测试集

使用 scikit-learn 的监督学习

交叉验证基础

将折叠2-5用作训练数据

使用 scikit-learn 的监督学习

交叉验证基础

在这些折叠上计算指标

使用 scikit-learn 的监督学习

交叉验证基础

折叠2作为测试数据

使用 scikit-learn 的监督学习

交叉验证基础

折叠1、3、4、5作为训练数据

使用 scikit-learn 的监督学习

交叉验证基础

再次计算指标

使用 scikit-learn 的监督学习

交叉验证基础

对第三个折叠重复

使用 scikit-learn 的监督学习

交叉验证基础

对第四个折叠重复

使用 scikit-learn 的监督学习

交叉验证基础

对第五个折叠重复

使用 scikit-learn 的监督学习

交叉验证与模型性能

  • 5个折叠 = 5折交叉验证

  • 10个折叠 = 10折交叉验证

  • k个折叠 = k折交叉验证

  • 折数越多 = 计算越耗时

使用 scikit-learn 的监督学习

在 scikit-learn 中做交叉验证

from sklearn.model_selection import cross_val_score, KFold

kf = KFold(n_splits=6, shuffle=True, random_state=42)
reg = LinearRegression()
cv_results = cross_val_score(reg, X, y, cv=kf)
使用 scikit-learn 的监督学习

评估交叉验证表现

print(cv_results)
[0.70262578, 0.7659624, 0.75188205, 0.76914482, 0.72551151, 0.73608277]
print(np.mean(cv_results), np.std(cv_results))
0.7418682216666667 0.023330243960652888
print(np.quantile(cv_results, [0.025, 0.975]))
array([0.7054865, 0.76874702])
使用 scikit-learn 的监督学习

Vamos praticar!

使用 scikit-learn 的监督学习

Preparing Video For Download...