一、数据集切分

  1. 数据集切分的通用参数:

    • random_state:一个整数或者一个RandomState实例,或者None,指定随机数种子。

      • 如果为整数,则它指定了随机数生成器的种子。
      • 如果为RandomState实例,则指定了随机数生成器。
      • 如果为None,则使用默认的随机数生成器。
    • X:样本集合。通常是一个numpy array,每行代表一个样本,每列代表一个特征。

    • y:样本的标签集合。它与X 的每一行相对应。

    • groups:样本的分组标记集合。它与X 的每一行相对应,用于训练集、测试集的拆分。

1.1 train_test_split

  1. train_test_split用于将数据集切分成训练集和测试集,其原型为:

    1. sklearn.model_selection.train_test_split(*arrays, **options)

    返回值:一个列表,依次给出一个或者多个数据集的划分的结果。每个数据集都划分为两部分:训练集、测试集。

    参数:

    • *arrays:一个或者多个数组,代表被拆分的一些数据集。

    • test_size:一个浮点数,整数或者None,指定测试集大小。

      • 浮点数:必须是0.0 到 1.0 之间的数,代表测试集占原始数据集的比例。
      • 整数:代表测试集大小。
      • None:如果训练集大小也指定为None,则test_size设为 0.25。
    • train_size:一个浮点数,整数或者None,指定训练集大小。

      • 浮点数:必须是0.0 到 1.0 之间的数,代表训练集占原始数据集的比例。
      • 整数:代表训练集大小。
      • None:如果测试集大小也指定为None,则test_size设为 0.75。
    • random_state:指定随机数种子。

    • stratify:一个数组对象或者None。如果它不是None,则原始数据会分层采样,采样的标记数组就由该参数指定。

1.2 KFold

  1. KFold类实现了数据集的 一、数据集切分 - 图1 折交叉切分。其原型为:

    1. class sklearn.model_selection.KFold(n_splits=3, shuffle=False, random_state=None)
    • n_splits:一个整数,即 一、数据集切分 - 图2(要求该整数值大于等于 2)。
    • shuffle:一个布尔值。如果为True,则在切分数据集之前先混洗数据集。
    • random_state:指定随机数种子。
  2. 方法:

    • get_n_splits([X, y, groups]) :返回n_splits参数。

      参数:其参数都被忽略,用于保持接口的兼容性。

    • split(X[, y, groups]):切分数据集为训练集和测试集。返回测试集的样本索引、训练集的样本索引。

      参数:

      • X为训练数据集,形状为(n_samples,n_features)
      • y为标记信息,形状为(n_samples,)
      • groups:样本的分组标记,用于拆分。
  3. KFold首先将 0~(n-1)之间的整数从前到后均匀划分成 n_splits份。每次迭代时依次挑选一份作为测试集样本的下标。

    • 如果shuffle=True, 则按顺序划分。
    • 如果shuffle=False, 则按随机划分。

1.3 StratifiedKFold

  1. StratifiedKFold类实现了数据集的分层采样 一、数据集切分 - 图3 折交叉切分。其原型为:

    1. class sklearn.model_selection.StratifiedKFold(n_splits=3, shuffle=False, random_state=None)

    参数:参考KFold

  2. 方法:参考KFold

  3. StratifiedKFold 的用法类似于KFold,但是StratifiedKFold执行的是分层采样:保证训练集、测试集中各类别样本的比例与原始数据集中相同。

1.4 LeaveOneOut

  1. LeaveOneOut 类实现了数据集的留一法拆分(简称LOO)。它是个生成器,其原型为:

    1. class sklearn.model_selection.LeaveOneOut(n)
    • n:一个整数,表示数据集大小。
  2. LeaveOneOut的用法很简单。它每次迭代时,依次取 0,1,...(n-1) 作为测试集样本的下标。

    1. from sklearn.model_selection import LeaveOneOut
    2. for train_index,test_index in LeaveOneOut(len(y)):
    3. #train_index 保存训练集样本下标,test_index 保存测试集样本下标

