今天发生了奇怪的事情。我正在对8个类别运行RandomForestRegressor
。首先,我尝试循环绘制y_test
的函数图和我的预测,但是随后我注意到那些图与脚本中其他地方的结果不一致,因此尝试将函数转换为简单脚本。函数plus循环如下所示:
def plotModelResults(model, X_train=X_train, X_test=X_test, plot_intervals=False, plot_anomalies=False):
model.fit(X_train.values,y_train.values.ravel())
prediction = model.predict(X_test.values)
axs[i].plot(prediction, "g", label="prediction", linewidth=2.0)
axs[i].plot(y_test.values.ravel(), label="actual", linewidth=2.0)
axs[i].legend(loc="best")
axs[i].set_title('{}'.format(team))
axs[i].grid(True)
没什么好看的。它像这样循环:
nplots=df['Equipos'].nunique()
f, axs = plt.subplots(figsize=(25,5),nrows=1, ncols=nplots, sharey=True )
dicc=dict()
for i,team in enumerate(df['Equipos'].unique()):
aux=df.loc[df['Equipos']==team]
X=aux.drop(columns=['Cantidad_Vendida','Equipos']).copy()
y=aux[['Cantidad_Vendida']].copy()
X_train, X_test, y_train, y_test = timeseries_train_test_split(X, y, test_size=0.1)
plt.tight_layout()
plotModelResults(RandomForestRegressor(n_estimators=100, random_state=42))
此脚本的第一个图形如下:
然后,我运行这个:
nplots=len(df['Equipos'].unique())
f, axs = plt.subplots(figsize=(25,5),nrows=1, ncols=nplots, sharey=True )
for i,team in enumerate(df['Equipos'].unique()):
aux=df.loc[df['Equipos']==team]
X=aux.drop(columns=['Fecha_Venta','Cantidad_Vendida','Equipos']).copy()
y=aux[['Cantidad_Vendida']].copy()
X_train, X_test, y_train, y_test = timeseries_train_test_split(X, y, test_size=0.1)
rf=RandomForestRegressor(n_estimators=100, random_state=42)
#Fiteamos modelo
rf.fit(X_train.values,y_train.values.ravel())
prediction = rf.predict(X_test.values)
axs[i].plot(prediction, "g", label="prediction", linewidth=2.0)
#Ploteamos valores de test
axs[i].plot(y_test.values.ravel(), label="actual", linewidth=2.0)
axs[i].legend(loc="best")
axs[i].set_title('{}'.format(team))
axs[i].grid(True)
plt.tight_layout()
其第一张图看起来像这样:
据我所知,这两个脚本是等效的,所以我不知道为什么这些图不同。有什么想法吗?