为机器学习模型选择正确的度量:回归指标

最有用的度量

为机器学习模型选择正确的度量:回归指标

回归指标

大多数博客都集中在分类指标上,比如精度、查全率、AUC等,我想探索各种度量,包括回归中使用的度量标准。MAE和RMSE为连续变量的两个最流行的度量。

RMSE(均方根误差)

它表示预测值和观察值(称为残差)之间差异的样本标准偏差。在数学上,它是用这个公式计算的:

为机器学习模型选择正确的度量:回归指标

MAE

MAE是预测值和观测值之间绝对差值的平均值。MAE是一个线性分数,这意味着所有的个体差异在平均值上都是相同的。例如,10和0之间的差值将是5和0之差的两倍。但是,对于RMSE我们将进一步详细讨论的情况也是如此。在数学上,它是用这个公式计算的:

为机器学习模型选择正确的度量:回归指标

那么你应该选择哪一个?为什么?

那么,很容易理解和解释MAE,因为它直接取平均偏差,而RMSE惩罚高于MAE的更高差异。

让我们通过两个例子来理解上述说法:

Case 1: Actual Values = [2,4,6,8] , Predicted Values = [4,6,8,10]

Case 2: Actual Values = [2,4,6,8] , Predicted Values = [4,6,8,12]

MAE for case 1 = 2.0, RMSE for case 1 = 2.0

MAE for case 2 = 2.5, RMSE for case 2 = 2.65

从上面的例子中,我们可以看到RMSE比MAE更加严重地惩罚了最后的值预测。通常,RMSE将高于或等于MAE。唯一的情况下,它等于MAE是当所有的差异是相等或零。

我将尝试从数学角度解释上述逻辑。

让我们在一个变量中采用一个简单的线性模型:y = mx + b

在这里,我们试图找到“m”和“b”,并且我们提供了数据(x,y)。

如果我们用RMSE定义损失函数(J):那么我们可以很容易地区分J wrt。到m和b并得到更新的m和b

为机器学习模型选择正确的度量:回归指标

上述等式更容易解决,并且MAE不适用。

然而,如果你想要一个度量只是从解释的角度来比较两个模型,那么我认为MAE是一个更好的选择。需要注意的是,RMSE和MAE的单位与y值相同,对于R Square而言不是这样。RMSE和MAE的范围从0到无穷大。

R平方(R²)和调整R平方

R平方和调整R平方常常用于说明目的,并说明您选择的自变量如何很好地解释因变量的变化。这两个指标都有相当的误解,因此我想先澄清一下,然后再讨论它们的优点和缺点。

在数学上,R_Squared由下式给出:

为机器学习模型选择正确的度量:回归指标

调整后的R²

就像R²一样,调整后的R²也显示了术语如何符合曲线或线条,但是可以根据模型中的术语数量进行调整。它由以下公式给出:

为机器学习模型选择正确的度量:回归指标

其中n是观测值的总数,k是预测值的数量。调整后的R 2总是小于或等于R 2

为什么你应该选择R²调整R²?

正常R²存在一些问题,通过调整后的R²解决。经过调整的R²会考虑在模型中增加一个附加项的边际改进。因此,如果添加有用的术语,它会增加,并且如果添加不太有用的预测器,它将减少。但是,即使模型没有实际改进,R 2也随着增加而增加。用一个例子来理解这一点会更容易。

为机器学习模型选择正确的度量:回归指标

这里,情况1是一个简单的情况,我们有5个观察值(x,y)。在情况2中,我们有一个变量是变量1的两倍(与变量1完全相关)。在案例3中,我们对var2产生了轻微的干扰,因此它不再与var1完全相关。

因此,如果我们为每个案例拟合简单的普通最小二乘(OLS)模型,那么就逻辑而言,我们不会为案例1提供任何额外的或有用的信息给案例2和案例3.所以我们的度量值不应该为这些模型提高。然而,实际上R 2对于模型2和3给出更高的值是不正确的。但是,调整后的R 2可以解决这个问题,实际上对于情况2和3都是递减的。让我们给这些变量一些数字(x ,y)并查看Python中获得的结果。

