Я пытаюсь оценить свою (игрушечную) модель, поэтому я хочу изучить 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](https://i.stack.imgur.com/m9atn.png)
На оси 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](https://i.stack.imgur.com/2S3q7.png)
Вероятно, большинство из вас непосредственно увидят, чтоони концептуально разные (как они, очевидно), но я стараюсь различать их в целом. Таким образом, у меня есть следующие вопросы:
- В чем разница между ними?
- Почему счет отличается?
- Почему число
epochs
разные соотв. почему я не могу указать количество эпох для learning_curve
? - Почему они ведут себя совершенно иначе?