2018-07-21 09:45:36 tox33 阅读数 2151
  • 统计机器学习入门——线性回归

    "统计机器学习入门——老司机带你读经典"系列课程使用经典的ISLR(An Introduction to Statistical Learning with Applications in R)为教材,结合具体案例,介绍统计学习的基本概念和常用算法。

    7593 人正在学习 去看看 CSDN讲师

机器学习模型评价指标总结

1. 混淆矩阵(Confusion Matrix

(以下先考虑二分类问题)

其中:  TP(实际为正预测为正),FP(实际为负但预测为正)

TN(实际为负预测为负),FN(实际为正但预测为负)

2. 基于混淆矩阵的相关评价指标

  A.召回率:Recall = TP / (TP+FN)  

(又称查全率,反映预测对的正例数占真正的正例数的比率)

  B.准确率:Accuracy = (TP+TN) / (TP+FP+TN+FN) 

(反映分类器对整个样本的判定能力,能将正的判定为正,负的判定为负)

  C.查准率:Precision=TP / (TP+FP)

      指所得数值与真实值之间的精确程度;预测正确的正例数占预测为正例总量的比率)

  D. F: F1-score = (2Recall*Precision) / (Recall + Precision)

      F-scorePrecisionRecall加权调和平均数,F1-scoreF值一般公式中β=1的情况(即PrecisionRecall同等重要,若β>1则Recall有更大影响)很多信息检索系统、分类、推荐系统的评测指标就是用F值

3. ROC图、PR图以及AUC

1 ROC图

  在混淆矩阵中,真正率 TPR = TP / (TP+FN),假正率  FPR = FP / (FP + TN)

其中TPR也即灵敏度(sensitivity),FPR也即(1-特异度)(specificity)。以纵坐标为TPR,横坐标为FPR,ROC 曲线实际就是不同阈值下TPRFPR的轨迹。每一个预测结果在ROC空间中以一个点代表

阈值:阈值就是一个分界线,用于判定正负例的,在模型预测后我们会给每条预测数据进行打分(0<score<1)。如:指定阈值为0.6,那么评分低于0.6的会被判定为负例(不好的),评分高于0.6的即会判定为正例(好的),随着阈值的减小,判定为正例的样本相应地就会增加。

最好的预测方式是一个在左上角的点,在ROC空间坐标轴(0,1)点,这个代表着100%灵敏(没有假阴性)和100%特异(没有假阳性)。而(0,1)点被称为“完美分类器”。一个完全随机的预测会得到一条从左下到右上对角线(也叫无识别率线)上的一个点,这条线上的任一点对应的准确率(Accuracy)都是50%。

                                                                                    ROC图

     离散分类器,如决策树,产生的是离散的数值或者一个二元标签。应用到实例中,这样的分类器最后只会在ROC空间产生单一的点。而一些其他的分类器,如朴素贝叶斯分类器,逻辑回归或者人工神经网络,产生的是实例属于某一类的可能性,对于这些方法,一个阈值就决定了ROC空间中点的位置。举例来说,如果可能值低于或者等于0.8这个阈值就将其认为是阳性的类,而其他的值被认为是阴性类。这样就可以通过画每一个阈值的ROC点来生成一个生成一条曲线。

2 PR图

P-R曲线的P就是查准率(Precision),R就是查全率(Recall)。用P作为横坐标,R作为纵坐标,就可以画出P-R曲线。

对于分类器,通过调整分类阈值,可以得到不同的P-R值,从而可以得到一条曲线(纵坐标为P,横坐标为R)。通常随着分类阈值从大到小变化(大于阈值认为P),Precision减小,Recall增加。比较两个分类器好坏时,显然是查得又准又全的比较好,也就是的PR曲线越往坐标(1,1)的位置靠近越好。 

  

                                                                                                  PR图

3 AUC

AUCArea Under the ROC Curve)指标在模型评估阶段常被用作最重要的评估指标来衡量模型的准确性。AUC作为模型评价指标,用于二分类模型的评价。 

AUC值是一个概率值,当你随机挑选一个正样本以及负样本,当前的分类算法根据计算得到的Score值将这个正样本排在负样本前面的概率就是AUC值,AUC值越大,当前分类算法越有可能将正样本排在负样本前面,从而能够更好地分类。
  为什么要用AUC作为二分类模型的评价指标呢?为什么不直接通过计算准确率来对模型进行评价呢?答案是这样的:机器学习中的很多模型对于分类问题的预测结果大多是概率,即属于某个类别的概率,如果计算准确率的话,就要把概率转化为类别,这就需要设定一个阈值,概率大于某个阈值的属于一类,概率小于某个阈值的属于另一类,而阈值的设定直接影响了准确率的计算。

