как получить доступ к метрикам из истории - PullRequest
0 голосов
/ 24 октября 2019

Для проблемы регрессии я хочу сравнить некоторые метрики, но я могу получить только 1001 * из истории, которая не имеет никакого смысла для целей регрессии. Как я могу получить другие метрики, такие как mean_squared_error и т. Д.

create_model(...)
    input_layer = ...
    output_laye = ...
    model = Model(input_layer, output_layer)
    model.compile(loss='mean_squared_error', optimizer=optimizer, metrics=['accuracy'])
    return model

model = KerasRegressor(build_fn=create_model, verbose=0)

batch_size = [1, 2]
epochs = [1, 2]
optimizer = ['Adam', 'sgd']    
param_grid = dict(batch_size=batch_size
                     , optimizer = optimizer
                     )

grid_obj  = RandomizedSearchCV(estimator=model 
                    , param_grid=hypparas
                    , n_jobs=1
                    , cv = 3
                    , scoring = ['explained_variance', 'neg_mean_squared_error', 'r2']
                    , refit = 'neg_mean_squared_error'
                    , return_train_score=True
                    , verbose = 2
                    )

grid_result = grid_obj.fit(X_train1, y_train1)

X_train1, X_val1, y_train1, y_val1 = 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, y_train1
                        , validation_data=(X_val1, y_val1)
                        )

print(history.history.keys())
> dict_keys(['val_loss', 'val_accuracy', 'loss', 'accuracy'])

Я видел https://stackoverflow.com/a/50137577/6761328, например,

history.history['accuracy']

, который работает, но я могу 't access mean_squared_error или что-то еще:

history.history['neg_mean_squared_error']
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-473-eb96973bf014> in <module>
----> 1 history.history['neg_mean_squared_error']

KeyError: 'neg_mean_squared_error'

Этот вопрос, наконец, является продолжением Как сравнивать различные метрики? , поскольку я думаю, что этот вопрос является ответом для другогоодин.

1 Ответ

2 голосов
/ 25 октября 2019

В автономных Keras (не уверен для оболочки Scikit-Learn), history.history['loss'] (или val_loss соответственно для набора проверки) будет делать эту работу.

Здесь, 'loss' и'val_loss' являются клавишами ;дайте

print(history.history.keys())

, чтобы увидеть, какие ключи доступны в вашем случае, и вы найдете среди них требуемые для потери (могут даже быть одинаковыми, то есть 'loss' и 'val_loss').

В качестве примечания следует полностью исключить metrics=['accuracy'] из компиляции модели - как вы правильно заметили, точность не имеет смысла в настройках регрессии (вы можете проверить Какая функция определяет точность в Керасе, когдапотеря - среднеквадратическая ошибка (MSE)? ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...