我有一個數據集(可在此鏈接中找到: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),並得到了RMSE
的19.57
。從我從文檔中讀到的內容,它說平方誤差與響應具有相同的單位。是否有任何方法來表示該值RMSE
的百分比是多少?例如,說這個百分比的預測是正確的,這是多麼的錯誤。
check_array
check_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
使用sklearn
的Python
?
爲什麼投票呢?我已經看到,在我發佈我的問題之前,但也沒有爲我工作。 –
不要問我,我不是一個低調!你能解釋鏈接的答案不起作用嗎?你有錯誤嗎? – Imran
我做了一些改動,重新運行,現在得到了'0.064'的MAPE值,但是,我不知道這是錯誤還是準確性。 –