scikit-learn:如何计算百分比的均方根误差(RMSE)?

时间:2017-07-18 17:27:45

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

我有以下格式的数据集(在此链接中找到: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进行预测(即根据Y之前的100个滚动值预测X的当前值。为此,我有以下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)并得到了RMSE 19.57。根据我从文档中读到的内容,它表示平方误差与响应具有相同的单位。有没有办法以百分比形式显示RMSE的价值?例如,要说这个预测百分比是正确的,这是错误的。

check_array的最新版本中有一个用于计算mean absolute percentage error (MAPE)的{​​{1}}函数,但在我尝试时,它似乎与上一版本的工作方式不同如下所示。

sklearn

这会返回错误: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)函数仅返回single value,与先前版本不同。

有没有办法以check_array的百分比显示RMSE或使用MAPE sklearn计算Python

1 个答案:

答案 0 :(得分:3)

IDN_OAUTH2_ACCESS_TOKEN的实施无效,因为您期望在calculate_mape中移除check_arrays功能。 sklearn 0.16不是你想要的。

This StackOverflow回答提供了一个有效的实现。