Я имею дело с проблемой многомерной регрессии с небольшим размером выборки данных (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)
![Image2 - Normalized Data](https://i.stack.imgur.com/VATaw.png)