200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 机器学习---评估指标(最常用的回归指标:平均绝对误差和均方误差)

机器学习---评估指标(最常用的回归指标:平均绝对误差和均方误差)

时间:2021-08-01 01:31:09

相关推荐

机器学习---评估指标(最常用的回归指标:平均绝对误差和均方误差)

评估指标是判断一个模型好坏的概念。

哦,模型又是什么?可以这么认为,我们想预测未知,就要做很多工作,这些工作包括取得数据,分析数据,处理数据等等,形成一整套完整的流程下来。也叫建模。建模的结果就是模型。

1. 混淆矩阵

正确的一边我们称为:阳性

正确的另一边我们称为:阴性

注意:这里的正确是指对于模型而言,如果一个模型是检测垃圾邮件的,那么检测出垃圾邮件是阳性,检测出来的正常邮件是阴性。

问题又来了,模型肯定不准确呀

你说他是阳性,他就真是阳性了?根据实际看来

阳性里面:真的阳性叫真阳性,错误识别的那个阳性叫假阳性。

同理,

阴性里面:真的阴性叫真阴性,错误识别的那个阴性叫假阴性

这就是混淆矩阵。

2. 准确率

混淆矩阵

总共有100份数据,有80个数据被分对了(真阳性30个真阴性50个),那么准确率=80/100=0.8

有一些很重要的场合,比如信用卡诈骗,如果我们找一个准确率很高的模型

混淆矩阵

总共100条信息,真正情况:60条正常,40条盗刷。

模型识别出来:70条正常(60真阳性,10假阳性),30条盗刷(30真阴性)。

那么准确率=60+30100=90%准确率=\frac{60+30}{100 }= 90\%准确率=10060+30​=90%

但是对于这样的数据一点儿都不好,10个假阳性数据就已经说明这个模型会带来大量的财产损失了。

这时就需要着重关注:我们到底觉得哪些错误不能犯,比如看病模型不能把生病的病人诊断成健康(假阴性),垃圾邮件不能把正常的邮件识别成垃圾邮件(假阳性)。这时候就必须要用另外的指标(精度,召回率)来衡量这个模型了

3. 精度

精度:在所有模型诊断的阳性数据中,有多少真阳性。

翻译成白话后:精度就是衡量模型识别能力的指标。

例1:假设有个医疗模型混淆矩阵:

这个模型的目的是检测生病的人的,换句话说:在所有诊断为生病(阳性,包括真阳性和假阳性)的人中,真生病(真阳性)的比例。

根据以上模型:精度=10001000+800=55.6%精度=\frac{1000}{1000+800}=55.6\%精度=1000+8001000​=55.6%

例2:假设有个垃圾邮件处理系统混淆矩阵:

这个模型的目的是检测垃圾邮件的,换句话说:在所有识别出垃圾邮件(阳性,包括真阳性和假阳性)中,真正的垃圾邮件(真阳性)比例。

根据以上模型:精度=100100+30=76.9%精度=\frac{100}{100+30}=76.9\%精度=100+30100​=76.9%

4. 召回率

召回率:所有真正阳性数据中,有多少阳性被识别出来了。

翻译成白话后:衡量真实数据被预测正确的概率。

例1:假设还是这个医疗模型,混淆矩阵:

真实生病的人(就是生病被检测出来的真阳性和生病没被检测出来的假阴性)中,生病被检测出来了(真阳性)的概率。

根据以上模型:召回率=10001000+200=83.3%召回率=\frac{1000 }{1000+200}=83.3\%召回率=1000+2001000​=83.3%

例2:假设还是这个垃圾邮件处理系统,混淆矩阵:

真实的垃圾邮件(被检测出来的真阳性垃圾邮件和没被检测出来的假阴性邮件)中,被检测出的垃圾邮件(真阳性)的概率。

根据以上模型:召回率=100100+170=37%召回率=\frac{100}{100+170}=37\%召回率=100+170100​=37%

发动我们聪明的大脑思考一下,对于上面的医疗模型我们应该想要什么?我们必须要明白:一个没有被诊断出来的病人只有等死的份了,我们一定一定要提高模型的检测能力(精度),把所有生病的人都检测出来。再发动我们聪明的大脑思考,对于上面的垃圾邮件检测模型我们需要注意什么?我们必须明白:你的大学录取邮件必须被接收到,如果被误分进垃圾箱了,那是多么可怕的事情,我们一定一定要把真实邮件都分对(召回率),召回率越大越安全。参照指标为第6个知识点

如果我们想把两者结合起来看呢?再或者我们着重看其中一个指标,附带看另外一个指标,这时候怎么衡量?请熟悉以下内容

5. F1得分

