Skip to content

Latest commit

 

History

History

shu-ju-ji

数据集

之前我们提到了数据,我们也可以称其为数据集,数据集我们可以进行处理,分为以下几种。

训练集

Training Set,用于模型训练的数据样本。

验证集

Validation Set,是模型训练过程中单独留出的样本集,它可以用于调整模型的超参数和用于对模型的能力进行初步评估。

在神经网络中,验证数据集用于:

  • 寻找最优的网络深度
  • 或者决定反向传播算法的停止点
  • 或者在神经网络中选择隐藏层神经元的数量
  • 在普通的机器学习中常用的交叉验证(Cross Validation)就是把训练数据集本身再细分成不同的验证数据集去训练模型。

测试集

Test Set,用来评估最终模型的泛化能力。但不能作为调参、选择特征等算法相关的选择的依据。

测试集的生成理论上来说很简单,但是有些细节需要注意**:**

  • 通过随机切片的方式获取测试集,要注意设置随机种子,防止多次运行程序获得了全部数据
  • 但是设置随机种子的方式也并不完美,如果你更新数据集后也会打破原来的切分方式
  • 可以通过每行数据中的唯一标示来计算Hash值,然后根据Hash值进行划分

sklearn中提供的train_test_split方法是一种比较方便的切分数据的方式。

from sklearn.model_selection import train_test_split
train_set, test_set = train_test_split(data, test_size=0.2, random_state=42)

还需要注意的是,我们在划分数据集时需要尽量使数据分布均匀,不能训练集代表一个群体,测试集代表另一个群体,那么模型得到的效果一定是有偏差的,所以我们需要使用分层采样的方式,让训练集和测试集尽可能的分布均匀。

三者关系

三者的关系如下图所示

三者的关系

  • 训练集:课本,学生根据课本里的内容来掌握知识。训练集直接参与了模型调参的过程,显然不能用来反映模型真实的能力。即不能直接拿课本上的问题来考试,防止死记硬背课本的学生拥有最好的成绩,即防止过拟合。
  • 验证集:作业,通过作业可以知道不同学生学习情况、进步的速度快慢。验证集参与了人工调参(超参数)的过程,也不能用来最终评判一个模型(刷题库的学生不能算是学习好的学生)。
  • 测试集:考试,考的题是平常都没有见过,考察学生举一反三的能力。所以要通过最终的考试(测试集)来考察一个学型(模生)真正的能力(期末考试)。