机器学习的验证曲线

文章目录

  • 1. 简介
  • 2. 验证曲线与学习曲线的区别
  • 3. 参考

1. 简介

  模型验证曲线用于评估模型是否存在过拟合与欠拟合情况,且有助于调整模型超参数。有时绘制单个超参数对训练分数和验证分数的影响图是有帮助的,以发现对于某些超参数值,模型是过度拟合还是欠拟合。
  验证曲线的横轴为某个超参数,如一些树模型算法中的max_depth、min_sample_leaf等,从验证曲线上可以看到随着超参数设置的改变,模型可能从欠拟合到合适再到过拟合的过程,进而选择一个合适的超参数。

示例代码

import matplotlib.pyplot as plt
import numpy as np

from sklearn.datasets import load_digits
from sklearn.svm import SVC
from sklearn.model_selection import validation_curve

digits = load_digits()
X, y = digits.data, digits.target

param_range = np.logspace(-6, -1, 5)
train_scores, test_scores = validation_curve(
    SVC(), X, y, param_name="gamma", param_range=param_range,
    cv=10, scoring="accuracy", n_jobs=1)
train_scores_mean = np.mean(train_scores, axis=1)
train_scores_std = np.std(train_scores, axis=1)
test_scores_mean = np.mean(test_scores, axis=1)
test_scores_std = np.std(test_scores, axis=1)

plt.title("Validation Curve with SVM")
plt.xlabel("$\gamma$")
plt.ylabel("Score")
plt.ylim(0.0, 1.1)
lw = 2
plt.semilogx(param_range, train_scores_mean, label="Training score",
             color="darkorange", lw=lw)
plt.fill_between(param_range, train_scores_mean - train_scores_std,
                 train_scores_mean + train_scores_std, alpha=0.2,
                 color="darkorange", lw=lw)
plt.semilogx(param_range, test_scores_mean, label="Cross-validation score",
             color="navy", lw=lw)
plt.fill_between(param_range, test_scores_mean - test_scores_std,
                 test_scores_mean + test_scores_std, alpha=0.2,
                 color="navy", lw=lw)
plt.legend(loc="best")
plt.show()

机器学习的验证曲线_第1张图片

2. 验证曲线与学习曲线的区别

对于验证曲线与学习曲线通常不清楚两者的区别,此处将主要区分两个的不同:

  1. 学习曲线通常是在模型超参数确定的情况下,观察训练集与验证集上的模型表现,从而判断模型是拟合情况,主要有以下两种形式:

    • 横轴为训练集样本量大小,判断训练集样本量对模型拟合的影响
    • 横轴为模型迭代次数(模型超参数已确定),判断模型迭代次数对模型拟合的影响
  2. 验证曲线通常是展示某个参数在不同值的情况下,训练集与验证集得分情况的对比(比如上图示例中对于SVM模型中的gamma参数)

3. 参考

  • sklearn官方文档:Plotting scores to evaluate models

你可能感兴趣的:(数据挖掘,机器学习,机器学习,python,算法,数据挖掘)