机器学习-模型评估与选择

1、前言 【机器学习-模型评估与选择】????对于相同的数据及问题,可以有不同的算法模型解决,那么如何评价不通算法的优劣,以及最终应该选择哪一种?针对这些问题,本文将做简单介绍。
2、常见术语

  • 过拟合::模型由于学习的“太好”,在训练集上表现很好(训练误差小),而在新样本上表现很差(泛化误差大)。
  • 欠拟合::与过拟合相对的概念,模型对训练集还没有完全学习好,在训练集上就表现不好(训练误差大)。
  • 误差::模型预测值与真实值之间的差异。
  • 训练误差(经验误差)::模型在训练集上的误差。
  • 泛化误差::模型在新样本上的误差。
3、模型性能度量 3.1 回归任务 假设为真实数据,为预测结果数据,则:
  • 均方误差(平方损失)MSE:回归任务中常用的性能度量
  • 均方根误差 (root mean squared error)RMSE:
  • 平均绝对误差 (mean absolute error) MAE:
  • 均方根对数误差 (root mean squared logarithmic error) RMSLE:
3.2 分类任务
  • 错误率:分类错误样本数占总样本数的比例。
  • 精度:分类正确样本数占总样本数的比例,精度 = 1 - 错误率。
  • 混淆矩阵:
    对于二分类问题,根据分类结果可以得到以下混淆矩阵:
真实情况 预测结果 -
- 正例 反例
正例 TP(真正例) FN(假反例)
反例 FP(假正例) TN(真反例)
  • 查准率:预测为正例的结果中,预测正确的占比
  • 查全率(召回率):真实正例中,预测正确的占比
  • P-R曲线(查准率-查全率曲线):查准率为纵轴,查全率为横轴
    机器学习-模型评估与选择
    文章图片
    P-R曲线与平衡点示意图
上图中A曲线将C曲线完全包住,则A优于C;
A与B有交点,则比较A与B平衡点(" 查准率=查全率"),所以A有于B

  • F1度量:直接用平衡点去度量有些简化,在实际评估中,更多的是用F1度量(基于查准率与查全率的调和平均)
  • 度量:在实际应用中,可能对查全率与查准率重视程度不同,是加权调和平均:,表达式如下:

    代表查全率对查准率的重要性,当则变为F1;查全率更重要,查准率更重要。
  • 宏F1()度量:在实际应用中,可能会<1>对样本进行多次训练/测试、<2>对不同样本进行训练/测试、<3>多分类任务,对没两个类别组个成一个混淆矩阵 等。这些都会产生n个混淆矩阵,最终我们想根据这n个混淆矩阵去度量模型。所以有了以下表达式:

    其中:
    宏查准率()

    宏查全率()
  • 微F1()度量:在宏F1计算中,先根据每个混淆矩阵计算其查全率与查准率,最后进行平均;我们也可以先对所有混淆矩阵求TP、FP、TN、FN的平均值,然后再进行求解,此时得到微F1()度量:

    其中:
    "微查准率" (micro-P):

    "微查全率" (micro-R):
  • ROC曲线:纵轴为:真正例率(TPR),横轴为:假正例率(FPR)(这里可以做如下设想:预测结果是0-1的概率,则对于二分类问题,阈值越接近0,则FPR会逐渐增大,但是TPR也会增大)
    "真正例率" (TPR): 真实正例中,预测正确的占比(与查全率\召回率相同)

    "假正例率" (FPR): 真实反例中,预测错误的占比(真实为反例,却预测成正例的占比)

    机器学习-模型评估与选择
    文章图片
    ROC曲线与AUC示意图
    当模型A将B的ROC曲线完全包住,则模型A优于B;
    当两个模型有交集,则与坐标轴围成的右下角面积越大,则约优。
  • AUC:ROC曲线下方面积,面积越大,模型越好。理想目标:TPR=1,FPR=0,即上图a中(0,1)点,所以ROC曲线越靠拢(0,1)点,越偏离45度对角线越好。
  • 代价敏感错误率与代价曲线:在实际应用中,对一些类别的误判可能造成的后果是不同的。例如:在医学生,将患者误判为健康人,与将健康人误判为患者的代价是不同的。所以此时需要考虑不代价敏感错误率。令 与分别代表样本集D 的正子集和反子集,则"代价敏感" (cost-sensitive)错误率为:
    机器学习-模型评估与选择
    文章图片

    其中,表示将第i 类样本预测为第j 类样本的代价,m为总样本数。
    关于代价曲线这里不做太多介绍,有兴趣可以参考知乎上一篇帖子知乎上一篇帖子,分析的比较详细。这里只需要知道对于不同的分类错误,会有不同的代价,具体需根据实际情况进行设计。
