1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 机器学习模型常用评估方法和指标

机器学习模型常用评估方法和指标

时间:2019-05-02 18:18:14

相关推荐

机器学习模型常用评估方法和指标

文章目录

1. 学习曲线1).低偏差、低方差(恰当拟合)的学习曲线:2).高偏差(欠拟合)的学习曲线:3).高方差(过拟合)的学习曲线:2.评价指标1). 混淆矩阵(Confusion Matrix)2). 准确率(Accuracy,ACC)3). 精确率(Positive Predictive Value,PPV)和召回率(True Positive Rate,TPR)4). F1分数5). PR曲线(Precision-Recall曲线)6). ROC曲线(Receiver Operating Characteristic)7). PR曲线和ROC曲线的比较和选择

1. 学习曲线

学习曲线是一种用来检测机器学习算法运行是否正常,或者改进算法模型的有效工具。它以横轴表示训练集的样本数量,纵轴表示误差(代价函数的大小,越大预测准确率越低),在同一个坐标图上,分别绘制出训练集的代价函数随样本数递增的波动曲线和交叉验证集的代价函数随样本数递增的变化曲线。

1).低偏差、低方差(恰当拟合)的学习曲线:

特点:

随着训练样本数的增加,训练集误差曲线缓慢上升,验证集误差曲线缓慢下降。最终它们逐渐趋于水平,且保持一个较近的间隔。

2).高偏差(欠拟合)的学习曲线:

特点:

随着训练样本数的增加,训练集误差曲线迅速上升(因为模型对数据样本的拟合能力很差),验证集误差曲线迅速下降。然后它们迅速水平(因为拟合能力太差,只需很少的样本就已经达到拟合极限,之后基本不再变化),且它们水平后的位置对应的误差值极大。对于这类高偏差的欠拟合模型,继续扩增样本数量无法改善模型的预测能力。

3).高方差(过拟合)的学习曲线:

特点:

随着训练样本数的增加,训练集误差曲线极为缓慢地上升(因为拟合能力“过强”,所以始终能以极小的误差来拟合样本数据),验证集误差曲线极为缓慢地下降(因为过度拟合导致预测新数据能力始终很差),且它们之间长期保持很大的间隔。对这类高方差的过拟合模型,继续扩增样本量能够改善模型的预测能力,且当样本量非常非常大时,两条误差曲线的间隔会收敛为一个较小的正常值,此时模型能够达到恰当拟合状态。

sklearn实现

from sklearn.model_selection import learning_curvetrain_sizes, train_scores, validation_scores = learning_curve(estimator, # 用到的机器学习模型x_train, # 样本的自变量集y_train, # 样本的因变量集cv, # 交叉验证折叠数train_sizes # 训练样本数量的递增比例情况,默认为np.linspace(0.1,1,5))

2.评价指标

在机器学习分类问题中,如果样本数据类别不平衡,会影响模型的识别精度并且降低许多性能指标的表现,因此通常需要考虑多个度量标准,从不同的角度来全面地评估分类器的性能表现。

1). 混淆矩阵(Confusion Matrix)

混淆矩阵(Confusion Matrix)是用来构建各个不同评价指标的最基础的概念

TP(True Positives):预测为正、实际为正的样本数

FN(False Negatives):预测为负、实际为正的样本数

FP(False Positives):预测为正、实际为负的样本数

TN(True Negatives):预测为负、实际为负的样本数

根据混淆矩阵可以推导出以下评价指标:

2). 准确率(Accuracy,ACC)

准确率表示预测正确的结果数占总样本数的比率,是最常用的评价指标,但在样本不均衡的情况下评价效果不好。

ACC=TP+TNP+N=TP+TNTP+TN+FP+FNA C C=\frac{T P+T N}{P+N}=\frac{T P+T N}{T P+T N+F P+F N} ACC=P+NTP+TN​=TP+TN+FP+FNTP+TN​

scikit-learn 实现如下:

from sklearn.metrics import accuracy_scoreaccuracy = accuracy_score(y_true, y_pred)

3). 精确率(Positive Predictive Value,PPV)和召回率(True Positive Rate,TPR)

精确率(查准率)表示表示预测为正的样本中实际也为正的比率;召回率(查全率)表示实际为正的样本中预测也为正的比率。

Precision=PPV=TPTP+FP\text { Precision }=P P V=\frac{T P}{T P+F P} Precision=PPV=TP+FPTP​

Recall=TPR=TPP=TPTP+FN\text { Recall }=T P R=\frac{T P}{P}=\frac{T P}{T P+F N} Recall=TPR=PTP​=TP+FNTP​

精确率高则说明查的准,误检率低;召回率高则说明查的全,漏检率低。比如在检索系统中,精确率就是使用浏览器搜索关键字时,检索出来的条目有多少是准确的、是用户需要的,召回率则是所有准确的条目中有多少被成功的检索出来了。总之,召回率是尽可能的把正样本都查找出来;而精确率尽可能地保证预测的正确率。通常,这是一对相互矛盾的指标,比如当模型想要提升召回率这个指标时,就会倾向于将结果预测为正样本,然而这将会导致不少的负样本被误判为正样本,从而导致精确率降低,反之亦然。因此通常在不同的业务需求环境之下,会采取不同的侧重。