ROC曲线与X坐标轴所围成的面积即为ROC-AUC值AUC值越接近1模型的效果越好。横坐标为其中随机分类的模型AUC0.5,所以模型的AUC基线值大于0.5才有意义。模型的ROC曲线越远离对角线,说明模型效果越好。随着阈值的减小,Sensitivity TPR)和1-Specificity FPR)也相应增加,所以ROC曲线呈递增态势。而PR曲线X坐标轴所围成的面积即为PR-AUC值。

4 ROCPR的关系

ROC对应的指标是: a. TPR 正样本预测准确率(就是查全率Recall),评价的是模型在正样本集合上的表现。 b. FPR,负样本预测错误率。评价的是模型在负样本集合上的表现。

PRC对应的指标是: a. 查全率Recall(同ROC的TPR) b. 准确率P,所有预测样本的准确率(包括正样本和负样本)。最关键的就是这个,其他两个都是单独评价正样本集合或者负样本集合的。只有它是综合评价整体结果。所以,哪种类型(正或者负)样本多,权重就大。也就是通常说的对样本不均衡敏感

ROC曲线是FPR和TPR的点连成的线,PR曲线是查准率和查全率的点连成的线。又Recall=TPR,因此PR的横坐标为ROC的纵坐标。TPR、Recall的分母为样本中正样本的个数,FPR的分母为样本中负样本的个数,样本一旦确定分母即为定值。但是Precision的分母为预测为正样本的个数,会随着阈值的变化而变化,因此Precision的变化受TP和FP的综合影响,不单调,变化情况不可预测。

因此,相对来讲ROC曲线会更稳定,在正负样本量都足够的情况下,ROC曲线足够反映模型的判断能力。正负样本分布得极不均匀(highly skewed datasets)的情况下(正样本极少),PRC比ROC能更有效地反映分类器对于整体分类情况的好坏。总之,只画一个曲线时,如果没有data imbalance,倾向于用ROC(更简洁,更好理解)。如果数据样本不均衡,分两种情况:情况1:如正样本远小于负样本,PRC更敏感,因为用到了precision=(TP/(TP+FP))。情况2:正样本远大于负样本,PRC和ROC差别不大,都不敏感。

对于同一模型,PRC和ROC曲线都可以说明一定的问题,而且二者有一定的相关性,如果想评测模型效果,也可以把两条曲线都画出来综合评价。

4. Lift提升图、Gain增益图与K-S图

  1 Lift提升图

   Lift =[TP/(TP+FP)] / [(TP+FN)/(TP+FP+FN+TN)] = Precision / Accuracy,它衡量的是,与不利用模型相比,模型的预测能力“变好”了多少,lift(提升指数)越大,模型的运行效果越好。Lift图分累积的和非累积的。

不利用模型,我们只能利用“正例的比例是(TP+FN)/(TP+FP+FN+TN)”这个样本信息来估计正例的比例(baseline model),而利用模型之后,我们不需要从整个样本中来挑选正例,只需要从我们预测为正例的那个样本的子集TP+FP中挑选正例,这时预测的准确率 (Precision)为TP/(TP+FP)。

2 Gain增益图

Gini系数也可用于评价模型,Gains(增益) 与 Lift(提升)类似:Lift 曲线是不同阈值下Lift(Precision / Accuracy)和Depth的轨迹,Gain曲线则是不同阈值下Precision和Depth的轨迹,而Precision = TP/TP+FP,所以它们显而易见的区别就在于纵轴刻度的不同。(注:横轴Depth也就是:将样本的预测为1的概率从大到小排序后,取前百分之几。)

Gain增益图是描述整体精准率的指标。按照模型预测出的概率从高到低排列,将每一个百分位数内的精准率指标标注在图形区域内,就形成了非累积的增益图。如果对每一个百分位及其之前的精准率求和,并将值标注在图形区域内,则形成累积的增益图。累积图通常能够更好的表现模型性能,而非累积图则更有利于指出模型中可能存在问题的地方。

3 K-S图

在评价模型时还会用到KSKolmogorov-Smirnov值,KS=max(TPR-FPR),即为TPRFPR的差的最大值,KS值可以反映模型的最优区分效果,此时所取的阈值一般作为定义好坏用户的最优阈值。一般,KS>0.2即可认为模型有比较好的预测准确性。

  K-S曲线的最高点(最大值)为KS值,KS值越大,模型分值的区分度越好,KS值为0代表是最没有区分度的随机模型。准确的来说,K-S是用来度量正样本与负样本区分程度的KS值所代表的仅仅是模型的分隔能力,并不代表分隔的样本是准确的。换句话说,正负样本完全分错,但KS值可以依旧很高。

                                                                                                    K-S图