4、模型评估方法 ??利用训练样本(“训练集”)之外的测试样本(“测试集”),对模型性能进行评估,将模型在测试集上的表现(“测试误差”)近似为模型的泛化能力(“泛化误差”)
4.1 留出法 ??对样本进行分层采样,例如对于二分类样本中,正、反样本各有500个,留30%作为测试样本,则应该分别对正、反样本采样150个作为测试样本(分层采样)。
??利用不同的训练样本,其训练的模型也是有差异的,所以一般会采用多次留出法,最后对每次结果进行平均作为最终模型的评估结果。
??该方法中涉及留出一定比例的样本作为测试集,但是这个比例是无法计算的。留的太多,则训练的模型可能离真实模型比较远;留的太少,则评估结果可能不够准确。一般选择1/5-1/3比例的样本作为测试样本。
4.2 交叉验证 ??交叉验证法通常称为“k折交叉验证”(“k-fold cross validation”),k最常见的取值为10,下图是10折交叉验证示意图:

机器学习-模型评估与选择
文章图片
10折交叉验证示意图
??交叉验证通常会对样本重复划分p次,每次进行k此交叉验证,例如:“10次10折交叉验证”。
留一法:交叉验证的特例,每次只留一个样本作为测试集,如果有m个样本,则k=m时变成了“留一法”。该方法对于样本量较大时的时间开销将非常大,在实际中应用较少。
4.3 自助法 ??假设样本集共有m个样本,则对进行有放回采样m次,形成新的数据集,则中一共有m个样本,但是这些样本中有一些是重复的,在样本集中一直不被采到的概率为,取极限有:

??利用的m个样本作为训练集,其余没有被采样到的数据作为测试集,这样的测试结果称为“包为估计”。这种方法经常用在样本集较少的情况下,因为通过采样之后,数据集的分布与原始的分布将有区别,这将会产生估计误差,所以在实际应用中,如果样本足够多,则一般会采用留出法和交叉验证法。
5、方差与偏差
  • 方差():反映的是预测与真实结果之间的偏离程度,即反映了模型本身的拟合能力。
  • 偏差():反映的是由于训练集的改变(样本量不变)所引起模型性能的变化。
  • 噪声():反映的是问题本身的难度。
    通过推导(详见周志华老师《机器学习》P45页),可以得到模型的泛化误差为:
  • 偏差一方差窘境:一般情况下,如果将模型学习的太好,则可能会出现过拟合,测试偏差将非常小,但是方差将很大;如果偏差大,则可能是欠拟合,此时由于模型还没有学习好,所以方差会比较小。下图是偏差与方差,以及泛化误差的示意图:
    机器学习-模型评估与选择
    文章图片
    泛化误差与偏差、方差关系示意图
    所以,在实际应用中,要似泛化误差足够小,则应该去平衡方差与偏差,不能只最求某个足够小。
以上内容如有理解不当,请指出,谢谢!另,文章中有些内容来源于一些书籍或其他博客,这里就不一一列举,如有侵权,请与我联系删除。

    推荐阅读