如何评价模型好坏

数据集(训练&验证&测试)评价分类结果混淆矩阵分类评价指标准确率precision:召回率recallF1-score曲线ROC曲线PR曲线 概念偏差和方差偏差方差产生的原因偏差方差平衡总结

学习目标

  • 数据拆分:训练数据集&测试数据集

  • 评价分类结果:准确率precision、混淆矩阵、精确率、召回率recall、F1score、ROC曲线

  • 评价回归结果:MSE、RMSE、MAE、R-Squred

  • 了解模型的偏差方差

数据集(训练&验证&测试)

https://en.wikipedia.org/wiki/Training,_validation,_and_test_sets

机器学习的普遍任务就是从数据中学习和构建模型(该过程称之为训练),并且能够在将来遇到的数据上进行预测。用于构建最终模型的数据集通常有多个;在构建模型的不同阶段,通常有三种数据集:训练集、验证集和测试集。

首先,模型在训练集(training dataset)上进行拟合。对于监督式学习,训练集是由用来拟合参数(例如人工神经网络中神经元之间链接的权重)的样本组成的集合。在实践中,训练集通常是由输入向量(标量)和输出向量(标量)组成的数据对。其中输出向量(标量)被称为目标或标签。在训练过程中,当前模型会对训练集中的每个样本进行预测,并将预测结果与目标进行比较。根据比较的结果,学习算法会更新模型的参数。模型拟合的过程可能同时包括特征选择和参数估计。

接下来,拟合得到的模型会在第二个数据集——验证集(validation dataset)上进行预测。在对模型的超参数(例如神经网络中隐藏层的神经元数量)进行调整时,验证集提供了对在训练集上拟合得到模型的无偏评估。验证集可用于正则化中的提前停止:在验证集误差上升时(这是在训练集上过拟合的信号),停止训练。不过,在实践中,由于验证集误差在训练过程中会有起伏,这种做法有时不奏效。由此,人们发明了一些规则,用做判定过拟合更好的信号。

最后,测试集(test dataset)可被用来提供对最终模型的无偏评估。若测试集在训练过程中从未用到(例如,没有被用在交叉验证当中),则它也被称之为预留集。

评价分类结果

指标都是为了衡量模型的泛化能力,

混淆矩阵

P(预测为正) N(预测为负)
T(实际为正) TP FN
F(实际为负) FP TN

T/F是指预测是否正确,P/N 表示预测结果。

  • TP 表示预测为正,且预测正确;

  • FN 表示预测为负,且预测错误;

  • FP 表示预测为正,且预测错误;

  • TN表示预测为负,且预测正确。

分类评价指标

https://mp.weixin.qq.com/s/zeOviV1rjcSSwk79FznnNA

准确率precision:

预测为正的样本中有多少是正的样本。​

召回率recall

正样本中有多少被预测正确了。​

召回率的应用场景:比如拿网贷违约率为例,相对好用户,我们更关心坏用户,不能错放过任何一个坏用户。因为如果我们过多的将坏用户当成好用户,这样后续可能发生的违约金额会远超过好用户偿还的借贷利息金额,造成严重偿失。召回率越高,代表实际坏用户被预测出来的概率越高,它的含义类似:宁可错杀一千,绝不放过一个。

F1-score

通常,如果想要找到二者之间的一个平衡点,我们就需要一个新的指标:F1分数。F1分数同时考虑了查准率和查全率,让二者同时达到最高,取一个平衡。F1分数的公式为 = 2查准率查全率 / (查准率 + 查全率)。**我们在图中看到的平衡点就是F1分数得来的结果。

F1Score指准确率和召回率的综合得分。​

曲线

ROC曲线

ROC曲线全称是‘受试者工作曲线’。ROC曲线越远离对角线,模型效果越好。如果要比较两个分类器的性能孰优孰劣,可以比较ROC曲线下的区域面积即为AUC值,AUC值越接近1模型的效果越好。

ROC 曲线下面积是,对于随机选择的正类别样本确实为正类别(recall),以及随机选择的负类别样本为正类别(fpr),分类器更确信前者的概率。

纵轴:真正例率TPR=TP/(TP+FN),也就是召回率Recall;

横轴:假正例率FPR=FP/(FP+TN)。

img

FPR表示模型虚报的响应程度,而TPR表示模型预测响应的覆盖程度。我们所希望的当然是:虚报的越少越好,覆盖的越多越好。所以总结一下就是TPR越高,同时FPR越低(即ROC曲线越陡),那么模型的性能就越好。参考如下动态图进行理解

img

ROC曲线无视样本不平衡

前面已经对ROC曲线为什么可以无视样本不平衡做了解释,下面我们用动态图的形式再次展示一下它是如何工作的。我们发现:**无论红蓝色样本比例如何改变,ROC曲线都没有影响。

img

PR曲线

PR图反应了分类器在不同阈值下识别正例的准确率和覆盖率之间的权衡。