ROC曲线和lift曲线、Gain曲线、KS图都能够评价模型的效果,lift曲线/Gain曲线评价模型的有效性,其为总体一部分上的模型性能,而混淆矩阵评估的是整个总体上的模型性能。

  类似信用评分的场景,希望能够尽可能完全地识别出有违约风险的客户,选择ROC曲线及相应的AUC或者KS值作为指标;而类似数据库精确营销的场景,希望能够通过对全体消费者的分类而得到具有较高响应率的客户群从而提高投入产出比,选择lift曲线/Gain曲线作为指标。

上面四种曲线以预测客户是否违约的案例比较如下:

5. 回归模型的评价指标

回归模型常见应用:市场趋势报告、气温预测、投资风险分析

1MAE(Mean Absolute Error)平均绝对差值

http://upload.wikimedia.org/math/8/9/f/89f3f847beb7a4c84e31f73a8457c575.png

(2)MSE(Mean Square Error)均方误差,是回归任务最常用的性能度量

https://cn-discussions.s3.cn-north-1.amazonaws.com.cn/original/3X/7/6/7620bbc1b40385260f9abc09e313d8ec97a3fef5.png

(3)log对数损失函数(逻辑回归)

(4)RMSE(Root Mean Square error)均方根误差

http://upload.wikimedia.org/math/a/4/7/a47161af0a89ce6059aafd43c524839d.png

(5)Normalized root-mean-square deviation归一化均方差跟偏差

http://upload.wikimedia.org/math/e/a/5/ea585ff954c73cc34084e4cee2693a4d.png

(6)  R2决定系数

https://cn-discussions.s3.cn-north-1.amazonaws.com.cn/original/3X/7/4/74b336e71ae92d9aba5f501cced3c94e5a5d05b8.png

        R2 是多元回归中的回归平方和占总平方和的比例,它是度量多元回归方程中拟合程度的一个统计量,反映了在因变量y的变差中被估计的回归方程所解释的比例。 
      R2 越接近1,表明回归平方和占总平方和的比例越大,回归线与各观测点越接近,用x的变化来解释y值变差的部分就越多,回归的拟合程度就越好

(7) Pearson's Correlation Coefficient(皮尔逊相关系数)

皮尔逊相关也称为积差相关(或积矩相关),假设有两个变量X、Y,那么两变量间的皮尔逊相关系数可通过以下公式计算:

http://hi.csdn.net/attachment/201007/11/19961_12788382715I69.gif

注意当两个变量的标准差都不为零时,相关系数才有定义,皮尔逊相关系数适用于:

  •  两个变量之间是线性关系,都是连续数据。
  •  两个变量的总体是正态分布,或接近正态的单峰分布。

③ 两个变量的观测值是成对的,每对观测值之间相互独立。

(8) concordance correlation coefficient(一致性相关系数)

http://upload.wikimedia.org/math/3/8/2/3821418186fc25126037ad31a3866286.png

2019-10-30 10:34:01 nihaomabmt 阅读数 12
  • 统计机器学习入门——线性回归

    "统计机器学习入门——老司机带你读经典"系列课程使用经典的ISLR(An Introduction to Statistical Learning with Applications in R)为教材,结合具体案例,介绍统计学习的基本概念和常用算法。

    7593 人正在学习 去看看 CSDN讲师

目录

一、回归

1.均方误差MSE

2.均方根误差(RMSE)

3.平均绝对误差MAE

4.确定性系数R2

二、聚类

1.ARI

2.轮廓系数

三、总结


上一篇机器学习入门研究(三)-评价指标-自我感觉总结的还不错的介绍了关于分类模型中的评价指标,这篇主要介绍回归和聚类模型中的评价指标。

一、回归

1.均方误差MSE

Mean Squared Error,也称为L2损失,表示预测值(通过模型计算得到的值)和实际值在y轴上的距离差的平方的平均值。

其中f(x)为该回归模型。

这个是线性回归中常用的损失函数。该值越小,说明该线性模型越好,具有更好的精确度。更能体现的是数据的变化程度。

对应的Python中的函数为

sklearn.metrics.mean_squared_error(y_true, y_pred, sample_weight=None, multioutput=’uniform_average’)

对应的参数如下:

参数 含义
y_true 实际样本数据
y_pred 预测样本数据
sample_weight 样本权重,n为矩阵,n为样本类别
multioutput

多维输出,默认为uniform_average,表示计算所有元素的均方误差,返回一个单独的数值;

raw_values:计算对应列的均方误差,此时对应的y_true和y_pred都是多维数组。返回的是一个与列数相等的一维数组;

