1 前言
回归任务是机器学习中常见的任务,特别是涉及到具体的发电量预测、风力预测等工业任务时,有非常多的应用场景。回归任务不同于分类任务,回归任务的预测值一般是连续的数,分类任务的预测值则是离散的值(比如0、1分类);分类任务使用accuracy_score、recall_score、F1_score作为评价指标,而回归任务中常用的指标主要包括:explained_variance_score、mean_absolute_error、mean_squared_error、 root-mean-square error、r2_score。
2 评价指标介绍
2-1 explained_variance_score
可解释方差( explained_variance_score)。用于评判回归模型的方差得分,其值取值范围是[0,1],越接近于1说明自变量越能解释因变量的方差变化,值越小则说明效果越差。假设是真实值,是相对应的预测值,是方差。Explained Variance由下式公式给出:
统计中的方差(样本方差)是每个样本值与全体样本值的平均数之差的平方值的平均数。可解释方差并不意味着解释了方差,仅仅意味着我们可以使用一个或多个变量来比以前更准确地预测事物。在许多模型中,如果X与Y相关,X可以说是”解释”了Y中的方差,但是X并不真正导致Y。
prediction = [2.7290165424346924,5.511385440826416,5.924368381500244,6.808969020843506,6.886723041534424,7.523008346557617]
true_value = [2.779719114303589, 5.632253646850586,6.240379810333252,6.325290203094482,6.893458843231201,7.779913425445557]
from sklearn.metrics import explained_variance_score
score = explained_variance_score(true_value, prediction)
print(score)
#0.9722818339245968
2-2 mean_absolute_error
平均绝对误差(Mean Absolute Error,MAE),用来描述预测值和真实值的差值,用于评估预测结果和真实数据集的接近程度的程度,其值越小说明拟合效果越好。平均绝对误差 (MAE)是最容易理解的回归误差指标。 我们将为每个数据点计算残差,只取每个残差的绝对值,以使负残差和正残差不会被抵消。 然后,我们取所有这些残差的平均值。 有效地,MAE描述了残差的典型大小。假设fi是真实值,yi是相对应的预测值,则n个样本的MAE可由下式出给:
虽然平均绝对误差能够获得一个评价值,但是并不知道这个值代表模型拟合是优还是劣,只有通过对比才能达到效果。
prediction = [2.7290165424346924,5.511385440826416,5.924368381500244,6.808969020843506,6.886723041534424,7.523008346557617]
true_value = [2.779719114303589, 5.632253646850586,6.240379810333252,6.325290203094482,6.893458843231201,7.779913425445557]
from sklearn.metrics import mean_absolute_error
score = mean_absolute_error(true_value, prediction)
print(score)
#0.20581698417663574
2-3 mean_squared_error
均方差(Mean squared error,MSE),该指标计算的是拟合数据和原始数据对应样本点的误差的平方和的均值,其值越小说明拟合效果越好。假设fi是真实值,yi是相对应的预测值,则n个样本的MAE可由下式出给:
prediction = [2.7290165424346924,5.511385440826416,5.924368381500244,6.808969020843506,6.886723041534424,7.523008346557617]
true_value = [2.779719114303589, 5.632253646850586,6.240379810333252,6.325290203094482,6.893458843231201,7.779913425445557]
from sklearn.metrics import mean_squared_error
score = mean_squared_error(true_value, prediction)
print(score)
#0.06950564774945178
2-4 root-mean-square error
由于MSE与我们的目标变量的量纲不一致,为了保证量纲一致性,我们需要对MSE进行开方,即均方根误差(RMSE):均方根误差 Root Mean Squared Error(RMSE)。
均方根误差亦称标准误差,它是观测值与真值偏差的平方与观测次数比值的平方根。均方根误差是用来衡量观测值同真值之间的偏差。标准误差对一组测量中的特大或特小误差反映非常敏感,所以,标准误差能够很好地反映出测量的精密度。可用标准误差作为评定这一测量过程精度的标准。计算公式如下:
这不就是MSE开个根号么。有意义么?其实实质是一样的。只不过用于数据更好的描述。例如:要做房价预测,每平方是万元,我们预测结果也是万元。那么差值的平方单位应该是 千万级别的。那我们不太好描述自己做的模型效果。我们的模型误差是多少千万?于是干脆就开个根号就好了。我们误差的结果就跟我们数据是一个级别的,可在描述模型的时候就说,我们模型的误差是多少万元。
RMSE与MAE对比:RMSE相当于L2范数,MAE相当于L1范数。次数越高,计算结果就越与较大的值有关,而忽略较小的值,所以这就是为什么RMSE针对异常值更敏感的原因(即有一个预测值与真实值相差很大,那么RMSE就会很大)
prediction = [2.7290165424346924,5.511385440826416,5.924368381500244,6.808969020843506,6.886723041534424,7.523008346557617]
true_value = [2.779719114303589, 5.632253646850586,6.240379810333252,6.325290203094482,6.893458843231201,7.779913425445557]
from sklearn.metrics import mean_squared_error
import math
mse_score = mean_squared_error(true_value, prediction)
rmse_score = math.sqrt(mse_score)
print(rmse_score)
2-5 R2 score
R2 Score又称为the coefficient of determination。判断的是预测模型和真实数据的拟合程度,最佳值为1,同时可为负值。假设yi是真实值,fi是相对应的预测值,是的均值,则n 个样本的R2 score由下式公式给出:
如果结果是0,就说明我们的模型跟瞎猜差不多。如果结果是1,就说明我们模型无错误。如果结果是0-1之间的数,就是我们模型的好坏程度。如果结果是负数。说明我们的模型还不如瞎猜。
prediction = [2.7290165424346924,5.511385440826416,5.924368381500244,6.808969020843506,6.886723041534424,7.523008346557617]
true_value = [2.779719114303589, 5.632253646850586,6.240379810333252,6.325290203094482,6.893458843231201,7.779913425445557]
from sklearn.metrics import r2_score
score = r2_score(true_value, prediction)
print(score)
#0.9714655558567518
后记
reference:sklearn中的回归器性能评估方法 - nolonely - 博客园