1.5 cross_val_score

  1. 便利函数cross_val_scoreestimator 执行k 折交叉验证。其原型为:

    1. sklearn.model_selection.cross_val_score(estimator, X, y=None, scoring=None, cv=None,
    2. n_jobs=1, verbose=0, fit_params=None, pre_dispatch='2*n_jobs')

    返回值:返回一个浮点数的数组。每个浮点数都是针对某次 一、数据集切分 - 图4 折交叉的数据集上, estimator预测性能得分。

    参数:

    • estimator:指定的学习器,该学习器必须有.fit方法来进行训练。

    • X:样本集合。通常是一个numpy array,每行代表一个样本,每列代表一个特征。

    • y:样本的标签集合。它与X 的每一行相对应。

    • groups:样本的分组标记集合。它与X 的每一行相对应,用于训练集、测试集的拆分。

    • scoring:一个字符串,或者可调用对象,或者None,它指定了评分函数。

      如果为可调用对象,则参数为estimator, X, y ,返回值为一个浮点数表示预测能力得分。

      如果为None,则采用estimator学习器的.score方法。

      如果为字符串,则可以为下列字符串:

      • 'accuracy':采用的是metrics.accuracy_score评分函数。

      • 'average_precision':采用的是metrics.average_precision_score评分函数。

      • f1系列:采用的是metrics.f1_score 评分函数。包括:

        • 'f1'f1 值作为评分。用于二分类问题。
        • 'f1_micro' :微f1 值作为评分。用于多分类问题。
        • 'f1_macro':宏f1 值作为评分。用于多分类问题。
        • 'f1_weighted':加权 f1 值作为评分。
        • 'f1_samples' :多标签f1 值作为评分。
      • 'log_loss': 采用的是metrics.log_loss评分函数。

      • precision系列:采用的是metrics.precision_score评分函数。

        具体形式类似f1系列。

      • recall 系列:采用的是metrics.recall_score评分函数。

        具体形式类似f1系列。

      • 'roc_auc':采用的是metrics.roc_auc_score 评分函数 。

      • 'adjusted_rand_score':采用的是metrics.adjusted_rand_score 评分函数。

      • 'mean_absolute_error':采用的是metrics.mean_absolute_error 评分函数。

      • 'mean_squared_error’':采用的是metrics.mean_squared_error 评分函数。

      • 'median_absolute_error':采用的是metrics.median_absolute_error 评分函数。

      • 'r2':采用的是metrics.r2_score 评分函数 。

    • cv:一个整数、一、数据集切分 - 图5 折交叉生成器、一个迭代器、或者None,指定k 折交叉参数。

      • 如果为None,则使用默认的 3 折交叉生成器。
      • 如果为整数,则指定了 一、数据集切分 - 图6 折交叉生成器的 一、数据集切分 - 图7 值。
      • 如果为 一、数据集切分 - 图8 折交叉生成器,则直接指定了 一、数据集切分 - 图9 折交叉生成器。
      • 如果为迭代器,则迭代器的结果就是数据集划分的结果。
    • fit_params:一个字典,指定了estimator执行.fit方法时的关键字参数。

    • n_jobs:一个整数,指定并行性。

    • verbose:一个整数,用于控制输出日志。

    • pre_dispatch:一个整数或者字符串或者None,用于控制并行执行时,分发的总的任务数量。

      • 如果为None,则所有的job 立即创建并派生。
      • 如果为整数,则它指定了立即派生的job 的数量。
      • 如果为字符串,则指定了n_jobs 的表达式。如'2*n_jobs' 表示立即派生2倍 n_jobs 数量的job
  2. 之所以称cross_val_score 为便利函数,是因为完全可以凭借现有的函数手动完成这个功能,步骤为:

    • 一、数据集切分 - 图10 折交叉划分数据集,对每次划分结果执行:

      • 在训练集上训练 estimator
      • 用训练好的 estimator 预测测试集,返回测试性能得分。
    • 收集所有的测试性能得分,放入一个数组并返回。