[x,y..]也可以是一个对应列数的一维数组,raw_values返回对应列的均方误差与该一维数组对应位置的乘积之和,也就是raw_values返回的一维数组的每个元素的比例关系,返回的是一个单独的数值

2.均方根误差(RMSE)

Root Mean Squared Error,又称为标准误差,表示的是均方误差的算术平方根。此时该误差值和样本数据是一个数量级,可以更好的藐视数据。

该值说明样本的离散程度,在非线性拟合中,该值越小越好。

在Python中没有特别的函数,通常采用下面方式获得

np.sqrt(mean_squared_error(y_true,y_pred))

3.平均绝对误差MAE

Mean Absolute Error,也称为F1损失。表示的是预测值(通过模型计算得到的)和实际值在y轴上的距离的绝对误差的平均值。能够更好的反映预测误差的实际情况。

对应的Python函数为: 

sklearn.metrics.mean_absolute_error(y_true, y_pred, sample_weight=None, multioutput=’uniform_average’)

参数同mean_squared_error

4.确定性系数R2

Coefficient of Determination。

在该公式中,分子就是预测值和实际值的误差的平方之和,而分母就是实际值的平均值与实际值的误差的平方之和。R2取值介于0~1之间,越接近1,说明该模型的效果越好。

对应的Python函数为: 

sklearn.metrics.r2_score(y_true, y_pred, sample_weight=None, multioutput=’uniform_average’)

参数同mean_squared_error 

二、聚类

聚类就是将样本集划分为若干互不相关的子集,即样本簇。聚类的最终目标就是聚类结果的簇内相似度高且簇外相似度低。所以对于聚类的评价指标就分为两大类:一类就是将聚类结果与有标签的样本进行比较,称为外部指标,另一类就是直接考察聚类结果而不利用任何参考模型,称为内部指标。

因为聚类的有些内容现在还有些不太理解,所以简单的先列下大体概念,等着熟悉了之后在回来更新这里的内容。

1.ARI

Adjusted Rand Index,调整兰德指数。用来评价样本数据本身带有正确的类别信息,即外部指标。

对应的Python函数为:

sklearn.metrics.adjusted_rand_score

2.轮廓系数

Silhouette Cofficient,适用于实际样本未知的情况,也就是样本数据中没有所有类别,即内部指标。

取值范围为[-1,1],同类别样本距离相近且不同类别的距离越远,分数越高。

对应的Python函数为:

sklearn.metrics.silhouette_score

三、总结

以后在后面的学习中再看看怎么去选择合适的衡量指标,也就是这些在实际评估模型中怎么发挥作用。

2018-08-11 19:19:33 SrdLaplace 阅读数 545
  • 统计机器学习入门——线性回归

    "统计机器学习入门——老司机带你读经典"系列课程使用经典的ISLR(An Introduction to Statistical Learning with Applications in R)为教材,结合具体案例,介绍统计学习的基本概念和常用算法。

    7593 人正在学习 去看看 CSDN讲师
2019-12-30 17:26:36 Jiiaaaoooo 阅读数 16
  • 统计机器学习入门——线性回归

    "统计机器学习入门——老司机带你读经典"系列课程使用经典的ISLR(An Introduction to Statistical Learning with Applications in R)为教材,结合具体案例,介绍统计学习的基本概念和常用算法。

    7593 人正在学习 去看看 CSDN讲师

https://www.laugh12321.cn/2019/01/02/evaluation_index_with_Linear_Regression/

2018-11-25 20:52:28 weixin_41108334 阅读数 4365
  • 统计机器学习入门——线性回归

    "统计机器学习入门——老司机带你读经典"系列课程使用经典的ISLR(An Introduction to Statistical Learning with Applications in R)为教材,结合具体案例,介绍统计学习的基本概念和常用算法。

    7593 人正在学习 去看看 CSDN讲师

参考:链接:https://www.jianshu.com/p/4dde15a56d44

https://blog.csdn.net/heyongluoyao8/article/details/49408319

评价指标(Evaluation metrics)

  评价指标是机器学习任务中非常重要的一环。不同的机器学习任务有着不同的评价指标,同时同一种机器学习任务也有着不同的评价指标,每个指标的着重点不一样。如分类(classification)、回归(regression)、排序(ranking)、聚类(clustering)、热门主题模型(topic modeling)、推荐(recommendation)等。并且很多指标可以对多种不同的机器学习模型进行评价,如精确率-召回率(precision-recall),可以用在分类、推荐、排序等中。像分类、回归、排序都是监督式机器学习,本文的重点便是监督式机器学习的一些评价指标

一、从二分类评估指标说起

1.1 混淆矩阵confusion_matrix

我们首先来看一下混淆矩阵,对于二分类问题,真实的样本标签有两类,我们学习器预测的类别有两类,那么根据二者的类别组合可以划分为四组,如下表所示:

