机器学习(六)结果分析(过拟合、欠拟合)

一、模型评估常用方法

分类模型常用评估方法:

指标描述
Accuracy准确率
Precision精准度/查准率
Recall召回率/查全率
P-R曲线查准率为纵轴,查全率为横轴,作图
F1F1值
Confusion Matrix混淆矩阵
ROCROC曲线
AUCROC曲线下的面积

回归模型常用评估方法:

指标描述
Mean Square Error (MSE, RMSE)平均方差
Absolute Error (MAE, RAE)绝对误差
R-SquaredR平方值

二、误差(error)、偏差(bias)、方差(variance)的区别

1. 误差(error)

一般把模型预测结果与样本真实输出之间的差异称为误差,
error = bias + var + noise

2. 噪声(noise)

描述了在当前任务上任何学习算法所能达到的期望泛化误差的下界,刻画了学习问题本身的难度

3. 偏差(bias)

  • 偏差衡量模型拟合训练数据的能力,反映在模型在样本上的输出与真实值之间的差距(不同于误差,误差是针对所有数据的,偏差只作用于样本数据),反应模型本身的精度

  • 偏差越小,拟合能力越高,越接近真实数据;偏差越大,拟合能力越强

4. 方差(var)

  • 方差公式: S N 2 = 1 N ∑ i = 1 N ( x i − x ˉ ) 2 S_{N}^{2}=\frac{1}{N}\sum_{i=1}^{N}(x_{i}-\bar{x})^{2} SN2=N1i=1N(xixˉ)2

  • 方差描述的是预测结果偏离真实值的离散程度(距离度量)。方差越大,数据越分散,模型稳定性越差

  • 方差越小,模型泛化能力越高;反之,泛化能力越低

5. 标准差

标准差公式为: S N = 1 N ∑ i = 1 N ( x i − x ˉ ) 2 S_{N}=\sqrt{\frac{1}{N}\sum_{i=1}^{N}(x_{i}-\bar{x})^{2}} SN=N1i=1N(xixˉ)2

样本标准差公式为: S N = 1 N − 1 ∑ i = 1 N ( x i − x ˉ ) 2 S_{N}=\sqrt{\frac{1}{N-1}\sum_{i=1}^{N}(x_{i}-\bar{x})^{2}} SN=N11i=1N(xixˉ)2

在样本数据大致符合正态分布的情况下,标准差具有方便估算的特性:68%的数据点落在平均值前后1个标准差的范围内、95%的数据点落在平均值前后2个标准差的范围内,而99%的数据点将会落在平均值前后3个标准差的范围内。也即 3 σ \sigma σ 的基本原理

5. 经验误差与泛化误差

经验误差(empirical error):也叫训练误差(training error),模型在训练集上的误差。

泛化误差(generalization error):模型在新样本集(测试集)上的误差称为“泛化误差”。

6. 偏差与方差图

在这里插入图片描述

三、欠拟合、过拟合

1. 图示欠拟合和过拟合

根据不同的坐标方式,图解不同

1)横轴为训练样本数量,纵轴为误差

在这里插入图片描述
如上图所示,我们可以直观看出欠拟合和过拟合的区别:

  • ​模型欠拟合:在训练集以及测试集上同时具有较高的误差,此时模型的偏差较大;

  • 模型过拟合:在训练集上具有较低的误差,在测试集上具有较高的误差,此时模型的方差较大。

  • ​模型正常:在训练集以及测试集上,同时具有相对较低的偏差以及方差。

2)横轴为模型复杂程度,纵轴为误差

在这里插入图片描述

  • 模型欠拟合:模型在点A处,在训练集以及测试集上同时具有较高的误差,此时模型的偏差较大。
  • 模型过拟合:模型在点C处,在训练集上具有较低的误差,在测试集上具有较高的误差,此时模型的方差较大。
  • 模型正常:模型复杂程度控制在点B处为最优。

3)横轴正则项系数,纵轴误差

在这里插入图片描述

  • 模型欠拟合:模型在点C处,在训练集以及测试集上同时具有较高的误差,此时模型的偏差较大。

  • 模型过拟合:模型在点A处,在训练集上具有较低的误差,在测试集上具有较高的误差,此时模型的方差较大。 它通常发生在模型过于复杂的情况下,如参数过多等,会使得模型的预测性能变弱,并且增加数据的波动性。虽然模型在训练时的效果可以表现的很完美,基本上记住了数据的全部特点,但这种模型在未知数据的表现能力会大减折扣,因为简单的模型泛化能力通常都是很弱的。

  • 模型正常:模型复杂程度控制在点B处为最优。

2. 如何解决过拟合与欠拟合

欠拟合出现的原因:欠缺特征、模型复杂度过低。
过拟合出现的原因:训练数据不足,模型复杂度过高。

1) 如何解决欠拟合

  • 添加其他特征项。组合、泛化、相关性、上下文特征、平台特征等特征
  • 添加多项式特征及增加模型复杂度,把一次模型增加到二次、三次等。
  • 减小正则项系数,正则项是来防止过拟合的,但如果模型上出现了欠拟合,则需要减少正则化系数

2)如何解决过拟合!!!

  • 增加训练样本数,重新清洗数据
  • 降低模型复杂度
  • 增大正则项系数
  • 深度学习模型采用 dropout 方法
  • early stopping
  • 减小迭代次数
  • 增大学习率
  • 添加噪声数据
  • 树模型可以进行剪枝
  • 减少特征等

