机器学习总结-模型评估与验证

篇首语

从Udacity的MLND开始,学机器学习差不多5个月了,期间各种迷茫无知所措,所幸一直坚持了下来。 Udacity的项目并不难,从P1到P4都有一个个问题帮助理解,很多步骤都帮你写好了,部署算法只需要调用sklearn,很少需要从公式推导角度理解算法,这样可以帮初学者入门但是对更深层次的算法认识不够。写这个系列文章初衷在于 一是可以回顾总结知识点,搭建整个机器学习框架;二是推导相应算法公式,更深层次理解算法。写作形式以问答为导向,知识点总结为基础。

下面是5个项目和对应的知识点

  • 模型评估与验证Model Evaluation and Validation
  • 监督学习Supervised Learning
  • 无监督学习Unsupervised Learning
  • 增强学习Reinforcement Learning
  • 深度学习Deep Learning

本篇大纲

本篇旨在回答以下问题:

  • 有哪些验证模型的metrics(准则?)
  • 这些Metric的优缺点和适用范围有哪些?
  • 什么是Bias(偏差)和Variance(方差)
  • 偏差和方差对误差Error的影响分别是什么?
  • 如何降低模型预测误差Error?
  • Learning Curve表示什么,它的作用是什么?
  • 为什么需要shuffle和split data?
  • 什么是grid search?如何实施?
  • 什么是Cross Validation?对grid search好处是什么?如何实施?

涉及到的知识点:

  • Evaluatioin Metrics
    • Metrics for Classification
    • Metrics for Regression
  • Managing Error And Complexity
    • Causes of Error
    • Learning Curve
    • Cross Validation and Grid Search

Evaluatioin Metrics

监督学习可分为两类,Classification分类和Regression回归问题,相对应有不同的模型评判标准

Classification分类:
  • Accuracy准确率
  • Precision精确率
  • Recall召回率
  • F1 score
Regression回归:
  • Mean Absolute Error平均绝对偏差
  • Mean Squared Error均方误差
  • R^2^ score
  • Explained Variance Score

分类问题Metric的优缺点和适用范围

首先说分类问题会出现的4种情况

  1)True positive (TP): 将正类预测为正类,真阳

  2)False positive (FP): 将负类预测为正类,伪阳

  3)False negative (FN):将正类预测为负类,伪阴

  4)True negative (TN): 将负类预测为负类,真f阴

这4种情况可用下图表示:

WikipediaContingency

即True或者False代表与真实数据符合情况,Positive和Negative代表预测情况

Accuracy准确率

定义

顾名思义,准确率的定义是对于给定的测试数据集,分类器正确分类的样本数与总样本数之比。即:

Accuracy Paradox

Accuracy优点很明显,那就是简单直观,但是accuracy有时会陷入Accuracy paradox中。即准确率越高并不代表模型越好。

假设某家保险公司需要一个风险评估模型。 这个模型需要检验每个案例是否可能有高风险,当有高风险时,公司会介入调查。现在有一个验证数据集包含10000个案例供检验风险评估模型。这个数据集中有9850个低风险案例(不需要介入调查)和150个高风险案例(需要介入调查)。

现在有两个模型,下面是模型1的检验结果:

Predicted Negative Predicted Positive
Negative Cases 9,700 150
Positive Cases 50 100

通过表格,模型1的的准确率为:

准确率达到了98%,看起来模型1还很不错。但是由于数据集中本来高风险的案例就很少,如果在模型2中我们将所有案例都预测为低风险,准确率可以达到98.5%,比模型1还要高:

Predicted Negative Predicted Positive
Negative Cases 9,850 0
Positive Cases 150 0

显然模型2并不能帮助保险公司减少保险欺诈的风险。

Precision精确率

定义

精确率计算的是所有”正确被检索的item”占所有”实际被检索到的”的比例. 即:

例子

在上面保险公司的例子中,模型1的精确率为

而模型2的精确率就为0了:

Recall 召回率

召回率计算的是所有”正确被检索的item”占所有”应该检索到的item”的比例。即:

在上面保险公司的例子中,模型1的召回率为

F1 score

F1 值是精确率和召回率的调和均值,定义为:

即:

适用场景

准确率和召回率是互相影响的,理想情况下肯定是做到两者都高,但是一般情况下准确率高、召回率就低,召回率低、准确率高,当然如果两者都低,那是什么地方出问题了。当精确率和召回率都高时,F1的值也会高。在两者都要求高的情况下,可以用F1来衡量。

instance-matching-30-728

下面是两个场景:

  1. 地震的预测
    对于地震的预测,我们希望的是RECALL非常高,也就是说每次地震我们都希望预测出来。这个时候我们可以牺牲PRECISION。情愿发出1000次警报,把10次地震都预测正确了;也不要预测100次对了8次漏了两次。
  2. 嫌疑人定罪
    基于不错怪一个好人的原则,对于嫌疑人的定罪我们希望是非常准确的。及时有时候放过了一些罪犯(recall低),但也是值得的。

除了以上几个值之外,还有ROC和AUC等评判指标,具体以后再做总结

回归问题Metric的优缺点和适用范围

Mean Absolute Error(MAE)

