web-dev-qa-db-ja.com

scikit-learn:二乗平均平方根誤差(RMSE)をパーセンテージで計算する方法は?

次の形式のデータセット(このリンクにあります https://drive.google.com/open?id=0B2Iv8dfU4fTUY2ltNGVkMG05V )があります。

_ 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の予測を実行したい(つまり、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の値をパーセントで表示する方法はありますか?たとえば、予測のこのパーセントは正しいが、これはかなり間違っていると言います。

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_関数は 単一の値 のみを返すようです。

RMSEをパーセントで表示したり、MAPEsklearnに対してPythonを使用して計算したりする方法はありますか?

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

This StackOverflowの回答は、有効な実装を提供します。

3
Imran