上表即为混淆矩阵,其中,行表示预测的label值,列表示真实label值。TP,FP,FN,TN分别表示如下意思:

TP(true positive):表示样本的真实类别为正,最后预测得到的结果也为正;
FP(false positive):表示样本的真实类别为负,最后预测得到的结果却为正;
FN(false negative):表示样本的真实类别为正,最后预测得到的结果却为负;
TN(true negative):表示样本的真实类别为负,最后预测得到的结果也为负.

 

可以看到,TP和TN是我们预测准确的样本,而FP和FN为我们预测错误的样本。

sklearn.metrics.confusion_matrix(y_true, y_pred, labels=None, sample_weight=None)

coding :

y_true: 是样本真实分类结果,y_pred: 是样本预测分类结果 
labels:是所给出的类别,通过这个可对类别进行选择 
sample_weight : 样本权重

1.2 准确率Accruacy

准确率表示的是分类正确的样本数占样本总数的比例,假设我们预测了10条样本,有8条的预测正确,那么准确率即为80%。

用混淆矩阵计算的话,准确率可以表示为:

虽然准确率可以在一定程度上评价我们的分类器的性能,不过对于二分类问题或者说CTR预估问题,样本是极其不平衡的。对于大数据集来说,标签为1的正样本数据往往不足10%,那么如果分类器将所有样本判别为负样本,那么仍然可以达到90%以上的分类准确率,但这个分类器的性能显然是非常差的

1.3 平均准确率(Average Per-class Accuracy)

  为了应对每个类别下样本的个数不一样的情况,对准确率进行变种,计算每个类别下的准确率,然后再计算它们的平均值。举例,类别0的准确率为80%,类别1下的准确率为97.5%,那么平均准确率为(80%+97.5%)/2=88.75%。因为每个类别下类别的样本个数不一样,即计算每个类别的准确率时,分母不一样,则平均准确率不等于准确率,如果每个类别下的样本个数一样,则平均准确率与准确率相等。 
  平均准确率也有自己的缺点,比如,如果存在某个类别,类别的样本个数很少,那么使用测试集进行测试时(如k-fold cross validation),可能造成该类别准确率的方差过大,意味着该类别的准确率可靠性不强。

1.4 精确率Precision和召回率Recall

为了衡量分类器对正样本的预测能力,我们引入了精确率Precision和召回率Recall

精确率表示预测结果中,预测为正样本的样本中,正确预测为正样本的概率;
召回率表示在原始样本的正样本中,最后被正确预测为正样本的概率;

二者用混淆矩阵计算如下:

精确率和召回率往往是一对矛盾的指标。在CTR预估问题中,预测结果往往表示会被点击的概率。如果我们对所有的预测结果进行降序排序,排在前面的是学习器认为最可能被点击的样本,排在后面的是学习期认为最不可能被点击的样本。

如果我们设定一个阈值,在这个阈值之上的学习器认为是正样本,阈值之下的学习器认为是负样本。可以想象到的是,当阈值很高时,预测为正样本的是分类器最有把握的一批样本,此时精确率往往很高,但是召回率一般较低。相反,当阈值很低时,分类器把很多拿不准的样本都预测为了正样本,此时召回率很高,但是精确率却往往偏低。

1.5 F-1 Score

为了折中精确率和召回率的结果,我们又引入了F-1 Score,计算公式如下:

对于F1 Score有很多的变化形式,感兴趣的话大家可以参考一下周志华老师的西瓜书,我们这里就不再介绍了。

1.6 ROC与AUC (只能用于二分类)

AUC:Area under the Curve 曲线(ROC)下的面积

ROC:Receiver Operating Characteristic