具体问题具体分析

四、类别不平衡问题

1. 问题描述

类别不平衡是指分类任务中,不同类别的训练样本数差距很大的情况

分类算法通常会假设不同类别的训练样本数目基本相同。如果不同类别的训练样本数差距很大,则会影响学习结果,测试结果变差。例如二分类问题中有 99 个正例,1 个反例,那么学习方法只需要返回正例就达到了 99% 的分类准确率,然而这样的模型没有价值。

2. 解决方法

1)扩大数据集

2)对大类数据欠采样

减少大类数据个数,使与小样本数目接近。但可能会丢失大样本重要信息
代表算法:EasyEnsemble。其思想是利用集成学习机制,将大类划分为若干集合提供不同的学习器使用。相当于对每个学习器都进行采样,但对于全局则不会丢失重要信息

3)对小类数据过采样

代表算法:SMOTE和ADASYN

SMOTE:通过对训练集中的小类别数据进行插值来产生额外的小类样本数
新的小类样本产生策略:对每个少数类样本 a ,在 a 的最近邻中随机选一个样本 b,然后在 a, b 之间的连线上随机选择一点作为新合成的随机样本

ADASYN:根据学习难度的不同,对不同的少数类别的样本使用加权分布,对于难以学习的少数类的样本,产生更多的综合数据。通过减少类不平衡引入的偏差和将分类决策边界自适应地转移到困难的样本的两种手段,改善了数据分布。

4)换评价指标,转化分析角度

将小类作为异常点,对其进行识别。

5)数据代价加权

对小类样本加权

6)将问题细化

### 深度学习中过拟合拟合的概念 在机器学习领域,尤其是深度学习中,模型的表现可以分为三类:过拟合拟合以及适度拟合。这些概念对于理解模型性能至关重要。 #### 拟合 (Underfitting) 当一个模型既无法很好地捕捉到训练数据中的模式,在训练集上的误差较大,也无法泛化到新的未见过的数据时,则认为该模型发生了拟合现象[^1]。这种情况通常表现为: - **偏差高**:即预测值与实际目标之间的差异大; - **方差低**:不同样本间的变化影响较小; 这表明模型过于简单,未能充分表达输入特征与输出标签间的映射关系。因此,即使是在已知的训练集中也难以取得较好的成绩。 #### 过拟合 (Overfitting) 相反地,如果一个模型能够完美甚至超常地记忆住训练集里的每一个细节以至于它不仅学会了有用的信息还记住了噪声部分,那么就出现了过拟合的情况[^2]。具体特点如下: - **偏差低**:因为几乎完全匹配了训练数据; - **方差高**:对新数据非常敏感,容易受到微小扰动的影响而产生巨大波动; 这意味着虽然模型可以在训练集上获得极高的准确性,但在面对未知测试集或其他真实世界场景下的表现却很差劲。 #### 适度拟合 (Good Fit) 理想的状况是找到两者之间的一个平衡点——既能较好地适应现有数据又具备一定的泛化能力去应对未来可能出现的新情况。此时模型具有适中的偏差和方差水平,能够在保持一定灵活性的同时有效地概括出潜在规律。 ### 图像表示区别解释 为了更直观地区分上述三种状态,可以通过绘制损失函数随迭代次数变化曲线来展示它们各自的特点: - 对于**拟合**而言,无论是训练还是验证阶段,其损失都会维持在一个较高的位置不变,显示出明显的收敛失败迹象。 - 而到了**过拟合**这边,可以看到随着轮次增多,尽管训练错误率持续下降直至趋近零点附近,但是交叉验证/测试集合上的得分反而会逐渐恶化上升形成剪刀差形态。 - 至于**适度拟合**的理想情形下,两条线应该趋于平稳并尽可能靠近彼此但不相交,代表着稳定且良好的学习效果。 ```python import matplotlib.pyplot as plt import numpy as np # 假设数据 epochs = range(1, 101) train_loss_underfit = [np.random.uniform(0.8, 1.2) for _ in epochs] val_loss_underfit = train_loss_underfit.copy() train_loss_overfit = [-0.05 * i + 1.5 for i in epochs] val_loss_overfit = [min(train_loss_overfit[i], val_loss_underfit[i]) + 0.7 for i in range(len(epochs))] good_fit_train = [max(-0.01*i+1, 0.3) for i in epochs] good_fit_val = good_fit_train[:] plt.figure(figsize=(14, 4)) plt.subplot(131) plt.plot(epochs, train_loss_underfit, label='Training Loss') plt.plot(epochs, val_loss_underfit, '--', label='Validation Loss') plt.title('Underfitting') plt.legend() plt.ylim([0, 2]) plt.subplot(132) plt.plot(epochs, train_loss_overfit, label='Training Loss') plt.plot(epochs, val_loss_overfit, '--', label='Validation Loss') plt.title('Overfitting') plt.legend() plt.ylim([0, 2]) plt.subplot(133) plt.plot(epochs, good_fit_train, label='Training Loss') plt.plot(epochs, good_fit_val, '--', label='Validation Loss') plt.title('Good Fit') plt.legend() plt.ylim([0, 2]); plt.tight_layout() plt.show() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值