我们发现,衡量一个模型好坏必然是有一个指标越高越好,但是如果另一个指标过低,那么即使最好的指标是100%(你可以用第2点的信用卡混淆矩阵的例子检验),它也不是一个好模型,我们必须想办法把两个指标得分结合在一起看,使用一个函数来总结一下,这个函数的得分越大越好,但是当精度和召回率有一个很小时,这个函数就必须很小,代表这个模型不是一个好模型。

这个函数叫调和函数(F1 Score):

F1Score=2⋅Precision∗RecallPrecision+Recall​F1 Score=2⋅\frac{Precision∗Recall}{Precision+Recall​}F1Score=2⋅Precision+Recall​Precision∗Recall​

我们直接看调和函数最极端的情况,比如精度是100,召回率是0,F1得分为0,说明这个模型不好,事实也确实如此。再如精度和召回率都是50呢,F1得分为50,代表这个结果中等,事实也是如此。如果两个都是100呢,F1得分为100,事实更是如此。0,50,100这几个得分很好的把数据中好坏划分出来了,并且一方得分越低,F1得分越低,确实有很好的衡量作用。

F1是把精度和召回率同等重要程度看的,两者重要性是一样的

6. F−βF-\betaF−β得分

β\betaβ是个可变参数,当β\betaβ取1时就是第5个知识点F1得分了。

现在:

-精度--------------------F1得分(β\betaβ取1,同等重要)----------------召回率-

β\betaβ在上面这条线滑动,越靠近精度(小于1)表明精度重要,越靠近召回率(大于1)表明召回率重要。

所以根据β\betaβ取值来表明我们心目中对于指标的看重程度。

在式子中应如下表示:

Fβ=(1+β2)⋅Precision⋅Recallβ2⋅Precision+RecallF\beta=(1+\beta^2)⋅\frac{Precision⋅Recall}{\beta^2⋅Precision+Recall}Fβ=(1+β2)⋅β2⋅Precision+RecallPrecision⋅Recall​

分析:

在FβF\betaFβ得分公式中,如果设为

β=0\beta = 0β=0

F0=(1+02)⋅Precision⋅Recall0⋅Precision+Recall=Precision⋅RecallRecall=Precision(1+0^2) \cdot \frac{\text{Precision} \cdot \text{Recall}}{0 \cdot \text{Precision} + \text{Recall}} = \frac{\text{Precision} \cdot \text{Recall}}{\text{Recall}} = \text{Precision}(1+02)⋅0⋅Precision+RecallPrecision⋅Recall​=RecallPrecision⋅Recall​=Precision

因此,β\betaβ的最低值为 0,这时候就得出精度。

如果 β\betaβ=N 非常大,则

Fβ=(1+N2)⋅Precision⋅RecallN2⋅Precision+Recall=Precision⋅RecallN21+N2Precision+11+N2RecallF\beta = (1+N^2) \cdot \frac{\text{Precision} \cdot \text{Recall}}{N^2 \cdot \text{Precision} + \text{Recall}}= \frac{\text{Precision} \cdot \text{Recall}}{\frac{N^2}{1+N^2}\text{Precision} + \frac{1}{1+N^2}\text{Recall}}Fβ=(1+N2)⋅N2⋅Precision+RecallPrecision⋅Recall​=1+N2N2​Precision+1+N21​RecallPrecision⋅Recall​

随着NN变成无穷大,可以看出11+N2\frac{1}{1+N^2}1+N21​变成 0,并且N21+N2\frac{N^2}{1+N^2}1+N2N2​变成 1.

因此,如果取极限值,则

lim⁡N→∞FN=Precision⋅Recall1⋅Precision+0⋅Recall=Recall{\lim_{N\rightarrow \infty}} F_N = \frac{\text{Precision} \cdot \text{Recall}}{1 \cdot \text{Precision} + 0 \cdot \text{Recall}} = \text{Recall}limN→∞​FN​=1⋅Precision+0⋅RecallPrecision⋅Recall​=Recall

因此,得出结论:β\betaβ的界限在 0 和

∞\infty∞之间。

最终要的是:

如果 β\betaβ = 0, 则得出精度。

如果β=∞\beta = \inftyβ=∞ 则得出召回率。

如果β\betaβ = 1,则得出精度和召回率的调和平均数。

对于β\betaβ取其他值,如果接近 0,则得出接近精度的值,如果很大,则得出接近召回率的值。

7. ROC曲线

ROC曲线也叫受试者工作特性曲线。

我们划分数据的时候关注拆分的好坏,如果全部划分正确,则得分为1.稍微好一点的划分0.8左右,随机划分的话,得分为0.5左右。

那么需要明白两个定义:

1.完美划分

真阳性比例,即所有真正的阳性标记的点(事实阳性)中,有多少分类正确(真阳性)真阳性比例=真阳性事实阳性真阳性比例=\frac{真阳性}{事实阳性}真阳性比例=事实阳性真阳性​。

