我有一个数据集(在此链接中找到: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进行预测(根据前100个滚动的X值预测当前的Y值)。为此,我使用以下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的值表示为百分比?例如,说这个预测的百分之多少是正确的,百分之多少是错误的。
在最近版本的sklearn中,有一个check_array函数用于计算平均绝对百分比误差(MAPE),但是当我像下面这样尝试时,它似乎不能按照以前的版本那样工作。
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
或使用sklearn
计算MAPE
?该问题是关于Python
的IT技术相关内容。
0.064
,但我无法确定这是误差还是准确度。 - Desta Haileselassie Hagos