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

Python:我们如何匹配回归模型的预测值和真值,python,python-3.x,pandas,numpy,random-forest,Python,Python 3.x,Pandas,Numpy,Random Forest,在使用的Python中的randomforestrestregressor拟合模型以预测真值后,我们尝试在同一个图形上绘制预测值和真值(单击链接下载完整的CSV-数据集,格式如下所示 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 p

在使用的
Python
中的
randomforestrestregressor
拟合模型以预测真值后,我们尝试在同一个图形上绘制预测值和真值(单击链接下载完整的
CSV
-数据集,格式如下所示

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)
我们希望(在同一图表中)将基本事实(
时间
作为x轴,将
Y
的值作为Y轴

ax.plot(df['time'].values, modelPred_test)
我们得到以下错误

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

ValueError: x and y must have same first dimension
这意味着我们的预测值比数据集中的时间戳要少
打印(df['time'].values.shape)
打印(modelPred\u test.shape)
-并输出
(258523,)
(103410,)
分别。我们如何匹配我的哪些时间值与预测值相对应,然后我可以使用绘图命令的时间值子集?

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

train\u index,test\u index=train\u test\u split(df.index,test\u size=0.40)

然后
X\u train=X[列车索引]
,等等


然后,您可以通过ax.plot(df['time'][test\u index].values,modelPred\u test[df.index==test\u index])绘制结果。您必须按照以下方式设置数据

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
的预测值进行相同的绘图。希望这有帮助。

您可以将
np.arrage(df.shape[0])
传递到
train\u test\u split
并使用“test”部分作为
df['time']的索引。绘图中的值
。您可以尝试
X\u train=df.X[train\u index]。值
等吗。(与你刚才提到的精神相同?)