Понимание потерь при обучении-валидации: оба go вместе плавно в одном сценарии; потеря проверки увеличивается через некоторое время в другом - PullRequest
0 голосов
/ 06 февраля 2020

Я имею дело с проблемой многомерной регрессии с небольшим размером выборки данных (n = 71) с 5 независимыми переменными и 1 выходной переменной. Моя конечная цель - создать модель, которая дает хороший коэффициент корреляции ( r ) между y_test и y_predicted значениями.

Я впервые попробовал Подгоняя модель KerasRegressor к необработанным данным, и, к удивлению, я получил очень плавные потери при обучении и проверке (см. изображение 1; потеря при проверке очень быстро сходится к потере при обучении и уменьшается вместе с ней), но значение r было очень низкий (менее 0,40). Это поведение выглядело слишком подозрительно, и я нормализовал наборы входных и выходных данных. В этом сценарии потери проверки увеличились после определенного количества эпох (см. Изображение 2), а r снизился до 0,30.

Модель ведет себя таким образом только из-за небольшого размера выборки или здесь что-то мне не хватает? Я был бы очень признателен за некоторые предложения о том, как лучше понять проблему и улучшить подгонку.

from keras.models import Sequential
from keras.layers import Dense
from keras.wrappers.scikit_learn import KerasClassifier
from keras.wrappers.scikit_learn import KerasRegressor
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import KFold
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
def build_regressor():
    regressor = Sequential()
    regressor.add(Dense(10, input_dim = 5, activation = 'relu', kernel_initializer="normal"))
    regressor.add(Dense(5, activation = 'relu', kernel_initializer = 'normal'))
    regressor.add(Dense(1, activation = 'linear', kernel_initializer = 'normal'))
    regressor.compile(optimizer = 'rmsprop', loss = 'mean_squared_error', metrics = ['mae'])
    return regressor

estimator = KerasRegressor(build_fn = build_regressor, epochs=5338, batch_size=60, verbose = 1)
hist = estimator.fit(X_train, y_train, validation_data = [X_test, y_test])
y_pred = estimator.predict(X_test)

Image1 - Raw Data Image2 - Normalized Data

...