机器学习笔记【Week6】
一、模型结果下一步
-
训练模型得到结果后,常面临:模型性能不理想,下一步如何改进?
-
通过对训练误差和验证误差的观察,判断是高偏差(欠拟合)还是高方差(过拟合)。
-
一般步骤:
-
计算训练误差和验证误差,不包含正则项。
-
判断两者的大小和差距。
-
根据判断选择策略:
情况 训练误差 验证误差 结论 改进方向 欠拟合(高偏差) 高 高 模型能力不足 增加特征,减小正则化 过拟合(高方差) 低 高 泛化能力差 增加训练数据,增加正则化
-
二、评估假设的误差
- 训练误差计算:在训练集上的平均平方误差(MSE),不含正则化项。
J train ( θ ) = 1 2 m train ∑ i = 1 m train ( h θ ( x ( i ) ) − y ( i ) ) 2 J_{\text{train}}(\theta) = \frac{1}{2 m_{\text{train}}} \sum_{i=1}^{m_{\text{train}}} \left(h_\theta(x^{(i)}) - y^{(i)}\right)^2 Jtrain(θ)=2mtrain1i=1∑mtrain(hθ(x(i))−y(i))2
- 验证误差计算:在验证集上的平均平方误差(MSE),同样不含正则化项。
J cv ( θ ) = 1 2 m cv ∑ i = 1 m cv ( h θ ( x ( i ) ) − y ( i ) ) 2 J_{\text{cv}}(\theta) = \frac{1}{2 m_{\text{cv}}} \sum_{i=1}^{m_{\text{cv}}} \left(h_\theta(x^{(i)}) - y^{(i)}\right)^2 Jcv(θ)=2mcv1i=1∑mcv(hθ(x(i))−y(i))2
- 关键点:评估时不要使用包含正则项的代价函数,因为正则项并不反映模型拟合效果,而是防止过拟合。
三、模型选择和交叉验证
为何需要交叉验证集?
-
训练集用于训练模型。
-
交叉验证集用于调超参数,避免用测试集调参造成测试结果偏差。
-
测试集用于最后模型评估。
-
调参流程
- 选取一系列超参数组合(如 λ \lambda λ 正则化参数,或者多项式阶数 d d d)。
- 对每组参数,训练模型 θ ( i ) \theta^{(i)} θ(i)。
- 计算对应交叉验证误差 J cv ( θ ( i ) ) J_{\text{cv}}(\theta^{(i)}) Jcv(θ(i))。
- 选择使交叉验证误差最低的参数。
- 使用训练集 + 交叉验证集合并训练最终模型。
- 在测试集上评估模型性能。
四、诊断偏差和方差
训练误差和验证误差的表现:
情况 | 训练误差 | 验证误差 | 说明 |
---|---|---|---|
高偏差 | 高 | 高 | 模型欠拟合 |
高方差 | 低 | 高 | 模型过拟合 |
适中 | 低 | 低 | 模型拟合良好 |
调整建议
- 高偏差时:
- 增加模型复杂度(如使用多项式回归的更高阶)。
- 减小正则化系数 λ \lambda λ。
- 添加更多特征。
- 高方差时:
- 增加训练数据量。
- 增加正则化系数 λ \lambda λ。
- 简化模型(降阶、多项式次数减小等)。
五、正则化与偏差/方差权衡
- 正则化项加入代价函数:
J ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 + λ 2 m ∑ j = 1 n θ j 2 J(\theta) = \frac{1}{2m} \sum_{i=1}^m \left(h_\theta(x^{(i)}) - y^{(i)}\right)^2 + \frac{\lambda}{2m} \sum_{j=1}^n \theta_j^2 J(θ)=2m1i=1∑m(hθ(x(i))−y(i))2+2mλj=1∑nθj2
- λ \lambda λ 越大,模型越受到限制,倾向欠拟合(偏差增大)。
- λ \lambda λ 越小,模型自由度越大,可能过拟合(方差增大)。
- 调整 λ \lambda λ 是偏差-方差权衡的重要手段。
六、学习曲线
-
通过画学习曲线,观察训练误差和验证误差随训练样本数 m m m 增加的变化趋势。
-
画法步骤:
- 取前 m m m 个训练样本,训练模型 θ ( m ) \theta^{(m)} θ(m)。
- 计算训练误差:
J train ( θ ( m ) ) = 1 2 m ∑ i = 1 m ( h θ ( m ) ( x ( i ) ) − y ( i ) ) 2 J_{\text{train}}(\theta^{(m)}) = \frac{1}{2 m} \sum_{i=1}^m \left(h_{\theta^{(m)}}(x^{(i)}) - y^{(i)}\right)^2 Jtrain(θ(m))=2m1i=1∑m(hθ(m)(x(i))−y(i))2
- 计算验证误差:
J cv ( θ ( m ) ) = 1 2 m cv ∑ i = 1 m cv ( h θ ( m ) ( x ( i ) ) − y ( i ) ) 2 J_{\text{cv}}(\theta^{(m)}) = \frac{1}{2 m_{\text{cv}}} \sum_{i=1}^{m_{\text{cv}}} \left(h_{\theta^{(m)}}(x^{(i)}) - y^{(i)}\right)^2 Jcv(θ(m))=2mcv1i=1∑mcv(hθ(m)(x(i))−y(i))2
-
曲线含义
- 如果训练误差和验证误差都很高,且差距小,通常是高偏差,需增加模型复杂度。
- 如果训练误差远低于验证误差,通常是高方差,需增加训练样本或正则化。
- 验证误差随训练样本增加不断下降,说明模型受益于更多数据。
七、最终结果决定下一步
结合误差分析和学习曲线判断:
- 高偏差(欠拟合)
- 增加模型复杂度(更高阶多项式等)。
- 减小正则化强度。
- 添加更多有意义的特征。
- 高方差(过拟合)
- 增加训练样本数。
- 增强正则化。
- 减少特征数量或简化模型。
八、机器学习系统的要求
- 明确业务目标和任务定义。
- 明确性能指标(准确率、查准率、召回率等)。
- 确定数据来源。
- 制定评估标准和成功标准。
九、误差分析
- 目的:通过人工分析验证集上的错误样本,发现模型主要缺陷。
- 步骤:
- 选择验证集上的若干错误样本。
- 分类这些错误样本的类型或原因(比如特征不足,数据噪声,模型欠拟合等)。
- 针对常见错误类型,设计改进方案,比如:
- 添加新特征。
- 改变模型结构。
- 清理数据。
- 效果:误差分析指导方向比盲目调参更有效。
十、类别不平衡的误差度量
- 真实世界问题中,类别分布通常不均衡。
- 准确率可能不适合衡量模型好坏:
- 如正例占极少数,模型全预测为反例准确率也很高,但毫无用处。
- 需采用其他指标,如查准率、召回率。
十一、查准率与查全率
定义:
Precision = T P T P + F P \text{Precision} = \frac{TP}{TP + FP} Precision=TP+FPTP
Recall = T P T P + F N \text{Recall} = \frac{TP}{TP + FN} Recall=TP+FNTP
- 查准率(Precision):模型预测为正的样本中,有多少是真正正例。
- 查全率(Recall):所有正例中,模型正确预测出来的比例。
权衡关系:
- 提高查准率会降低查全率,反之亦然。
- 具体应用中,需根据任务侧重点调整阈值或优化目标。
十二、机器学习系统中的数据
- 数据质量直接影响模型性能。
- 需要:
- 数据清洗,去除脏数据。
- 特征工程,挖掘有用特征。
- 增加训练数据,提升泛化。
- 考虑数据增强技术。