一般地,我们把学习器的实际预测输出与样本之间的真实输出之间的差异称为误差(error),学习器在训练集上的误差称为“训练误差”,在测试集上的误差称为“泛化误差”。显然我们希望得到“泛化误差”小的学习器。通常我们假设测试样本也是从样本真实分布中独立同分布采样而得,需要注意的是,测试集应该尽可能与训练集互斥。数据集划分有以下几种方法:
1.留出法
留出法直接将数据集D划分成两个互斥的数据集 ,其中一个作为训练集S,另一个作为测试集T。
注意:
- 训练/测试集的划分尽可能保持数据分布的一致性,避免因为数据划分过程引入额外的偏差而对最终结果产生影响。比如在2分类任务中,至少要保证样本的类别比例相似。
- 即便给定一个训练/测试集的样本比例后,仍存在很多划分方式对初始数据集D进行分割,这些不同的划分,将会导致不同的训练/测试集,相应的,模型评估的结果也会有差别。因此单次使用留出法得到的估计结果往往是不够稳定可靠的,在使用留出法时,一般采用若干次随机划分、重复进行实验评估后取平均值作为留出法的评估结果。例如,进行100次随机划分,每次产生一个训练/测试集用于实验评估,100次后就得到100个结果,而留出法返回的则是100个结果的平均。
方法:surprise.model_selection.split.train_test_split(data, test_size=0.2, train_size=None, random_state=None, shuffle=True)
- data是要划分的数据集,一般是dataframe
- random_state指是否要固定随机数种子
- shuffle指的是是否打乱数据集
注意:其实surprise的这个方法还不算是分层采样,因为这