MAE用来描述预测值和真实值的差值。数值越小越好。

假设$y_i$是真实值,$f_i$ 是相对应的预测值,则$n$ 个样本的MAE可由下式出给:

Mean Squared Error(MSE)

Mean Squared Error也称为Mean Squared Deviation(MSD),计算的是预测值和实际值的平方误差。同样,数值越小越好。

假设$y_i$是真实值,$f_i$ 是相对应的预测值,则$n$ 个样本的MSE由下式公式给出:

MSE与Bias和Variance的关联
Explained Variance Score

假设$y$是真实值,$f$ 是相对应的预测值,$Var$是方差,Explained Variance由下式公式给出

值最大为1,越接近1越好。

注:点这里查看什么是“Variance Explained”

R^2 Score

R^2 Score又称为the coefficient of determination。判断的是预测模型和真实数据的拟合程度,最佳值为1,同时可为负值。

假设$y_i$是真实值,$f_i$ 是相对应的预测值,则$n$ 个样本的R^2^ score由下式公式给出:

其中$\overline{y}$ 是$y$ 的均值,即$\overline{y} = \frac{1}{n}\sum_{i=1}^{n} y_i$

Causes of Error

此处部分引用知乎上@Jason Gu和@优达学城(Udacity)的答案

Bias(偏差)和Variance(方差)

偏差Bias:描述的是预测值(估计值)的期望与真实值之间的偏离程度。偏差越大,越偏离真实数据,如下图第二行所示。

方差Variance:描述的是预测值的变化范围,离散程度,也就是离其期望值的距离。方差越大,数据的分布越分散,如下图右列所示。

bias

偏差和方差对误差Error的影响

首先模型的泛化误差可以表示为

Error = Bias + Variance + Noise

其中,Noise(噪声)是数据本身的问题,比如不准确的客户资料,在此不进行讨论。

偏差(bias)造成的误差 - 准确率和欠拟合

如果模型具有足够的数据,但因不够复杂而无法捕捉基本关系,即如果模型不适当,则会出现偏差。这样一来,模型一直会系统地错误表示数据,从而导致预测准确率降低。出现欠拟合(underfitting)。

方差(variance)造成的误差 - 精准度和过拟合

方差就是指模型过于贴近训练数据,以至于没办法把它的结果泛化(generalize)。而泛化是正事机器学习要解决的问题,如果一个模型只能对一组特定的数据有效,换了数据就无效了,我们就说这个模型过拟合。

用一张图表示为

biasvariance

维度灾难Curse of Dimensionality

当维数提高时,模型空间的体积提高太快,因而可用数据变得很稀疏。在高维空间中,所有的数据都很稀疏,从很多角度看都不相似,因而平常使用的数据组织策略变得极其低效。为了获得在统计学上正确并且有可靠的结果,用来支撑这一结果所需要的数据量通常随着维数的提高而呈指数级增长。

dimensionality-800

注:这里有篇很好的文章完整解释了维度灾难

如何避免维度灾难

实际上并没有一种固定的方法避免维度灾难,解决方法需要结合数据集和所选的模型。训练数据集越小,则用到的特征(feature)应当越少。

另外,对于诸如神经网络,kNN,决策树等泛化不好容易过拟合的分类器,维度应当适当的减少。而对于朴素贝叶斯和线性分类器等不太复杂的分类器,特征可以适当的增大。

dimensionality_vs_performance

学习曲线Learning Curve

Learning Curve就是预测模型在训练集和测试集表现的可视化曲线。

用scikit-learn的一个例子来解释:

learningcurve

很明显图右上角的模型效果最好,训练集和测试集都有很好的分数,并且收敛在一起。而右下的模型过拟合了。

K折-交叉验证 K-fold Cross Validation

初始采样分割成K个子样本,一个单独的子样本被保留作为验证模型的数据,其他K-1个样本用来训练。交叉验证重复K次,每个子样本验证一次,平均K次的结果或者使用其它结合方式,最终得到一个单一估测。这个方法的优势在于,同时重复运用随机产生的子样本进行训练和验证,每次的结果验证一次。方差Variance随着k的增大而减小。

cvalidation

预测模型有很多Hyper-parameters,如何知道超参数的哪些组合可以达到更好的效果呢?scikit learn提供了网格搜索的算法。只需要设定需要调整的参数和参数的范围,算法会自动验证每一种参数组合的验证效果。

grid search

对SVM的C参数和gamma的网格搜索可视化结果如上图所示,可知{C=1.0,gamma = 0.1}时效果最好。

References:

  1. 李航 《统计学习方法》
  2. 周志华 《机器学习》
  3. 准确率(Accuracy), 精确率(Precision), 召回率(Recall)和F1-Measure
  4. Accuracy paradox
  5. 精确率、召回率、F1 值、ROC、AUC 各自的优缺点是什么?
  6. Mean absolute error
  7. Two visualizations for explaining “variance explained”
  8. 偏差和方差有什么区别?
  9. Understanding the Bias-Variance Tradeoff
  10. 机器学习中的Bias(偏差),Error(误差),和Variance(方差)有什么区别和联系?
  11. 维数灾难
  12. The Curse of Dimensionality in classification
  13. 交叉驗證