2017-07-18 498 views
0

我有一個數據集(可在此鏈接中找到:https://drive.google.com/open?id=0B2Iv8dfU4fTUY2ltNGVkMG05V00)以下格式。scikit-learn:如何以百分比計算均方根誤差(RMSE)?

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當前值。對於這一點,我已經使用random forest regression model以下python腳本的工作。

#!/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的百分比是多少?例如,說這個百分比的預測是正確的,這是多麼的錯誤。

check_arraycheck_array函數用於計算mean absolute percentage error (MAPE)在最近的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)。這似乎是最近版本中的check_array函數只返回single value,與以前的版本不同。

有沒有什麼辦法來提供RMSE的百分比或計算MAPE使用sklearnPython

回答

2

您的calculate_mape的實施不起作用,因爲您期待check_arrays函數,該函數在sklearn 0.16中被刪除。 check_array不是你想要的。

This StackOverflow答案給出了一個工作實現。

+0

爲什麼投票呢?我已經看到,在我發佈我的問題之前,但也沒有爲我工作。 –

+1

不要問我,我不是一個低調!你能解釋鏈接的答案不起作用嗎?你有錯誤嗎? – Imran

+0

我做了一些改動,重新運行,現在得到了'0.064'的MAPE值,但是,我不知道這是錯誤還是準確性。 –