Чем .history [] отличается от learning_curve ()? - PullRequest
0 голосов
/ 30 октября 2019

Я пытаюсь оценить свою (игрушечную) модель, поэтому я хочу изучить history и learning_curve. Я заметил, что соответствующий результат отличается:

Определение модели:

def create_model(activation='relu'
                 ...
                 model.compile(loss = ['mean_squared_error'], optimizer = 'Adam', metrics = ['mean_squared_error'])
model = KerasRegressor(build_fn=create_model, verbose=0)
hypparas = dict(epochs = ....)
tscv = TimeSeriesSplit(n_splits = 5)

grid_obj  = RandomizedSearchCV(estimator=model 
                 , param_distributions=hypparas 
                 , n_jobs=n_jobs
                 , n_iter=10
                 , cv = tscv
                 , scoring = ['neg_mean_squared_error']
                 , refit = ['neg_mean_squared_error']     
                 , return_train_score=True
                 , verbose = 2
                 )

grid_result = grid_obj.fit(X_train1, y_train1, callbacks = [time_callback])
X_train1_be, X_val1_be, y_train1_be, y_val1_be = train_test_split(X_train1, y_train1, test_size=0.2, shuffle=False)
grid_best = grid_result.best_estimator_
history = grid_best.fit(X_train1_be, y_train1_be
                        , callbacks = [time_callback]
                        , validation_data=(X_val1_be, y_val1_be)
                        , epochs = max(epochs)
                        )

График потерь1:

loss = history.history['loss']
val_loss = history.history['val_loss']
nb_epochs = range(1, len(loss)+1)

fig, ax = plt.subplots(1, 1, figsize=(21,7))
fig.suptitle('Best estimator trained on train_be and val_be', fontsize=20)
plt.style.use('seaborn-white')

ax.plot(nb_epochs, loss, '-', label='Training Loss', color = 'green', linewidth=2.55)
ax.plot(nb_epochs, loss, 'bo', label='', color = 'darkgreen', linewidth=5)

ax.plot(nb_epochs, val_loss, '-', label='Validation Loss', linewidth=2.55, color = 'orange')
ax.plot(nb_epochs, val_loss, 'bo', label='', linewidth=5, color = 'darkorange')
plot_df = pd.DataFrame({'x': nb_epochs, 'y': val_loss})

ax.legend()
plt.style.use('seaborn-white')
ax.set_xlabel('Epochs')
ax.set_ylabel('Loss')
ax.grid(linestyle='-', linewidth='0.5', color='grey')
ax.grid(linestyle='-', linewidth='0.5', color='grey')

plt.show();

, что приводит к History-plot

На оси X даны «эпохи». Тогда есть этот код:

train_sizes, train_scores, test_scores = learning_curve(grid_best
                                                        , X_train1_be
                                                        , y_train1_be
                                                        , n_jobs=n_jobs
                                                        , scoring = 'neg_mean_squared_error'
                                                        , cv=3
                                                        , verbose=tscv
                                                        , shuffle = False
                                                        )

train_scores_mean = np.mean(train_scores, axis=1)
train_scores_std = np.std(train_scores, axis=1)
test_scores_mean = np.mean(test_scores, axis=1)
test_scores_std = np.std(test_scores, axis=1)

fig, ax = plt.subplots(1, 1, figsize=(18,9))
plt.style.use('seaborn-white')
plt.title("Learning curve on train_be and val_be")
plt.xlabel("Epochs")
plt.ylabel("Score")
plt.gca().invert_yaxis()    
plt.grid()

plt.fill_between(train_sizes, train_scores_mean - train_scores_std, train_scores_mean + train_scores_std, alpha=0.1, color="r")
plt.fill_between(train_sizes, test_scores_mean - test_scores_std, test_scores_mean + test_scores_std, alpha=0.1, color="g")

plt.plot(train_sizes, train_scores_mean, 'o-', color="r", label="Training score")
plt.plot(train_sizes, test_scores_mean, 'o-', color="g", label="Cross-validation score")

ax.legend()
ax.grid(linestyle='-', linewidth='0.5', color='grey')
ax.grid(linestyle='-', linewidth='0.5', color='grey')
plt.show();

, что приводит к потере участка 2:

learning_curve

Вероятно, большинство из вас непосредственно увидят, чтоони концептуально разные (как они, очевидно), но я стараюсь различать их в целом. Таким образом, у меня есть следующие вопросы:

  • В чем разница между ними?
  • Почему счет отличается?
  • Почему число epochsразные соотв. почему я не могу указать количество эпох для learning_curve?
  • Почему они ведут себя совершенно иначе?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...