import numpy as np

import pandas as pd

from sklearn import datasets, linear_model

def metrics(m,X,y):

yhat = m.predict(X)

print(yhat)

SS_Residual = sum((y-yhat)**2)

SS_Total = sum((y-np.mean(y))**2)

r_squared = 1 - (float(SS_Residual))/SS_Total

adj_r_squared = 1 - (1-r_squared)*(len(y)-1)/(len(y)-X.shape[1]-1)

return r_squared,adj_r_squared

data = pd.DataFrame({"x1": [1,2,3,4,5], "x2": [2.1,4,6.1,8,10.1]})

y = np.array([2.1, 4, 6.2, 8, 9])

model1 = linear_model.LinearRegression()

model1.fit( data.drop("x2", axis = 1),y)

metrics(model1,data.drop("x2", axis=1),y)

model2 = linear_model.LinearRegression()

model2.fit( data,y)

metrics(model2,data,y)

data = pd.DataFrame({"x1": [1,2,3,4,5], "x2": [2.1,4,6.1,8,10.1]} )

y = np.array([2.1, 4, 6.2, 8, 9])

model3 = linear_model.LinearRegression()

model3.fit( data,y)

metrics(model3,data,y)

注意:模型1和模型2的预测值将相同,因此r_squared也将相同,因为它仅取决于预测值和实际值。

为机器学习模型选择正确的度量:回归指标

从上表可以看出,尽管我们没有增加案例1到案例2的任何附加信息,但R 2仍在增加,而调整后的R 2正在显示正确的趋势(惩罚模型2获得更多变量)

调整后的R²与RMSE的比较

对于前面的例子,我们将看到类似于R²的情况1和情况2的RMSE相同。在这种情况下,调整后的R²比RMSE做得更好,其范围仅限于将预测值与实际值进行比较。而且,RMSE的绝对值实际上并不能说明模型有多糟糕。它只能用于比较两个模型,而调整后的R²很容易做到这一点。例如,如果一个模型将R²调整为0.05,那么肯定很差。

但是,如果你只关心预测精度,那么RMSE是最好的。它计算简单,容易区分并作为大多数模型的默认度量。

常见误解:我经常在网上看到R²的范围介于0和1之间,实际上并非如此。R²的最大值是1,但最小值可以是负无穷大。考虑到即使y_actual为正数,模型预测所有观测值都具有高负值的情况。在这种情况下,R 2将小于0.这将是一个极不可能的情况,但可能性依然存在。

附加内容

这里有一个有趣的指标,可以告诉你是否对NLP感兴趣,并且为了达到目的,

BLEU(双语评估研究)

它主要用于衡量机器翻译与人类翻译相关的质量。它使用了精确度量的修改形式。

计算BLEU得分的步骤:

1.将句子转换为unigrams,bigrams,trigrams和4-gram

2.计算大小为1到4的n-gram的精度

3.取所有这些精度值的加权平均的指数

4将其与简短的惩罚相乘(稍后将解释)

为机器学习模型选择正确的度量:回归指标

为机器学习模型选择正确的度量:回归指标

这里BP是简短惩罚,r&c分别是参考和候选词中的词的数量,w - 权重,P - 精度值

Example:

参考:The cat is sitting on the mat

机器翻译1: On the mat is a cat

机器翻译2:There is cat sitting cat

我们来比较一下上面两个翻译和BLEU得分。

为机器学习模型选择正确的度量:回归指标

我在这里使用nltk.translate.bleu_score包 -

from nltk.translate.bleu_score import sentence_bleu

reference = [['the', 'cat',"is","sitting","on","the","mat"]]

candidate = ["on",'the',"mat","is","a","cat"]

score = sentence_bleu( reference, candidate)

print(score)

from nltk.translate.bleu_score import sentence_bleu

reference = [['the', 'cat',"is","sitting","on","the","mat"]]

candidate = ["there",'is',"cat","sitting","cat"]

score = sentence_bleu( reference, candidate)

print(score)

最终结果:BLEU(MT1)= 0.454,BLEU(MT2)= 0.59

相关推荐