当运行与脚本或函数相同的行时,模型结果将发生巨大变化

时间:2018-11-22 20:40:55

标签: python pandas scikit-learn

今天发生了奇怪的事情。我正在对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))

此脚本的第一个图形如下:

Graph 1

然后,我运行这个:

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()

其第一张图看起来像这样:

Graph 2

据我所知,这两个脚本是等效的,所以我不知道为什么这些图不同。有什么想法吗?

0 个答案:

没有答案