在机器学习中,验证曲线是一种用来评估不同参数值对模型性能影响的工具。通过改变模型中某一参数的值,可以观察到训练集和测试集上的性能变化。这种方法类似于网格搜索,但只针对一个参数,并且会计算训练分数,主要用于绘制结果图表。
要使用验证曲线,首先需要一个实现了“fit”方法的估计器对象,该对象在每次验证时都会被克隆。此外,除非评分函数不依赖于“predict”方法来计算分数,否则该对象还必须实现“predict”方法。训练向量X和目标向量y是必需的,其中X的形状为(n_samples, n_features),表示样本数量和特征数量;y的形状为(n_samples,)或(n_samples, n_outputs),表示分类或回归任务中的目标值。
参数名称param_name指定了将要变化的参数,而param_range是一个数组,包含了将要评估的参数值。此外,还可以指定分组标签groups,用于在分割数据集为训练/测试集时使用,这通常与“Group”类型的交叉验证器一起使用。
交叉验证策略由参数cv决定,它可以是None(使用默认的5折交叉验证),一个整数(指定折数),一个交叉验证生成器,或者一个可迭代对象,产生(train, test)分割作为索引数组。如果cv为整数/None,并且估计器是分类器,且y是二元或多类,则使用StratifiedKFold。在所有其他情况下,使用KFold。这些分割器使用shuffle=False实例化,以确保跨调用的分割相同。
评分函数scoring可以是一个字符串(参见模型评估文档)或一个评分器可调用对象/函数,其签名为scorer(estimator, X, y)。n_jobs参数决定了并行运行的作业数量,训练估计器和计算分数是在每个参数值和每个交叉验证分割的组合上并行化的。pre_dispatch参数用于控制并行执行的预派发作业数量,可以减少分配的内存。verbose参数控制输出信息的详细程度。
error_score参数用于指定在估计器拟合过程中发生错误时分配的分数。如果设置为'raise',则会抛出错误;如果给定一个数值,则会触发FitFailedWarning。fit_params是一个字典,用于传递给估计器的fit方法。
验证曲线分析的结果包括训练集上的分数train_scores和测试集上的分数test_scores,它们的形状都是(n_ticks, n_cv_folds),其中n_ticks是参数值的数量,n_cv_folds是交叉验证的折数。
import numpy as np
from sklearn.datasets import make_classification
from sklearn.model_selection import validation_curve
from sklearn.linear_model import LogisticRegression
# 生成分类数据
X, y = make_classification(n_samples=1000, random_state=0)
# 创建逻辑回归模型
logistic_regression = LogisticRegression()
# 定义参数名称和范围
param_name, param_range = "C", np.logspace(-8, 3, 10)
# 计算训练和测试分数
train_scores, test_scores = validation_curve(
logistic_regression, X, y, param_name=param_name, param_range=param_range
)
# 打印平均训练和测试准确率
print(f"The average train accuracy is {train_scores.mean():.2f}")
print(f"The average test accuracy is {test_scores.mean():.2f}")
以上代码展示了如何使用验证曲线来分析逻辑回归模型中正则化参数C对性能的影响。通过改变C的值,可以观察到训练集和测试集上的平均准确率如何变化。