1)AUC的全称是Area under the Curve,即曲线下的面积,这条曲线便是ROC曲线,全称为the Receiver Operating Characteristic曲线,它最开始使用是上世纪50年代的电信号分析中,在1978年的“Basic Principles of ROC Analysis ”开始流行起来。ROC曲线描述分类器的True Positive Rate(TPR,分类器分类正确的正样本个数占总正样本个数的比例)与False Positive Rate(FPR,分类器分类错误的负样本个数占总负样本个数的比例)之间的变化关系。如下图所示: 
![Alt text](./屏幕快照 2015-09-27 下午12.42.54.png) 
如上图,ROC曲线描述FPR不断变化时,TPR的值,即FPR与TPR之间的关系曲线。显而易见,最好的分类器便是FPR=0%,TPR=100%,但是一般在实践中一个分类器很难会有这么好的效果,即一般TPR不等于1,FPR不等于0的。当使用ROC曲线对分类器进行评价时,如果对多个分类器进行比较时,如果直接使用ROC曲线很难去比较,只能通过将ROC分别画出来,然后进行肉眼比较,那么这种方法是非常不便的,因此我们需要一种定量的指标去比较,这个指标便是AUC了,即ROC曲线下的面积,面积越大,分类器的效果越好,AUC的值介于0.5到1.0之间。 
  具体如何描绘ROC曲线,如在二分类中,我们需要设定一个阈值,大于阈值分类正类,否则分为负类。因此,我们可以变化阈值,根据不同的阈值进行分类,根据分类结果计算得到ROC空间中的一些点,连接这些点就形成ROC曲线。ROC曲线会经过(0,0)与(1,1)这两点,实际上这两点的连线形成的ROC代表一个随机分类器,一般情况下分类器的ROC曲线会在这条对角连线上方。 
  在ROC曲线中,点(0,0)表示TPR=0,FPR=0,即分类器将每个实例都预测为负类;点(1,1)表示TPR=1,FPR=1,即分类器将每个实例都预测为正类;点(0,0)表示TPR=1,FPR=0,即分类器将每个正类实例都预测为正类,将每个负类实例都预测为负类,这是一个理想模型。 
  ROC曲线有个很好的特性:当测试集中的正负样本的分布变化的时候,ROC曲线能够保持不变。在实际的数据集中,经常会出现类别不平衡(class imbalance)现象,即负样本比正样本少很多(或者相反),而且测试数据集中的正负样本的分布也可能随时间发生变化。关于ROC与AUC更多的讲解,参见这里

2)排序结果很重要呀,不管预测值是多少,只要正例的预测概率都大于负例的就好了呀

没错,ROC和AUC便可以解决我们上面抛出的两个问题。

ROC全称是“受试者工作特征”,(receiver operating characteristic)。我们根据学习器的预测结果进行排序,然后按此顺序逐个把样本作为正例进行预测,每次计算出两个重要的值,分别以这两个值作为横纵坐标作图,就得到了ROC曲线。

这两个指标是什么呢?是精确率和召回率么?并不是的,哈哈。

ROC曲线的横轴为“假正例率”(True Positive Rate,TPR),又称为“假阳率”;纵轴为“真正例率”(False Positive Rate,FPR),又称为“真阳率”

假阳率,简单通俗来理解就是预测为正样本但是预测错了的可能性,显然,我们不希望该指标太高。横坐标

真阳率,则是代表预测为正样本但是预测对了的可能性,当然,我们希望真阳率越高越好。纵坐标

ROC计算过程如下:
1)首先每个样本都需要有一个label值,并且还需要一个预测的score值(取值0到1);
2)然后按这个score对样本由大到小进行排序,假设这些数据位于表格中的一列,从上到下依次降序;
3)现在从上到下按照样本点的取值进行划分,位于分界点上面的我们把它归为预测为正样本,位于分界点下面的归为负样本;
4)分别计算出此时的TPR和FPR,然后在图中绘制(FPR, TPR)点。

说这么多,不如直接看图来的简单:

每个黑实点即阈值(截断点)

AUC(area under the curve)就是ROC曲线下方的面积,如下图所示,阴影部分面积即为AUC的值:

AUC量化了ROC曲线表达的分类能力。这种分类能力是与概率、阈值紧密相关的,分类能力越好(AUC越大),那么输出概率越合理,排序的结果越合理

在CTR预估中,我们不仅希望分类器给出是否点击的分类信息,更需要分类器给出准确的概率值,作为排序的依据。所以,这里的AUC就直观地反映了CTR的准确性(也就是CTR的排序能力)。

1.7、ROC曲线和P-R曲线有什么特点?

相比P-R曲线,ROC曲线有一个特点,当正负样本分布变化的时候,ROC曲线的形状能够基本保持不变,而P-R曲线的形状会发生比较剧烈的变化

P-R曲线:横召回率,纵精确率

ROC曲线:横假阳,纵真阳

实际应用中 正负样本的比例往往比较不平衡,所以ROC 应用的场景会更多,被广泛用在排序,推荐,广告等领域。

2、AUC的计算

关于AUC的计算方法,如果仅仅根据上面的描述,我们可能只能想到一种方法,那就是积分法,我们先来介绍这种方法,然后再来介绍其他的方法。

2.1 积分思维

这里的积分法其实就是我们之前介绍的绘制ROC曲线的过程,用代码简单描述下:

auc = 0.0
height = 0.0

for each training example x_i, y_i:
  if y_i = 1.0:
    height = height + 1/(tp+fn)
  else 
    auc +=  height * 1/(tn+fp)

return auc

