美文网首页
机器学习-模型评估与选择

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

作者: 田浩thao | 来源:发表于2019-06-09 17:31 被阅读0次

    1、前言

        对于相同的数据及问题,可以有不同的算法模型解决,那么如何评价不通算法的优劣,以及最终应该选择哪一种?针对这些问题,本文将做简单介绍。

    2、常见术语

    • 过拟合::模型由于学习的“太好”,在训练集上表现很好(训练误差小),而在新样本上表现很差(泛化误差大)。
    • 欠拟合::与过拟合相对的概念,模型对训练集还没有完全学习好,在训练集上就表现不好(训练误差大)。
    • 误差::模型预测值与真实值之间的差异。
    • 训练误差(经验误差)::模型在训练集上的误差。
    • 泛化误差::模型在新样本上的误差。

    3、模型性能度量

    3.1 回归任务

    假设Y=\left\{y_{1}, y_{2}, \ldots, y_{n}\right\}为真实数据,\hat{Y}=\left\{\hat{y}_{1}, \hat{y}_{2}, \ldots, \hat{y}_{n}\right\}为预测结果数据,则:

    • 均方误差(平方损失)MSE:回归任务中常用的性能度量
      M S E=\frac{1}{n} \sum_{i=1}^{n}\left(y_{i}-\hat{y}_{i}\right)^{2}
    • 均方根误差 (root mean squared error)RMSE:
      R M S E=\sqrt{MSE}=\sqrt{\frac{1}{n} \sum_{i=1}^{n}\left(y_{i}-\hat{y}_{i}\right)^{2}}
    • 平均绝对误差 (mean absolute error) MAE:
      M A E=\frac{1}{n} \sum_{i=1}^{n}\left|y_{i}-\hat{y}_{i}\right|
    • 均方根对数误差 (root mean squared logarithmic error) RMSLE:
      R M S L E=\sqrt{\frac{1}{n} \sum_{i=1}^{n}\left(\log \left(\hat{y}_{i}+1\right)-\log \left(y_{i}+1\right)\right)^{2}}
    3.2 分类任务
    • 错误率:分类错误样本数占总样本数的比例。
    • 精度:分类正确样本数占总样本数的比例,精度 = 1 - 错误率。
    • 混淆矩阵:
      对于二分类问题,根据分类结果可以得到以下混淆矩阵:
    真实情况 预测结果 -
    - 正例 反例
    正例 TP(真正例) FN(假反例)
    反例 FP(假正例) TN(真反例)
    • 查准率:预测为正例的结果中,预测正确的占比
      P=\frac{TP}{TP+FP}
    • 查全率(召回率):真实正例中,预测正确的占比
      R=\frac{TP}{TP+FN}
    • P-R曲线(查准率-查全率曲线):查准率为纵轴,查全率为横轴
      P-R曲线与平衡点示意图

    上图中A曲线将C曲线完全包住,则A优于C;
    A与B有交点,则比较A与B平衡点(" 查准率=查全率"),所以A有于B

    • F1度量:直接用平衡点去度量有些简化,在实际评估中,更多的是用F1度量(基于查准率与查全率的调和平均\frac{1}{F 1}=\frac{1}{2} \cdot\left(\frac{1}{P}+\frac{1}{R}\right)
      F 1=\frac{2 \times P \times R}{P+R}=\frac{2 \times TP}{样本总数+TP-TN}
    • F_{\beta}度量:在实际应用中,可能对查全率与查准率重视程度不同,F_{\beta}是加权调和平均:\frac{1}{F_{\beta}}=\frac{1}{1+\beta^{2}} \cdot\left(\frac{1}{P}+\frac{\beta^{2}}{R}\right)F_{\beta}表达式如下:
      F_{\beta}=\frac{\left(1+\beta^{2}\right) \times P \times R}{\left(\beta^{2} \times P\right)+R}
      {\beta}>0代表查全率对查准率的重要性,当{\beta}=1则变为F1;{\beta}>1查全率更重要,{\beta}<1查准率更重要。
    • 宏F1(\operatorname{macro}-F1)度量:在实际应用中,可能会<1>对样本进行多次训练/测试、<2>对不同样本进行训练/测试、<3>多分类任务,对没两个类别组个成一个混淆矩阵 等。这些都会产生n个混淆矩阵,最终我们想根据这n个混淆矩阵去度量模型。所以有了以下表达式:
      \operatorname{macro}-F 1=\frac{2 \times \operatorname{macro}-P \times \operatorname{macro-R}}{\operatorname{macro}-P+\operatorname{macro}-R}
      其中:
      宏查准率(\operatorname{macro}-P
      \operatorname{macro}-P=\frac{1}{n} \sum_{i=1}^{n} P_{i}
      宏查全率(\operatorname{macro}-R
      \operatorname{macro}-R=\frac{1}{n} \sum_{i=1}^{n} R_{i}
    • 微F1(\operatorname{micro}-F1)度量:在宏F1计算中,先根据每个混淆矩阵计算其查全率与查准率,最后进行平均;我们也可以先对所有混淆矩阵求TP、FP、TN、FN的平均值,然后再进行求解,此时得到微F1(\operatorname{micro}-F1)度量:
      \operatorname{micro}-F 1=\frac{2 \times \operatorname{micro}-P \times \operatorname{micro}-R}{\operatorname{micro}-P+\operatorname{micro}-R}
      其中:
      "微查准率" (micro-P):
      \operatorname{micro}-P=\frac{\overline{T P}}{\overline{T P}+\overline{F P}}
      "微查全率" (micro-R):
      \operatorname{micro}-R=\frac{\overline{T P}}{\overline{T P}+\overline{F N}}
    • ROC曲线:纵轴为:真正例率(TPR),横轴为:假正例率(FPR)(这里可以做如下设想:预测结果是0-1的概率,则对于二分类问题,阈值越接近0,则FPR会逐渐增大,但是TPR也会增大)
      "真正例率" (TPR): 真实正例中,预测正确的占比(与查全率\召回率相同)
      \mathrm{TPR}=\frac{T P}{T P+F N}
      "假正例率" (FPR): 真实反例中,预测错误的占比(真实为反例,却预测成正例的占比)
      \mathrm{FPR}=\frac{F P}{T N+F P}
      ROC曲线与AUC示意图
      当模型A将B的ROC曲线完全包住,则模型A优于B;
      当两个模型有交集,则与坐标轴围成的右下角面积越大,则约优。
    • AUC:ROC曲线下方面积,面积越大,模型越好。理想目标:TPR=1,FPR=0,即上图a中(0,1)点,所以ROC曲线越靠拢(0,1)点,越偏离45度对角线越好。
    • 代价敏感错误率与代价曲线:在实际应用中,对一些类别的误判可能造成的后果是不同的。例如:在医学生,将患者误判为健康人,与将健康人误判为患者的代价是不同的。所以此时需要考虑不代价敏感错误率。令D^{+}D^{-}分别代表样本集D 的正子集和反子集,则"代价敏感" (cost-sensitive)错误率为:
      \begin{aligned} E(f ; D ; c o s t)=& \frac{1}{m}\left(\sum_{\boldsymbol{x}_{i} \in D^{+}} \mathbb{I}\left(f\left(\boldsymbol{x}_{i}\right) \neq y_{i}\right) \times \operatorname{cost}_{01}\right.\\ &+\sum_{\boldsymbol{x}_{i} \in D^{-}} \mathbb{I}\left(f\left(\boldsymbol{x}_{i}\right) \neq y_{i}\right) \times \cos t_{10} ) \end{aligned}
      其中,\cos t_{i j}表示将第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 自助法

      假设样本集D共有m个样本,则对D进行有放回采样m次,形成新的数据集D^{\prime},则D^{\prime}中一共有m个样本,但是这些样本中有一些是重复的,在样本集D中一直不被采到的概率为\left(1-\frac{1}{m}\right)^{m},取极限有:
    \lim _{m \rightarrow \infty}\left(1-\frac{1}{m}\right)^{m} \mapsto \frac{1}{e} \approx 0.368
      利用D^{\prime}的m个样本作为训练集,其余没有被采样到的数据作为测试集,这样的测试结果称为“包为估计”。这种方法经常用在样本集较少的情况下,因为通过采样之后,数据集D^{\prime}的分布与原始D的分布将有区别,这将会产生估计误差,所以在实际应用中,如果样本足够多,则一般会采用留出法和交叉验证法。

    5、方差与偏差

    • 方差(\operatorname{var}(\boldsymbol{x})):反映的是预测与真实结果之间的偏离程度,即反映了模型本身的拟合能力。
    • 偏差(\operatorname{bias}^{2}(\boldsymbol{x})):反映的是由于训练集的改变(样本量不变)所引起模型性能的变化。
    • 噪声(\varepsilon^{2}):反映的是问题本身的难度。
      通过推导(详见周志华老师《机器学习》P45页),可以得到模型的泛化误差为:
      E(f ; D)=\operatorname{bias}^{2}(\boldsymbol{x})+\operatorname{var}(\boldsymbol{x})+\varepsilon^{2}
    • 偏差一方差窘境:一般情况下,如果将模型学习的太好,则可能会出现过拟合,测试偏差将非常小,但是方差将很大;如果偏差大,则可能是欠拟合,此时由于模型还没有学习好,所以方差会比较小。下图是偏差与方差,以及泛化误差的示意图:
      泛化误差与偏差、方差关系示意图
      所以,在实际应用中,要似泛化误差足够小,则应该去平衡方差与偏差,不能只最求某个足够小。

    以上内容如有理解不当,请指出,谢谢!另,文章中有些内容来源于一些书籍或其他博客,这里就不一一列举,如有侵权,请与我联系删除。

    相关文章

      网友评论

          本文标题:机器学习-模型评估与选择

          本文链接:https://www.haomeiwen.com/subject/bvigxctx.html