1. 模型选择
1.1. 模型评估基础
训练误差:模型在训练数据上的误差。
问题:过度追求低训练误差 → 过拟合(模型记忆噪声,泛化能力差)。
测试误差:模型在新数据上的误差,也称为泛化误差。
目标:最小化测试误差 → 确保模型泛化能力。
测试误差可分解为三部分:偏差是「学错了」,方差是「学太细」,噪声是「没办法」。
偏差 (Bias):模型预测与真实值的系统性差距。
本质:模型忽略了多少真实规律
高偏差 → 欠拟合(模型过于简单,忽略数据规律)。
方差 (Variance):模型对训练数据扰动的敏感性。
本质:模型学习了多少噪声
高方差 → 过拟合(模型复杂,过度拟合噪声)。
不可约误差 (Irreducible Error):数据固有噪声σ。
关键:与模型无关,是现实世界的固有不确定性。
模型状态 |
表现 |
误差来源 |
欠拟合 |
训练误差和测试误差均高 |
高偏差,低方差 |
过拟合 |
训练误差低,测试误差高 |
低偏差,高方差 |
理想模型 |
训练/测试误差均低 |
偏差和方差平衡 |
场景 |
靶纸示意图 |
模型表现 |
低偏差 + 低方差 |
🎯 箭簇紧贴靶心 |
理想模型(泛化能力强) |
高偏差 + 低方差 |
🎯 箭簇远离靶心但集中 |
欠拟合(模型太简单) |
低偏差 + 高方差 |
🎯 箭簇围绕靶心但分散 |
过拟合(模型太复杂) |
高偏差 + 高方差 |
🎯 箭簇既偏又散 |
最差情况(如用线性模型拟合复杂数据且样本不足) |
📌 关键理解:
降低偏差 → 让模型更复杂(如增加神经网络层数、使用更高阶特征)
降低方差 → 简化模型或正则化(如L2正则、Dropout、增加训练数据)
例子:
假设用不同深度的决策树做实验:
树深度=1:训练误差 0.5,测试误差 0.52 → 高偏差(树太简单)
树深度=10:训练误差 0.01,测试误差 0.35 → 高方差(树太复杂)
树深度=3:训练误差 0.2,测试误差 0.22 → 平衡状态
1.2. 训练集_验证集_测试集
类似高考,平时的学习是训练数据集,周考是验证数据集,高考是测试数据集。
训练集 (Training Set):用于训练模型结果。
用于训练模型参数(如梯度下降更新权重)
占比:通常 60-80%
验证集 (Validation Set):用于评估模型好坏的数据集。【不要和训练数据混在一起】
用于模型选择:调整超参数(如正则化强度、树深度)
评估模型性能,避免使用测试集做决策
占比:通常 10-20%
测试集 (Test Set):只使用一次的数据集。
用于最终评估模型泛化能力(仅使用一次!)
必须与训练/验证集无重叠
占比:通常 10-20%
1.3. K折交叉验证
但是日常中,没有那么多数据可以用。
因此,使用 K折交叉验证 进行训练和验证。
Cross validation:交叉验证用于防止模型过于复杂而引起的过拟合。
方法:
可以先在一个子集上做分析, 而其它子集则用来做后续对此分析的确认及验证。 一开始的子集被称为 训练集。 而其它的子集则被称为 验证集 。
步骤:
将训练集随机划分为 K 个等大小子集(K=5 或 10)
进行 K 轮迭代:
第 i 轮:用 第 i 个子集作为验证集,其余 K-1 个子集作为训练集;
计算该轮的验证误差$$E_i$$
最终验证误差:
2. 过拟合和欠拟合
在机器学习中,过拟合和欠拟合是两个常见的关键概念,它们直接影响着模型的性能和泛化能力。
过拟合是指模型在训练数据上表现得非常好,但在新的、未见过的数据(即测试数据)上表现不佳的现象。这就好比一个学生为了应对考试,把教科书上的例题和习题都背得滚瓜烂熟,甚至包括题目中的每一个细节和特殊情况,以至于他能在这些题目上得满分。但是一旦遇到新的、不在教科书中的题目时,他就会不知所措,无法正确解答。
- 过拟合的原因通常是因为模型过于复杂,参数过多,导致模型为了迎合训练数据中的每一个细节,包括噪声和随机波动,而丢失了数据背后的真实规律。
- 例如,在一个决策树模型中,如果树的深度过大,分支过多,就容易出现过拟合。
欠拟合则与过拟合相反,它是指模型在训练数据和测试数据上都表现不佳的情况。这就像一个学生在学习过程中没有掌握好基本的概念和方法,对简单的题目都无法正确解答,更不用说复杂的题目了。
- 欠拟合通常是因为模型过于简单,缺乏足够的表达能力来捕捉数据中的规律。
- 比如,用一个线性模型来拟合一个具有复杂非线性关系的数据集,模型就很难准确地描述数据的分布和变化趋势。
在实际的机器学习任务中,我们需要在过拟合和欠拟合之间找到一个平衡点,通过合理地选择模型的复杂度、调整参数、使用正则化等方法,使模型既能较好地拟合训练数据,又能在未知数据上具有良好的泛化性能。