在一些应用中,对查全率和查准率的重视程度有所不同。推荐系统中,更希望推荐商品是用户感兴趣的,此时查准率更重要;逃犯信息检索中,更希望少漏掉逃犯,查全率更重要,可以通过加权计算F1值来比较性能。

纵轴:查准率Precision=TP/(TP+FP),

横轴:查全率Recall=TP/(TP+FN)。

Precison,Recall的分子都是TP,分母一个是TP+FP,一个是TP+FN。两者的关系可以由PR图来表示

img

概念

偏差和方差

偏差和方差的定义如下:

  • 偏差(bias):偏差衡量了模型的预测值与实际值之间的偏离关系。例如某模型的准确度为96%,则说明是低偏差;反之,如果准确度只有70%,则说明是高偏差。

    偏差bias = training error

  • 方差(variance):方差描述的是训练数据在不同迭代阶段的训练模型中,预测值的变化波动情况(或称之为离散情况)。从数学角度看,可以理解为每个预测值与预测均值差的平方和的再求平均数。通常在模型训练中,初始阶段模型复杂度不高,为低方差;随着训练量加大,模型逐步拟合训练数据,复杂度开始变高,此时方差会逐渐变高。

    方差variance=training error - dev

也可以通过下面的图片直观理解偏差和方差:

img
  • 如左下角的“打靶图”,假设我们的目标是中心的红点,所有的预测值都偏离了目标位置,这就是偏差;

  • 在右上角的“打靶图”中,预测值围绕着红色中心周围,没有大的偏差,但是整体太分散了,不集中,这就是方差。

以上四种情况:

  • 低偏差,低方差:这是训练的理想模型,此时蓝色点集基本落在靶心范围内,且数据离散程度小,基本在靶心范围内;

  • 低偏差,高方差:这是深度学习面临的最大问题,过拟合了。也就是模型太贴合训练数据了,导致其泛化(或通用)能力差,若遇到测试集,则准确度下降的厉害;

  • 高偏差,低方差:这往往是训练的初始阶段;

  • 高偏差,高方差:这是训练最糟糕的情况,准确度差,数据的离散程度也差

模型误差 = 偏差 + 方差 + 不可避免的误差(噪音)。一般来说,随着模型复杂度的增加,方差会逐渐增大,偏差会逐渐减小,见下图:

[图片上传失败...(image-d63233-1586095778322)]

偏差方差产生的原因

一个模型有偏差,主要的原因可能是对问题本身的假设是不正确的,或者欠拟合。如:针对非线性的问题使用线性回归;或者采用的特征和问题完全没有关系,如用学生姓名预测考试成绩,就会导致高偏差。

方差表现为数据的一点点扰动就会较大地影响模型。即模型没有完全学习到问题的本质,而学习到很多噪音。通常原因可能是使用的模型太复杂,如:使用高阶多项式回归,也就是过拟合。

有一些算法天生就是高方差的算法,如kNN算法。非参数学习算法通常都是高方差,因为不对数据进行任何假设。

有一些算法天生就是高偏差算法,如线性回归。参数学习算法通常都是高偏差算法,因为对数据有迹象。

偏差方差平衡

偏差和方差通常是矛盾的。降低偏差,会提高方差;降低方差,会提高偏差。

这就需要在偏差和方差之间保持一个平衡。

以多项式回归模型为例,我们可以选择不同的多项式的次数,来观察多项式次数对模型偏差&方差的影响:

img
多项式次数 模型复杂度 方差 偏差 过/欠拟合
欠拟合
适度
过拟合

下面是多项式次数对训练误差/测试误差的影响:

img
多项式次数 模型复杂度 训练误差 测试误差

关于解决方差和偏差的问题中:

我们要知道偏差和方差是无法完全避免的,只能尽量减少其影响。

  1. 在避免偏差时,需尽量选择正确的模型,一个非线性问题而我们一直用线性模型去解决,那无论如何,高偏差是无法避免的。
  2. 有了正确的模型,我们还要慎重选择数据集的大小,通常数据集越大越好,但大到数据集已经对整体所有数据有了一定的代表性后,再多的数据已经不能提升模型了,反而会带来计算量的增加。而训练数据太小一定是不好的,这会带来过拟合,模型复杂度太高,方差很大,不同数据集训练出来的模型变化非常大。
  3. 最后,要选择合适的模型复杂度,复杂度高的模型通常对训练数据有很好的拟合能力。

其实在机器学习领域,主要的挑战来自方差。处理高方差的手段有:

  • 降低模型复杂度
  • 减少数据维度;降噪
  • 增加样本数
  • 使用验证集

总结

偏差衡量了模型的预测值与实际值之间的偏离关系,主要的原因可能是对问题本身的假设是不正确的,或者欠拟合。方差描述的是模型预测值的变化波动情况(或称之为离散情况),模型没有完全学习到问题的本质,通常原因可能是使用的模型太复杂,过拟合。

参数或者线性的算法一般是高偏差低方差;非参数或者非线性的算法一般是低偏差高方差。所以我们需要调整参数来去衡量方差和偏差的关系。

你可能感兴趣的:(如何评价模型好坏)