2017-07-18 14 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 

私のデータセットの3番目の列(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のパーセンテージですか?たとえば、予測のこのパーセントは正しく、これはかなり間違っています。

最近のバージョンsklearnにはmean absolute percentage error (MAPE)を計算するための関数check_arrayがありますが、以下のように試してみると、以前のバージョンと同じようには動作しません。

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をパーセンテージで表示する方法はありますか?をPythonとして使用してMAPEを計算する方法はありますか?

答えて

2

check_arrays関数が、sklearn 0.16で削除されていると予想しているため、calculate_mapeの実装は機能しません。 check_arrayはあなたが望むものではありません。

This StackOverflow答えは、動作する実装を提供します。

+0

なぜダウン投票ですか?私は私の質問を投稿する前にそれを見たが、私のためにうまくいっていない。 –

+1

私に尋ねないでください、私はダウン投票していません!リンクされた答えがどう働いていないのか説明できますか?間違いはありますか? – Imran

+0

私はいくつかの変更を行い、再実行してMAPEの値を '0.064'にしましたが、これがエラーか精度かはわかりません。 –

関連する問題