交叉验证评估模型性能

机器学习中,模型的性能评估是一个非常重要的环节。为了得到一个模型在未见数据上的性能估计,通常会采用交叉验证的方法。交叉验证不仅可以帮助评估模型的泛化能力,还可以通过调整不同的参数来优化模型。在Python的scikit-learn库中,cross_validate函数提供了一个非常方便的方式来进行交叉验证。

cross_validate函数允许传入一个估计器(estimator),数据集(X和y),以及交叉验证的策略(cv),然后它会返回模型在每个交叉验证分割上的性能评分。此外,该函数还允许指定多个评分指标,以及是否返回训练分数、估计器对象和分割索引等。

以下是cross_validate函数的一些关键参数:

cross_validate(estimator, X, y, groups=None, scoring=None, cv=None, n_jobs=None, verbose=0, fit_params=None, params=None, pre_dispatch='2*n_jobs', return_train_score=False, return_estimator=False, return_indices=False, error_score='nan')

参数解释:

  • estimator:用于拟合数据的估计器对象。
  • X:特征数据,可以是数组、稀疏矩阵等。
  • y:目标变量,可以是一维或多维数组。
  • groups:分组标签,用于在分割数据集时指定样本的分组。
  • scoring:评分策略,可以是字符串、可调用函数、列表、元组或字典。
  • cv:交叉验证分割策略,可以是整数、交叉验证生成器或可迭代对象。
  • n_jobs:并行运行的工作数量。
  • verbose:控制日志输出的详细程度。
  • fit_params:传递给估计器的拟合方法的参数(已弃用)。
  • params:传递给底层估计器的拟合方法、评分器和交叉验证分割器的参数。
  • pre_dispatch:控制并行执行期间分派的工作数量。
  • return_train_score:是否返回训练分数。
  • return_estimator:是否返回每个分割上拟合的估计器对象。
  • return_indices:是否返回每个分割的训练-测试索引。
  • error_score:在估计器拟合过程中发生错误时分配的分数。

cross_validate函数返回一个字典,其中包含每个评分器的分数/时间数组。例如,如果指定了多个评分指标,返回的字典将包含'test_score'、'train_score'、'fit_time'和'score_time'等键。

下面是一个使用cross_validate函数的示例:

from sklearn.datasets import load_diabetes from sklearn.linear_model import Lasso from sklearn.model_selection import cross_validate diabetes = load_diabetes() X = diabetes.data[:150] y = diabetes.target[:150] lasso = Lasso() cv_results = cross_validate(lasso, X, y, cv=3) print(sorted(cv_results.keys())) # 输出: ['fit_time', 'score_time', 'test_score'] print(cv_results['test_score']) # 输出: array([0.3315057 , 0.08022103, 0.03531816])

在这个示例中,使用了糖尿病数据集,并使用Lasso回归模型进行了3折交叉验证。cross_validate函数返回了每个分割上的测试分数、拟合时间和评分时间。

cross_validate函数是一个非常强大的工具,可以帮助在模型选择和参数调整过程中评估不同模型的性能。通过合理设置交叉验证策略和评分指标,可以得到更准确、更可靠的模型性能估计。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485