为啥我得到高 MAE(平均绝对误差)和 MSE(均方误差)与 MAPE(平均绝对百分比误差)相比?

Posted

技术标签:

【中文标题】为啥我得到高 MAE(平均绝对误差)和 MSE(均方误差)与 MAPE(平均绝对百分比误差)相比?【英文标题】:why im getting high MAE(mean absolute error) and MSE(mean square erro) compared to MAPE (mean absolute persentage error)?为什么我得到高 MAE(平均绝对误差)和 MSE(均方误差)与 MAPE(平均绝对百分比误差)相比? 【发布时间】:2019-07-10 06:34:43 【问题描述】:

大家我是数据科学的新手。我正在使用支持向量回归解决回归问题。使用网格搜索调整 SVM 参数后,我得到了 2.6% 的 MAPE,但我的 MAE 和 MSE 仍然很高。

我已经为 mape 使用了一个用户定义的函数。

from sklearn.metrics import mean_absolute_error 
from sklearn.metrics import mean_squared_error
from sklearn.preprocessing import Normalizer
import matplotlib.pyplot as plt
def mean_absolute_percentage_error(y_true, y_pred): 
    y_true, y_pred = np.array(y_true), np.array(y_pred)
    return np.mean(np.abs((y_true - y_pred) / y_true)) * 100

import pandas as pd
from sklearn import preprocessing

features=pd.read_csv('selectedData.csv')
import numpy as np
from scipy import stats
print(features.shape)
features=features[(np.abs(stats.zscore(features)) < 3).all(axis=1)]
target = features['SYSLoad']
features= features.drop('SYSLoad', axis = 1)
names=list(features)

for i in names:
    x=features[[i]].values.astype(float)
    min_max_scaler = preprocessing.MinMaxScaler()
    x_scaled = min_max_scaler.fit_transform(x)
    features[i]=x_scaled

选择我们想要预测的目标变量

寻找特征小鬼

import numpy as np
from sklearn.model_selection import train_test_split
train_input, test_input, train_target, test_target = 
train_test_split(features, target, test_size = 0.25, random_state = 42)
trans=Normalizer().fit(train_input);
train_input=Normalizer().fit_transform(train_input);
test_input=trans.fit_transform(test_input);

n=test_target.values;
test_targ=pd.DataFrame(n);

from sklearn.svm import SVR
svr_rbf = SVR(kernel='poly', C=10, epsilon=10,gamma=10)
y_rbf = svr_rbf.fit(train_input, train_target);
predicted=y_rbf.predict(test_input);
plt.figure
plt.xlim(20,100);
print('Total Days For training',len(train_input)); print('Total Days For 
Testing',len(test_input))
plt.ylabel('Load(MW) Prediction 3 '); plt.xlabel('Days'); 
plt.plot(test_targ,'-b',label='Actual'); plt.plot(predicted,'-r',label='RBF 
kernel ');
plt.gca().legend(('Actual','RBF'))
plt.title('SVM')
plt.show();



MAPE=mean_absolute_percentage_error(test_target,predicted);
print(MAPE);
mae=mean_absolute_error(test_targ,predicted)
mse=mean_squared_error(test_targ, predicted)
print(mae);
print(mse);

我得到 MAPE = 2.56,MAE =400,MSE=437696。 arent mae 和 mse 是巨大的。为什么会这样?我的目标变量 sysload 包含 10000 范围内的值

【问题讨论】:

【参考方案1】:

由于您没有提供数据,我们无法重现您的示例。布看看这个

y_true = [3, -0.5, 2, 7]
y_pred = [2.5, 0.0, 2, 8]

你的代码

def mean_absolute_percentage_error(y_true, y_pred): 
    y_true, y_pred = np.array(y_true), np.array(y_pred)
    return np.mean(np.abs((y_true - y_pred) / y_true)) * 100

输出

32.73809523809524

比较一下

mean_squared_error(y_true, y_pred)
0.375

非常接近。特征选择可能有问题。

【讨论】:

所以 32.2 意味着 32%?这是指向数据的链接drive.google.com/open?id=1o8VphpHZ17io5mTD2sj4GchK4HeMwGvY 是的,百分比。稍后再看看。

以上是关于为啥我得到高 MAE(平均绝对误差)和 MSE(均方误差)与 MAPE(平均绝对百分比误差)相比?的主要内容,如果未能解决你的问题,请参考以下文章

[人工智能-深度学习-9]:神经网络基础 - 常见loss损失函数之均分误差MSE绝对值误差MAE平滑平均绝对误差Huber

为啥与 MSE 相比,使用 MAE 标准训练随机森林回归器如此缓慢?

Python计算统计分析MSE RMSE MAEr2

回归任务中的评价指标之MSE,RMSE,MAE,R-Squared,MAPE

计算 DNNRegressor 模型的 MAE、MSE 和 R2 指标

在 Python 中使用 sklearn 使用 MAE 训练线性模型