Я хочу обучить последовательную сеть (проблема регрессии). Когда я запускаю следующий код
#---------------------------------------
# Define x and y data
data = cleaned_df.values
X = data[:,1:184]
y = data[:,0]
#---------------------------------------
# MinMax Scaling for input data
scalar = StandardScaler()
scalar.fit(X)
X = scalar.transform(X)
y = y.reshape(-1,1)
y_scalar = StandardScaler()
y_scalar.fit(y)
y = y_scalar.transform(y)
#---------------------------------------
# Split data in train and validation set
X_train, X_validierung, y_train, y_validierung = train_test_split(X, y, test_size=0.2, random_state=2121)
y_scalar.inverse_transform(y_train)[:5]
#---------------------------------------
# Define model
def create_model():
# create model
model = Sequential()
model.add(Dense(80, input_dim=X.shape[1], activation='relu'))
model.add(Dense(80, activation='relu'))
model.add(Dense(80, activation='relu'))
model.add(Dense(80, activation='relu'))
model.add(Dense(80, activation='relu'))
model.add(Dense(80, activation='relu'))
model.add(Dense(80, activation='relu'))
model.add(Dense(80, activation='relu'))
model.add(Dense(80, activation='relu'))
model.add(Dense(1, activation='linear'))
# Compile model
model.compile(optimizer ='adam', loss = 'mean_squared_error', metrics =[metrics.mae])
return model
#---------------------------------------
# create and fit model to data
model = create_model()
model.fit(x=X_train, y=y_train, batch_size=10, verbose=0, epochs=100)
#---------------------------------------
# predict values
pred = model.predict(X_train)
pred = y_scalar.inverse_transform(pred)
pred[:5]
, я получаю вывод
array([[296920.12],
[174944.62],
[184529.23],
[183980.64],
[736344.8 ]], dtype=float32)
, который - для очень простой модели - довольно хорош. Исходные данные выглядят следующим образом:
array([[303477.],
[181134.],
[187500.],
[190000.],
[745000.]])
Теперь я хочу сделать резюме KFold со следующим кодом
... (above same steps as before)
#---------------------------------------
# Define model
def create_model(units):
# create model
model = Sequential()
model.add(Dense(units, input_dim=X_train.shape[1]))
model.add(Dense(units, activation='relu'))
model.add(Dense(units, activation='relu'))
model.add(Dense(units, activation='relu'))
model.add(Dense(units, activation='relu'))
model.add(Dense(units, activation='relu'))
model.add(Dense(units, activation='relu'))
model.add(Dense(units, activation='relu'))
model.add(Dense(units, activation='relu'))
model.add(Dense(1, activation='linear'))
# Compile model
model.compile(optimizer ='adam', loss = 'mean_squared_error', metrics =[metrics.mae])
return model
#---------------------------------------
# Define param for GridSearch
units = [80]
param_grid = dict(units=units)
#---------------------------------------
# Create model
model = KerasClassifier(build_fn=create_model, epochs=100, batch_size=10, verbose=0)
grid = GridSearchCV(estimator=model, param_grid=param_grid, cv=5, verbose=2, scoring='neg_mean_squared_error', n_jobs=6)
#---------------------------------------
# Fit data
grid_result = grid.fit(X_train, y_train)
, который генерирует мне следующий вывод
array([[58500.],
[58500.],
[58500.],
[58500.],
[58500.]])
Как видите, выход является постоянным значением для каждого входа.