scikit-learn 实现如下:

from sklearn.metrics import accuracy_scoreaccuracy = accuracy_score(y_true=y_test, y_pred=y_pred)from sklearn.metrics import recall_scorerecall = recall_score(y_true=y_test, y_pred=y_pred)

4). F1分数

F1 分数是召回率和精准率的调和平均值

F1=21Recall+1Precision=2Recall×PrecisionRecall+PrecisionF_{1}=\frac{2}{\frac{1}{\text { Recall }}+\frac{1}{\text { Precision }}}=2 \frac{\text { Recall } \times \text { Precision }}{\text { Recall }+\text { Precision }} F1​=Recall1​+Precision1​2​=2Recall+PrecisionRecall×Precision​

scikit-learn 实现如下:

from sklearn.metrics import f1_scoref1 = f1_score(y_true=y_test, y_pred=y_pred)

5). PR曲线(Precision-Recall曲线)

P-R曲线是通过将分类阈值从高到低逐渐调整,产生的精确率和召回率的值对应的点描绘而成的曲线,其横轴是召回率,纵轴是精确率。P-R曲线上一个点的含义是,在该阈值之下的分类模型对应的召回率和精确率。

P-R 曲线越靠近右上方说明该模型预测性能越好。在对不同模型进行比较时,若一个模型的PR曲线被另一个模型的PR曲线完全包住则说明后者的性能优于前者,若模型的PR曲线发生了交叉,则无法直接判断哪个模型更好,此时常用平衡点进行比较,它是查准率=查全率时的取值。

6). ROC曲线(Receiver Operating Characteristic)

ROC曲线,即受试者工作特性曲线,其来源于医学领域,起源于军事领域。ROC曲线的纵轴为真阳性率(TPR),表示实际为正的样本中预测为正的比率;横轴为假阳性率(FPR),表示实际为负的样本中预测为正的比率。跟P-R曲线相似,ROC曲线也是通过不断调整分类阈值来逐步产生不同的点,最后再将这些点连接起来形成ROC曲线。

FPR=FPTN+FPF P R=\frac{F P}{T N+F P} FPR=TN+FPFP​

TPR=TPTP+FNT P R=\frac{T P}{T P+F N} TPR=TP+FNTP​

通常,ROC曲线越靠近左上角,说明模型预测性能越好。如果两个模型的ROC曲线交叉,难以直观得出结论,这时可以通过计算ROC曲线下方的面积(AUC)来比较模型优劣。

7). PR曲线和ROC曲线的比较和选择

两者之间最显著的一个差异是,ROC曲线对于样本类别不平衡有着很强的鲁棒性,如下图,当正负样本的分布变化的时候,ROC曲线能够保持不变,而PR曲线则会发生剧烈变化。

这一特性使得ROC曲线下面积AUC的值能保持稳定,AUC 值的意义相当于一个概率值,表示随机挑选一个正样本以及一个负样本,当前的分类算法根据计算得到的Score值将这个正样本排在负样本前面的概率。因此,AUC值实际上反映了模型的 rank 能力,AUC值越大,当前的分类算法越有可能将正样本排在负样本前面。因此ROC曲线在某些场景下很适用,如 CTR 点击通过率排序,实际上便是在考验模型的排序能力。除此之外,CTR 中存在着样本不均衡的问题,正负样本比例通常会大于 1:100,如果采用 PR 曲线,则会导致 AUC 发生剧变,无法较好反映模型效果。

然而在有些场景下,比如信用卡欺诈检测,我们会更关注 precision 和 recall,比如说如果要求预测出为欺诈的人尽可能准确,那么就是要提高 precision;而如果要尽可能多地预测出潜在的欺诈人群,那么就是要提高 recall。一般来说,提高二分类的阈值就能提高precision,降低阈值就能提高 recall,这时便可观察 PR 曲线,得到最优的阈值。

总结

ROC曲线兼顾正样本与负样本,所以适用于评估分类器的整体性能(通常是计算AUC,表示模型的rank性能),相比而言PR曲线主要聚焦于正样本。如果有多份数据且存在不同的类别分布。比如信用卡欺诈问题中每个月正例和负例的比例可能都不相同,这时候如果只想单纯地比较分类器的性能且剔除类别分布改变的影响,则ROC曲线比较适合,因为类别分布改变可能使得PR曲线发生变化时好时坏,这种时候难以进行模型比较;反之,如果想测试不同类别分布下对分类器的性能的影响,则PR曲线比较适合。如果想要评估在相同的类别分布下正例的预测情况,则宜选PR曲线。类别不平衡问题中,ROC曲线通常会给出一个乐观的效果估计,所以大部分时候还是PR曲线更好。最后可以根据具体的应用,在曲线上找到最优的点,得到相对应的precision,recall,f1 score等指标,去调整模型的阈值,从而得到一个符合具体应用场景的模型。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。