回归评价指标总结
1. Mean Absolute Error,MAE
平均绝对误差(Mean Absolute Error,MAE),也称为 L1 损失。它是通过取预测值和实际值之间的绝对差值并在整个数据集中取平均值来计算的。从数学上讲,它是绝对误差的算术平均值。MAE 仅测量误差的大小,不关心它们的方向。MAE越低,模型的准确性就越高。
优点:
- 由于采用了绝对值,因此所有误差都以相同的比例加权。
- 如果训练数据有异常值,MAE 不会惩罚由异常值引起的高错误。
- 它提供了模型执行情况的平均度量。
缺点:
- 有时来自异常值的大错误最终被视为与低错误相同。
- 在零处不可微分。许多优化算法倾向于使用微分来找到评估指标中参数的最佳值。在 MAE 中计算梯度可能具有挑战性。
def mean_absolute_error(true, pred):
abs_error = np.abs(true - pred)
sum_abs_error = np.sum(abs_error)
mae_loss = sum_abs_error / true.size
return mae_loss
2. Mean Bias Error (MBE)
平均偏差误差是测量过程高估或低估参数值的趋势。偏差只有一个方向,可以是正的,也可以是负的。正偏差意味着数据的误差被高估,负偏差意味着误差被低估。平均偏差误差是预测值与实际值之差的平均值。该评估指标量化了总体偏差并捕获了预测中的平均偏差。它几乎与 MAE 相似,唯一的区别是这里没有取绝对值。这个评估指标应该小心处理,因为正负误差可以相互抵消。
优点:
- 想检查模型的方向(即是否存在正偏差或负偏差)并纠正模型偏差,MBE 是一个很好的衡量标准。
缺点:
- 就幅度而言,这不是一个好的衡量标准,因为误差往往会相互补偿。
- 它的可靠性不高,因为有时高个体错误会产生低MBE。
- 作为一种评估指标,它在一个方向上可能始终是错误的。
def mean_bias_error(true, pred):
bias_error = true - pred
mbe_loss = np.mean(np.sum(diff) / true.size)
return mbe_loss
3. Relative Absolute Error (RAE)
相对绝对误差是通过将总绝对误差除以平均值和实际值之间的绝对差来计算的。RAE并以比率表示。RAE的值从0到1。一个好的模型将具有接近于零的值,其中零是最佳值。
优点:
- RAE 可用于比较以不同单位测量误差的模型。
- RAE 是可靠的,因为它可以防止异常值。
def relative_absolute_error(true, pred):
true_mean = np.mean(true)
squared_error_num = np.sum(np.abs(true - pred))
squared_error_den = np.sum(np.abs(true - true_mean))
rae_loss = squared_error_num / squared_error_den
return rae_loss
3. Mean Absolute Percentage Error (MAPE)
平均绝对百分比误差是通过将实际值与预测值之间的差值除以实际值来计算的。MAPE 也称为平均绝对百分比偏差,随着误差的增加而线性增加。MAPE 越小,模型性能越好。
优点:
- MAPE与变量的规模无关,因为它的误差估计是以百分比为单位的。
- 所有错误都在一个共同的尺度上标准化,很容易理解。
- MAPE避免了正值和负值相互抵消的问题。
缺点:
- 分母值为零时,面临着“除以零”的问题。
- MAPE对数值较小的误差比对数值大的误差错误的惩罚更多。(因为误差越小,说明预测值与真实值越接近,预测值作为分母就会得到更多的惩罚,倒数更大)
- 因为使用除法运算,对于相同的误差,实际值的变化将导致损失的差异。
def mean_absolute_percentage_error(true, pred):
abs_error = (np.abs(true - pred)) / true
sum_abs_error = np.sum(abs_error)
mape_loss = (sum_abs_error / true.size) * 100
return mape_loss
4. Mean Squared Error (MSE)
均方误差也称为 L2 损失,MSE通过将预测值和实际值之间的差平方并在整个数据集中对其进行平均来计算误差。MSE 也称为二次损失,因为惩罚与误差不成正比,而是与误差的平方成正比。平方误差为异常值赋予更高的权重,从而为小误差产生平滑的梯度。
MSE 永远不会是负数,因为误差是平方的。误差值范围从零到无穷大。MSE 随着误差的增加呈指数增长。一个好的模型的 MSE 值接近于零。
优点:
- MSE会得到一个只有一个全局最小值的梯度下降。
- 对于小的误差,它可以有效地收敛到最小值。没有局部最小值。
- MSE 通过对模型进行平方来惩罚具有巨大错误的模型。
缺点:
- 对异常值的敏感性通过对它们进行平方来放大高误差。
- MSE会受到异常值的影响,会寻找在整体水平上表现足够好的模型。
def mean_squared_error(true, pred):
squared_error = np.square(true - pred)
sum_squared_error = np.sum(squared_error)
mse_loss = sum_squared_error / true.size
return mse_loss
5. Root Mean Squared Error (RMSE)
RMSE 是通过取 MSE 的平方根来计算的。RMSE 也称为均方根偏差。它测量误差的平均幅度,并关注与实际值的偏差。RMSE 值为零表示模型具有完美拟合。RMSE 越低,模型及其预测就越好。
优点:
- 易于理解,计算方便
缺点:
- 建议去除异常值才能使其正常运行。
- 会受到数据样本大小的影响。
def root_mean_squared_error(true, pred):
squared_error = np.square(true - pred)
sum_squared_error = np.sum(squared_error)
rmse_loss = np.sqrt(sum_squared_error / true.size)
return rmse_loss
6. Relative Squared Error (RSE)
相对平方误差需要使用均方误差并将其除以实际数据与数据平均值之间的差异的平方。(注意RSE和RAE的不同)
优点
- 对预测的平均值和规模不敏感。
def relative_squared_error(true, pred):
true_mean = np.mean(true)
squared_error_num = np.sum(np.square(true - pred))
squared_error_den = np.sum(np.square(true - true_mean))
rse_loss = squared_error_num / squared_error_den
return rse_loss
7.Normalized Root Mean Squared Error (NRMSE)
归一化 RMSE 通常通过除以一个标量值来计算,它可以有不同的方式。有时选择四分位数范围可能是最好的选择,因为其他方法容易出现异常值。当想要比较不同因变量的模型或修改因变量时,NRMSE 是一个很好的度量。它克服了尺度依赖性,简化了不同尺度模型甚至数据集之间的比较。
- RMSE / maximum value in the series
- RMSE / mean
- RMSE / difference between the maximum and the minimum values (if mean is zero)
- RMSE / standard deviation
- RMSE / interquartile range
def normalized_root_mean_squared_error(true, pred):
squared_error = np.square((true - pred))
sum_squared_error = np.sum(squared_error)
rmse = np.sqrt(sum_squared_error / true.size)
nrmse_loss = rmse/np.std(pred)
return nrmse_loss
8. Huber Loss
Huber损失是线性和二次评分方法的组合。它有一个超参数 delta,可以根据数据进行调整。对于高于 delta 的值,损失将是线性的(L1 损失),对于低于 delta 的值,损失将是二次的(L2 损失)。它平衡并结合了 MAE(平均绝对误差)和 MSE(均方误差)的良好特性。
优点:
- 它在零处是可微的。
- 由于 delta 以上的线性度,异常值得到了正确处理。
- 可以调整超参数delta以最大限度地提高模型准确性。
缺点:
- 为了最大限度地提高模型精度,需要优化delta,这是一个迭代过程。
- 它只能微分一次。
def huber_loss(true, pred, delta):
huber_mse = 0.5 * np.square(true - pred)
huber_mae = delta * (np.abs(true - pred) - 0.5 * (np.square(delta)))
return np.where(np.abs(true - pred) <= delta, huber_mse, huber_mae)
标签:总结,pred,模型,squared,error,np,评价,true,sum
From: https://www.cnblogs.com/lyxLearningNotes/p/16866966.html