假阳性比例,即在所有真正阴性标记的点(事实阴性)中,有多少分类被错误的判断为阳性(假阳性)假阳性比例=假阳性事实阴性假阳性比例=\frac{假阳性}{事实阴性}假阳性比例=事实阴性假阳性​。

这里学习的时候不能搞混,要明白,ROC指标是来判断机器划分数据完不完美的东西,机器觉得自己识别出来的叫阳性,另一部分叫阴性,那么,对于衡量机器的指标来说,阳性是它的面子,对于这个面子分为两部分,一部分是分对的,在事实阳性里面能找到,一部分这面子有毒,你说他是阳性,却是事实阴性里面的,那么就有完美和不完美,完美就是真阳性比例=真阳性事实阳性真阳性比例=\frac{真阳性}{事实阳性}真阳性比例=事实阳性真阳性​,不完美就是假阳性比例=假阳性事实阴性假阳性比例=\frac{假阳性}{事实阴性}假阳性比例=事实阴性假阳性​。

2.得分

我们从头到尾依次多划分几次,就能得到很多对真阳性比例和假阳性比例。把众多对真阳性比例和假阳性比例值画在二维坐标上,形成了一条曲线,就叫ROC曲线。我们惊奇的发现,如果这个模型能被全部划分正确,那么ROC曲线与X轴围成的面积为1.如果这个模型不能被完完全全的划分正确,总是会出现一点儿小错误,那么ROC曲线围成的面积为0.8左右,同理这个模型无论怎么划分都有很多错误,就像是随机洒落好坏参半那样,面积就为0.5左右。

所以,一个模型越好(数据越容易被完美分隔),他的ROC曲线下的面积就越接近1,我们可以用ROC曲线衡量模型(数据)是否能被完美划分的可能性。

当然,机器总是把所有阳性识别成阴性,所有阴性识别成阳性,ROC曲线面积就是0了。

8. 回归指标(专门用来评估线性回归的)

逻辑回归是分类,线性回归是预测。如果不明白可以参考机器学习方法:逻辑回归与线性回归。

这里的回归指标是判断线性回归的,如果各个数据和机器拟合的预测线差距越大,说明越不好,差距越小说明越好。大致了解之后看详细解释:

平均绝对误差

将点到线的所有距离绝对值求和。

使用sklearn很好完成,如果对于sklearn不熟,可以参考skearn分析数据

from sklearn.metrics import mean_absolute_errorfrom sklearn.linear_model import LinearRegressionclassifier = LinearRegression()#创建一个线性回归分类器对象classifier.fit(X,y)#把数据放到分类器里面,得到拟合函数guesses = classifier.predict(X)#模型对数据所作的预测,取x值,预测yerror = mean_absolute_error(y,guesses)#与真正的y比较,得到平均绝对误差

缺点:绝对值函数不好微分,对于像梯度下降这样实时调整的算法来说不太好用,下面介绍另外一种方法。

均方误差

点到线的距离我们不取绝对值,取他的平方,同理在sklearn中完成,仅需要把平均绝对值改为平方

from sklearn.metrics import mean_squared_error #此处更改from sklearn.linear_model import LinearRegressionclassifier = LinearRegression()#创建一个线性回归分类器对象classifier.fit(X,y)#把数据放到分类器里面,得到拟合函数guesses = classifier.predict(X)#模型对数据所作的预测,取x值,预测yerror = mean_squared_error(y,guesses)#与真正的y比较,得到均方误差 此处更改

R2得分

R2分数通过将我们的模型与最简单的可能模型相比得出。

什么叫最简单的可能模型?

就是取所有数据的平均值,然后画一条水平线划分。就是最简单的模型了。

计算出这个最简单模型的均方误差。

我们用自己的线性回归模型来和这个最简单模型比较,误差越小,说明模型越不好,误差越大说明模型越好。

我们想一个公式来表达这个关系,最后结果就是R2得分了。

R2=1−线性回归模型最简单模型R2 = 1 - \frac{线性回归模型}{最简单模型}R2=1−最简单模型线性回归模型​

式子中1-的作用就是说明:

当我们的线性回归模型越好时,$ \frac{线性回归模型}{最简单模型}比值越小,R2越大。当我们的线性回归模型越差时,比值越小,R2越大。 当我们的线性回归模型越差时,比值越小,R2越大。当我们的线性回归模型越差时, \frac{线性回归模型}{最简单模型}$比值越大,R2越小。

也就是,R2取值为0-1之间,得分越大线性回归模型越好。

在sklearn中举个例子

from sklearn.metrics import r2_score #此处更改y_true = [1, 2, 4]y_pred = [1.3, 2.5, 3.7]r2_score(y_ture, y_pred)

我们看到,无论是平均绝对误差,还是均方误差,还是R2得分都是专门用来评估线性回归的。

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