MAPE——Python 中的平均绝对百分比误差

各位读者大家好!在我们的误差指标系列中,我们已经理解并实现了均方根误差

今天,我们将重点关注模型构建中的另一个重要误差指标——Python 中的平均绝对百分比误差 (MAPE)


什么是MAPE?

平均绝对百分比误差 (MAPE)是一种统计度量,用于定义机器学习算法在特定数据集上的准确性。

MAPE 可以被视为一种损失函数,用于定义模型评估所称的误差。使用 MAPE,我们可以根据实际 v/s 估计值的差异来估计准确性。

让我们看看下面对平均绝对百分比误差的解释——

MAPE

如上所示,在 MAPE 中,我们最初计算实际值 (A)估计/预测值 (F)之间的绝对差此外,我们对结果应用均值函数以获得 MAPE 值。

MAPE 也可以用百分比表示。MAPE 越低,模型拟合效果越好


NumPy 模块的平均绝对百分比误差

现在让我们使用Python NumPy 模块来实现 MAPE 。

首先,我们将数据集导入到环境中。您可以在此处找到数据集

此外,我们使用 Python train_test_split() 函数将数据集拆分为训练数据集和测试数据集。

然后,我们定义了一个函数来实现 MAPE,如下所示:

  • 计算实际值和预测值之间的差异。
  • 然后,使用numpy.abs() function求出上述差值的绝对值。
  • 最后,申请numpy.mean() function 获取MAPE。

例子:

import numpy as np
from sklearn.model_selection import train_test_split
import pandas as pd
bike = pd.read_csv("Bike.csv")
 
#Separating the dependent and independent data variables into two data frames.
X = bike.drop(['cnt'],axis=1)
Y = bike['cnt']
 
# Splitting the dataset into 80% training data and 20% testing data.
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=.20, random_state=0)
 
#Defining MAPE function
def MAPE(Y_actual,Y_Predicted):
    mape = np.mean(np.abs((Y_actual - Y_Predicted)/Y_actual))*100
    return mape

现在,我们已经实现了线性回归来使用 MAPE 检查模型的错误率。

在这里,我们LinearRegression() function对数据集应用了线性回归。此外,我们使用Predict() 函数 来预测测试数据集的值。

最后,我们调用上面创建的MAPE() 函数来估计预测中的误差值,如下所示:

#Building the Linear Regression Model
from sklearn.linear_model import LinearRegression
linear_model = LinearRegression().fit(X_train , Y_train)
 
#Predictions on Testing data
LR_Test_predict = linear_model.predict(X_test)
 
# Using MAPE error metrics to check for the error rate and accuracy level
LR_MAPE= MAPE(Y_test,LR_Test_predict)
print("MAPE: ",LR_MAPE)

输出:

MAPE:  16.628873360270358

Python scikit learn 库的平均绝对百分比误差

在此示例中,我们使用 Python sklearn 库实现了 MAPE 的概念。

Python sklearn 库为我们提供了mean_absolute_error() function计算 MAPE 值的方法,如下所示 –

例子:

from sklearn.metrics import mean_absolute_error
Y_actual = [1,2,3,4,5]
Y_Predicted = [1,2.5,3,4.1,4.9]
mape = mean_absolute_error(Y_actual, Y_Predicted)*100
print(mape)

输出:

13.999999999999984

结论

至此,我们这个话题就结束了。如果您遇到任何问题,请随时在下面发表评论。

有关更多与 Python 相关的此类帖子,请继续关注这里,直到那时,快乐学习!🙂


参考