【问题标题】:scikit-learn: How to calculate root-mean-square error (RMSE) in percentage?scikit-learn:如何以百分比计算均方根误差(RMSE)?
【发布时间】:2017-12-23 17:10:08
【问题描述】:

我有一个以下格式的数据集(可在此链接中找到:https://drive.google.com/open?id=0B2Iv8dfU4fTUY2ltNGVkMG05V00)。

 time     X   Y
0.000543  0  10
0.000575  0  10
0.041324  1  10
0.041331  2  10
0.041336  3  10
0.04134   4  10
  ...
9.987735  55 239
9.987739  56 239
9.987744  57 239
9.987749  58 239
9.987938  59 239

我的数据集中的第三列 (Y) 是我的真实值 - 这就是我想要预测(估计)的值。我想做一个Y的预测(即根据X的前100个滚动值预测Y的当前值。为此,我有以下python使用random forest regression model的脚本工作。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""

@author: deshag
"""

import pandas as pd
import numpy as np
from io import StringIO
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_squared_error
from math import sqrt



df = pd.read_csv('estimated_pred.csv')

for i in range(1,100):
    df['X_t'+str(i)] = df['X'].shift(i)

print(df)

df.dropna(inplace=True)


X=pd.DataFrame({ 'X_%d'%i : df['X'].shift(i) for i in range(100)}).apply(np.nan_to_num, axis=0).values


y = df['Y'].values


reg = RandomForestRegressor(criterion='mse')
reg.fit(X,y)
modelPred = reg.predict(X)
print(modelPred)

print("Number of predictions:",len(modelPred))

meanSquaredError=mean_squared_error(y, modelPred)
print("MSE:", meanSquaredError)
rootMeanSquaredError = sqrt(meanSquaredError)
print("RMSE:", rootMeanSquaredError)

最后,我测量了均方根误差 (RMSE),得到了 RMSE19.57。根据我从文档中读到的内容,它说平方误差与响应具有相同的单位。有没有办法以百分比表示RMSE 的值?例如,说这个百分比的预测是正确的,而这个百分比是错误的。

在最新版本的sklearn 中有一个check_array 函数用于计算mean absolute percentage error (MAPE),但是当我尝试如下时,它的工作方式似乎与以前的版本不同。

import numpy as np
from sklearn.utils import check_array

def calculate_mape(y_true, y_pred): 
y_true, y_pred = check_array(y_true, y_pred)

    return np.mean(np.abs((y_true - y_pred) / y_true)) * 100

calculate_mape(y, modelPred)

这将返回一个错误:ValueError: not enough values to unpack (expected 2, got 1)。而这似乎是最近版本中的check_array 函数只返回一个single value,与之前的版本不同。

有没有办法以百分比表示RMSE 或使用sklearnPython 计算MAPE

【问题讨论】:

    标签: python python-3.x pandas scikit-learn random-forest


    【解决方案1】:

    您的calculate_mape 实现不起作用,因为您期待check_arrays 函数,该函数已在sklearn 0.16 中删除。 check_array 不是你想要的。

    This StackOverflow 的回答给出了一个可行的实现。

    【讨论】:

    • 为什么投反对票?在我发布我的问题之前我已经看到了,但也没有为我解决。
    • 别问我,我不是那个投反对票的人!你能解释一下链接的答案是如何不起作用的吗?你有错误吗?
    • 我做了一些更改,重新运行,现在 MAPE 的值为 0.064,但我不知道这是错误还是准确性。
    • 这是错误,在链接的实现中也是1。如果您希望它像以前一样从 100 中取出,则将结果乘以 100。
    • 是的,我相信是这样,而且语法改变应该没问题。
    猜你喜欢
    • 2018-12-27
    • 2020-03-29
    • 1970-01-01
    • 2019-08-14
    • 2020-05-28
    • 1970-01-01
    • 2020-12-25
    • 2017-03-20
    • 2017-06-29
    相关资源
    最近更新 更多