在上面的计算过程中,我们计算面积过程中隐含着一个假定,即所有样本的预测概率值不想等,因此我们的面积可以由一个个小小的矩形拼起来。但如果有两个或多个的预测值相同,我们调整一下阈值,得到的不是往上或者往右的延展,而是斜着向上形成一个梯形,此时计算梯形的面积就比较麻烦,因此这种方法其实并不是很常用。

2.2 Wilcoxon-Mann-Witney Test

关于AUC还有一个很有趣的性质,它和Wilcoxon-Mann-Witney是等价的,而Wilcoxon-Mann-Witney Test就是测试任意给一个正类样本和一个负类样本,正类样本的score有多大的概率大于负类样本的score

根据这个定义我们可以来探讨一下二者为什么是等价的?首先我们偷换一下概念,其实意思还是一样的,任意给定一个负样本,所有正样本的score中有多大比例是大于该负类样本的score? 由于每个负类样本的选中概率相同,那么Wilcoxon-Mann-Witney Test其实就是上面n2(负样本的个数)个比例的平均值。

那么对每个负样本来说,有多少的正样本的score比它的score大呢?是不是就是当结果按照score排序,阈值恰好为该负样本score时的真正例率TPR?没错,相信你的眼睛,是这样的!理解到这一层,二者等价的关系也就豁然开朗了。ROC曲线下的面积或者说AUC的值 与 测试任意给一个正类样本和一个负类样本,正类样本的score有多大的概率大于负类样本的score

哈哈,那么我们只要计算出这个概率值就好了呀。我们知道,在有限样本中我们常用的得到概率的办法就是通过频率来估计之。这种估计随着样本规模的扩大而逐渐逼近真实值。样本数越多,计算的AUC越准确类似,也和计算积分的时候,小区间划分的越细,计算的越准确是同样的道理。具体来说就是: 统计一下所有的 M×N(M为正类样本的数目,N为负类样本的数目)个正负样本对中,有多少个组中的正样本的score大于负样本的score。当二元组中正负样本的 score相等的时候,按照0.5计算。然后除以MN。公式表示如下:

实现这个方法的复杂度为O(n^2 )。n为样本数(即n=M+N)

2.3 Wilcoxon-Mann-Witney Test的化简

该方法和上述第二种方法原理一样,但复杂度降低了。首先对score从大到小排序,然后令最大score对应的sample的rank值为n,第二大score对应sample的rank值为n-1,以此类推从n到1。然后把所有的正类样本的rank相加,再减去正类样本的score为最小的那M个值的情况。得到的结果就是有多少对正类样本的score值大于负类样本的score值,最后再除以M×N即可。值得注意的是,当存在score相等的时候,对于score相等的样本,需要赋予相同的rank值(无论这个相等的score是出现在同类样本还是不同类的样本之间,都需要这样处理)。具体操作就是再把所有这些score相等的样本 的rank取平均。然后再使用上述公式。此公式描述如下:

有了这个公式,我们计算AUC就非常简单了,下一节我们会给出一个简单的Demo

3、AUC计算代码示例

这一节,我们给出一个AUC计算的小Demo,供大家参考:

import numpy as np


label_all = np.random.randint(0,2,[10,1]).tolist()
pred_all = np.random.random((10,1)).tolist()

print(label_all)
print(pred_all)

posNum = len(list(filter(lambda s: s[0] == 1, label_all)))

if (posNum > 0):
    negNum = len(label_all) - posNum
    sortedq = sorted(enumerate(pred_all), key=lambda x: x[1])

    posRankSum = 0
    for j in range(len(pred_all)):
        if (label_all[j][0] == 1):
            posRankSum += list(map(lambda x: x[0], sortedq)).index(j) + 1
    auc = (posRankSum - posNum * (posNum + 1) / 2) / (posNum * negNum)
    print("auc:", auc)

输出为:

[[1], [1], [1], [1], [0], [0], [1], [0], [1], [0]]
[[0.3338126725065774], [0.916003907444231], [0.21214487870979226], [0.7598235037160891], [0.07060830328081447], [0.7650759555141832], [0.16157972737309945], [0.6526480840746645], [0.9327233203035652], [0.6581121768195201]]

auc: 0.5833333333333334

 

二、回归评价指标 SSE/MSE/RMSE/MAE/R-Squared

与分类不同的是,回归是对连续的实数值进行预测,即输出值是连续的实数值,而分类中是离散值。例如,给你历史股票价格,公司与市场的一些信息,需要你去预测将来一段时间内股票的价格走势。那么这个任务便是回归任务

分类问题的评价指标是准确率,那么回归算法的评价指标就是

SSE、MSE,RMSE,MAE、MAPE:预测值 和真实值

R-Squared:预测值 和 真实平均值

1、SSE 和方差

