避免过拟合的迭代

用 Python 设计机器学习工作流

Dr. Chris Anagnostopoulos

Honorary Associate Professor

示意图显示模型上线后仍可继续调优。

用 Python 设计机器学习工作流

同一示意图还表明,可从生产中提取更多数据以继续优化模型。

用 Python 设计机器学习工作流

同一示意图显示领域专家可提供新见解,可能改变模型,如新的损失函数。

用 Python 设计机器学习工作流

同一示意图中,上线模型标记为"冠军",开发中模型为"挑战者"。

用 Python 设计机器学习工作流

交叉验证结果

grid_search = GridSearchCV(pipe, params, cv=3, return_train_score=True)
gs = grid_search.fit(X_train, y_train)
results = pd.DataFrame(gs.cv_results_)
results[['mean_train_score', 'std_train_score', 
   'mean_test_score', 'std_test_score']]
   mean_train_score  std_train_score  mean_test_score  std_test_score
0             0.829            0.006            0.735           0.009
1             0.829            0.006            0.725           0.009
2             0.961            0.008            0.716           0.019
3             0.981            0.005            0.749           0.024
...
用 Python 设计机器学习工作流

交叉验证结果

   mean_train_score  std_train_score  mean_test_score  std_test_score
0             0.829            0.006            0.735           0.009
1             0.829            0.006            0.725           0.009
2             0.961            0.008            0.716           0.019
3             0.981            0.005            0.749           0.024
4             0.986            0.003            0.728           0.009
5             0.995            0.002            0.751           0.008

观察:

  • 训练得分远高于测试得分。
  • 测试得分的标准差较大。
用 Python 设计机器学习工作流

一个数据集被划分为训练集和测试集,训练集再被交叉验证分块。

用 Python 设计机器学习工作流

一个数据集被划分为训练集和验证集,训练集再被交叉验证分块。

用 Python 设计机器学习工作流

检测过拟合

  • CV 训练得分 >> CV 测试得分
    • 模型拟合阶段的过拟合
    • 降低分类器复杂度
    • 获取更多训练数据
    • 增加 CV 折数
  • CV 测试得分 >> 验证集得分
    • 调参与验证阶段的过拟合
    • 减少 CV 折数
    • 缩小参数网格

一个数据集被划分为训练集和验证集,训练集再被交叉验证分块。

用 Python 设计机器学习工作流

一个数据集被划分为训练集和验证集,训练集再被交叉验证分块。

用 Python 设计机器学习工作流

一个数据集被划分为训练集、验证集和生产数据,训练集再被交叉验证分块。

用 Python 设计机器学习工作流

把"CV 专家"写进你的简历!

用 Python 设计机器学习工作流

Preparing Video For Download...