Я пытаюсь добавить процент средней абсолютной ошибки (pmae) в качестве пользовательской метрики в кератах.Это определяется как (MAE, деленное на среднее абсолютное значение y, умноженное на 100).Я попытался:
def pmae(y_true,y_pred):
return K.mean(K.abs(y_pred - y_true)) / K.mean(K.abs(y_true)) * 100
...
model.compile(loss='mse', optimizer=Adam(),metrics=[pmae])
, который работает, но значение на много порядков больше (когда я смотрю на model.history.history.pmae
)
Рабочая версия NumPy (на тестовом образце)это:
y_pred = model.predict(X_test)
pmae = abs(y_pred - y_test).mean() / abs(y_true).mean() * 100
Я также пытался добавить , axis=-1
к вызовам K.mean()
, но без улучшений (как это предлагается в других ответах на стек).Кто-нибудь знает, что не так?
Ресурсы
- На сайте keras в качестве примера приводится среднее значение y:
import keras.backend as K
def mean_pred(y_true, y_pred):
return K.mean(y_pred)
model.compile(optimizer='rmsprop',
loss='binary_crossentropy',
metrics=['accuracy', mean_pred])
Другие ответили на stackoverflow о других пользовательских метриках (например,
Keras, пользовательская метрика RMSLE и
, как реализовать пользовательскую метрику в кератах? ), но ответы там не помогли мнес расчетом pmae.