【总结】
训练数据集:训练模型参数;
验证数据集:选择模型超参数。
非大数据集上通常使用k-折交叉验证。
模型容量需要匹配数据复杂度,否则可能导致欠拟合和过拟合。
统计机器学习提供数学工具来衡量模型复杂度。
实际中一般靠观察训练误差和验证误差。
一、模型选择
1、训练误差和泛化误差
训练误差:模型在训练数据上的误差
泛化误差:模型在新数据上的误差
2、验证数据集和测试数据集
验证数据集:用来评估模型好坏的数据集。不要跟训练数据集混在一起。
测试数据集:只用一次的数据集。
3、k-折交叉验证
二、过拟合和欠拟合
1、过拟合和欠拟合
2、VC维
(1)线性分类器的VC维
2维输入的感知机(输入的特征是2,输出是1)
(2)数据复杂度
多个重要因素:样本个数、每个样本的元素个数、时间/空间结构、多样性。
三、代码
chapter_multilayer-perceptrons/underfit-overfit.ipynb
四、问答
(1)过拟合和欠拟合应该是用验证集来看
(2)时序上的数据,不能随机采样分验证集训练集。一般一个时间之前的训练集,之后的验证集。
(3)k折交叉验证,k的选择,看能承受的成本。k越大越好。
(4)Q:k折交叉验证的目的是确定超参数吗,然后还要用这个超参数再训练一遍全数据吗?
A:两种做法,一种就是k折交叉验证确定超参数,然后用这个超参数再训练一遍全数据;另一种是不再重新训练,就用k折交叉验证确定超参数,然后随便找出一折的模型,或找出精度最好的那一折模型;还有一种是,把k个交叉验证的模型都拿出来,预测test时,k个模型都预测一遍,然后取均值,模型稳定性好,预测代价高。
(5)Q:如果训练是不平衡的,是否要考虑测试集是否也是不平衡的,再去决定是否使用一个平衡的验证集?
A:正常情况,可以不平衡,但是应该通过加权使其平衡。假设有两类1:9,要考虑真实世界中是不是就是不平衡,如果是,那就应该把那主流的90%做好,10%尽量做好;如果不是,不平衡只是因为采样没采好,那么应该把那10%的权重提升,最简单的把那10%的样本多复制几遍,不复制在loss中加权给他更大权重。
网友评论