2017-08-02 33 views
1

我們試圖在擬合模型以預測真值之後在同一圖上繪製預測值和真值,其中使用Python中的RandomForestRegressorthree column dataset(點擊鏈接下載完整CSV -dataset格式化爲以下Python:我們如何匹配迴歸模型的預測值和真值的值

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爲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 

這意味着我們有較少的預測值比我們有時間標記在我們的數據集。爲了驗證這一點,我做 print(df['time'].values.shape)print(modelPred_test.shape) - 它分別輸出(258523,)(103410,)。我們如何匹配哪些時間值對應於預測值,然後我可以使用我的繪圖命令的時間值的子集?

+0

您可以將'np.arrage(df.shape [0])'傳遞給'train_test_split',並使用「test」部分作爲'df ['time']。values'的索引。 –

回答

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預測值做同樣的情節。希望這可以幫助。

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])繪製的結果。

+0

你可以試試'X_train = df.X [train_index] .values'等等(與你剛剛提到的相同的精神?) –