Python:我们如何匹配回归模型的预测值和真值的值

时间:2017-08-02 17:12:16

标签: python python-3.x pandas numpy random-forest

我们尝试在拟合模型后使用RandomForestRegressor PythonCSV来预测真值,然后在同一图表上绘制预测值和真值。链接下载完整的t_stamp,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 0.041345,5,10 0.04135,6,10 0.041354,7,10 - 数据集,格式如下

import pandas as pd
import numpy as np
import glob, os
from io import StringIO
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_squared_error
from sklearn.metrics import accuracy_score
import math
from math import sqrt
from sklearn.cross_validation import train_test_split

df = pd.concat(map(pd.read_csv, glob.glob(os.path.join('', "data*.csv"))))

for i in range(1,10):
    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(10)}).apply(np.nan_to_num, axis=0).values
y = df['Y'].values

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.40)


reg = RandomForestRegressor(criterion='mse')
reg.fit(X_train,y_train)


modelPred_test = reg.predict(X_test)

print(modelPred_test)

以下是我们如何进行预测。

fig, ax = plt.subplots()
ax.plot(df['time'].values, df['Y'].values)

为了进行比较,我们希望在预测之前和预测之后生成图。对于真值,我们尝试了

time

我们希望绘制(在同一图表中)基础事实(Y为x轴,ax.plot(df['time'].values, modelPred_test) 为y轴。当我们做

    raise ValueError("x and y must have same first dimension")

ValueError: x and y must have same first dimension

我们收到以下错误。

print(df['time'].values.shape)

这意味着我们的预测值少于数据集中的时间戳。为了证实这一点,我做到了 print(modelPred_test.shape)(258523,) - 分别输出(103410,)ProductItem。我们如何匹配我的时间值对应于预测值,然后我可以使用我的绘图命令的时间值的子集?

2 个答案:

答案 0 :(得分:1)

您必须像以下一样设置数据。

X = df.drop('Y', axis=1)
y = df['Y']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.40)
X_train = X_train.drop('time', axis=1)
X_test = X_test.drop('time', axis=1)

然后对数据集进行排序

index_values=range(0,len(y_test))
y_test.sort_index(inplace=True)
X_test.sort_index(inplace=True)
modelPred_test = reg.predict(X_test)
ax.plot(pd.Series(index_values), y_test.values)

最后,对y的预测值执行相同的绘图。希望这会有所帮助。

答案 1 :(得分:0)

您需要跟踪培训和测试数据集的索引。例如,您可以定义

train_index, test_index = train_test_split(df.index, test_size=0.40)

然后X_train = X[train_index]

然后,您可以通过ax.plot(df['time'][test_index].values, modelPred_test[df.index == test_index])绘制结果。