电脑基础 · 2023年3月28日

机器学习数据集----训练集、测试集以及验证集

1、训练集

用来构建模型,通过训练拟合一些参数建立分类器

2、验证集

用于确定网络结构以及调整模型的超参数。

使用验证集的目的就是为了快速调参(如网络层数、网络节点数、迭代次数等等),从而获得当前最优模型。

验证集是在训练集中划分出的一部分。

验证集不是必须要有的!

3、测试集

用来评估最终模型好坏

机器学习数据集----训练集、测试集以及验证集

机器学习数据集----训练集、测试集以及验证集

机器学习数据集----训练集、测试集以及验证集

4、是否需要划分验证集判断

4.1划分验证集

如果样本数量为万级以上,可以考虑划分为训练集(60%)、验证集(20%)、测试集(20%);

如果样本数量达到百万级以上,验证集和测试集都留1W即可;

超参数越少或者容易调整,可以减少验证集比例,更多的分配给训练集。

4.2不需要划分验证集

如果样本数量少于1w,可以不用划分验证集,采用交叉验证训练优化选择模型

5、交叉验证

5.1简单交叉验证

所谓简单是相对于其他交叉验证方法而言的。

随机将样本划分为训练集(70%)和测试集(30%),用训练集训练模型,用测试集验证模型及参数。接着再把样本打乱,重新选择训练集和测试集,继续训练模型和验证模型。最终选择损失函数评估最优模型和参数。

5.2 K折交叉验证

将样本随机划分为K个大小相同的互斥的子集,每次选K-1个作为训练集,剩的那个作为测试集。重复若干次(小于K)后,选择损失函数评估最优模型和参数。

这种方法评估结果的稳定性和保真性很大程度上取决于K的选择。

5.3留一交叉验证

是K折交叉验证的特例,适用于样本数量很少的情况。

该方法中,K等于样本数量N,每次选择N-1个样本进行训练,剩的1个样本进行测试。

5.4三种方法的选择

如果只是做个初步的模型建立,不是做深入分析的话,选择简单交叉验证,否则用K折交叉验证;在样本量少的情况下,使用留一交叉验证。

5.5交叉验证函数

cross_val_predict和cross_val_score都是交叉验证函数,区别主要是而这返回的评估结果不一样。

①、cross_val_predict:返回的是与样本数量个数一样的分类结果或者预测值。可以通过该预测输出与实际目标值做对比,准确定位到预测出错的地方,有利于参数优化和问题排查。输出的预测值可以用于计算PR曲线和ROC曲线。 

机器学习数据集----训练集、测试集以及验证集 

机器学习数据集----训练集、测试集以及验证集

其中,Ytrain为正确的标签,y_score为输出概率值,thresholds1为阈值,当 y_score>thresholds1时预测为正样本;当 y_score<thresholds1时预测为负样本。注意,输出的precision和recall最后一个值分别为1和0,并且没有对应的阈值。

②、cross_val_score:输出的是每一折的得分(准确率),K个得分取平均值就是模型的平均性能。最终输出的Accuracy可以由平均得分和95%置信区间共同得出。

cross_val_predict的输出结果不可以作为模型泛化性能参考;cross_val_score可以作为模型泛化性能的参考。

机器学习数据集----训练集、测试集以及验证集

5.6置信区间

表示估计的准确度或精确度。

机器学习数据集----训练集、测试集以及验证集

机器学习数据集----训练集、测试集以及验证集

机器学习数据集----训练集、测试集以及验证集

机器学习数据集----训练集、测试集以及验证集 

机器学习数据集----训练集、测试集以及验证集

机器学习数据集----训练集、测试集以及验证集 

机器学习数据集----训练集、测试集以及验证集

机器学习数据集----训练集、测试集以及验证集