该统计参数计算的是拟合数据和原始数据对应点的误差的平方和,计算公式如下

SSE越接近于0,说明模型选择和拟合更好,数据预测也越成功。

2、均方误差(MSE)

该统计参数是预测数据和原始数据对应点误差的平方和的均值,也就是SSE/n

image.png
MSE (Mean Squared Error)叫做均方误差。
 
这里的y是测试集上的。

用 真实值-预测值 然后平方之后求和平均。

猛着看一下这个公式是不是觉得眼熟,这不就是线性回归的损失函数嘛!!! 对,在线性回归的时候我们的目的就是让这个损失函数最小。那么模型做出来了,我们把损失函数丢到测试集上去看看损失值不就好了嘛。简单直观暴力。

3、均方根误差(RMSE)(Root Mean Squard Error)均方根误差(又称RMSD: root mean square deviation)。 

image.png
 
其中,yiyi是第ii个样本的真实值,yi^yi^是第ii个样本的预测值,nn是样本的个数。该评价指标使用的便是欧式距离。 
  RMSE虽然广为使用,但是其存在一些缺点,因为它是使用平均误差,而平均值对异常点(outliers)较敏感,如果回归器对某个点的回归值很不理性,那么它的误差则较大,从而会对RMSE的值有较大影响,即平均值是非鲁棒的。 
* Quantiles of Errors 

4、MAE:mean asolute error 平均绝对误差 预测、真实数据

 

5、MAPE mean absolute percent error 

 

为了改进RMSE的缺点,提高评价指标的鲁棒性,使用误差的分位数来代替,如中位数来代替平均数。假设100个数,最大的数再怎么改变,中位数也不会变,因此其对异常点具有鲁棒性。 
  在现实数据中,往往会存在异常点,并且模型可能对异常点拟合得并不好,因此提高评价指标的鲁棒性至关重要,于是可以使用中位数来替代平均数,如MAPE: 


  MAPE是一个相对误差的中位数,当然也可以使用别的分位数。 
* “Almost Crrect” Predictions 
  有时我们可以使用相对误差不超过设定的值来计算平均误差,如当|yi−yi^|/yi|yi−yi^|/yi超过100%(具体的值要根据问题的实际情况)则认为其是一个异常点,,从而剔除这个异常点,将异常点剔除之后,再计算平均误差或者中位数误差来对模型进行评价。

MAPE 相当于每个点误差进行归一化,降低了个别离群点带来的绝对误差的影响

在这之前,我们所有的误差参数都是基于预测值(y_hat)和原始值(y)之间的误差(即点对点),从下面开始是所有的误差都是相对原始数据平均值(y_ba)而展开的(即点对全)!!!

 

6、R Squared 预测值 真实数据平均值


上面的几种衡量标准针对不同的模型会有不同的值。比如说预测房价 那么误差单位就是万元。数子可能是3,4,5之类的。那么预测身高就可能是0.1,0.6之类的。没有什么可读性,到底多少才算好呢?不知道,那要根据模型的应用场景来。 
看看分类算法的衡量标准就是正确率,而正确率又在0~1之间,最高百分之百。最低0。如果是负数,则考虑非线性相关。很直观,而且不同模型一样的。那么线性回归有没有这样的衡量标准呢?答案是有的。 
那就是R Squared也就R方 

image.png
 

(1)SSR:Sum of squares of the regression,即预测数据与原始数据均值之差的平方和,公式如下

(2)SST:Total sum of squares,即原始数据和均值之差的平方和,公式如下

细心的网友会发现,SST=SSE+SSR,呵呵只是一个有趣的问题。而我们的“确定系数”是定义为SSR和SST的比值,故

其实“确定系数”是通过数据的变化来表征一个拟合的好坏。由上面的表达式可以知道“确定系数”的正常取值范围为[0 1],越接近1,表明方程的变量对y的解释能力越强,这个模型对数据拟合的也较好

那结果就来了。 
如果结果是0,就说明我们的模型跟瞎猜差不多。 
如果结果是1。就说明我们模型无错误。 
如果结果是0-1之间的数,就是我们模型的好坏程度。 
如果结果是负数。说明我们的模型还不如瞎猜。(其实导致这种情况说明我们的数据其实没有啥线性关系)

scikit-learn中的各种衡量指标
from sklearn.metrics import mean_squared_error #均方误差
from sklearn.metrics import mean_absolute_error #平方绝对误差
from sklearn.metrics import r2_score#R square
#调用
mean_squared_error(y_test,y_predict)
mean_absolute_error(y_test,y_predict)
r2_score(y_test,y_predict)
 

机器学习评价指标

博文 来自: weixin_43171270
没有更多推荐了,返回首页