Bu ölçümü Keras'ta nasıl uygularım? Aşağıdaki kodum yanlış sonuç veriyor! Ben exp yoluyla (x + 1) dönüşüm (x) önceki günlüğünü geri almayı ediyorum Not - 1, aynı zamanda olumsuz tahminler 0'a kırpılır:Keras özel RMSLE metrik
Karşılaştırma içindef rmsle_cust(y_true, y_pred):
first_log = K.clip(K.exp(y_pred) - 1.0, 0, None)
second_log = K.clip(K.exp(y_true) - 1.0, 0, None)
return K.sqrt(K.mean(K.square(K.log(first_log + 1.) - K.log(second_log + 1.)), axis=-1)
, burada standart numpy uygulama görebilirsiniz:
def rmsle_cust_py(y, y_pred, **kwargs):
# undo 1 + log
y = np.exp(y) - 1
y_pred = np.exp(y_pred) - 1
y_pred[y_pred < 0] = 0.0
to_sum = [(math.log(y_pred[i] + 1) - math.log(y[i] + 1)) ** 2.0 for i,pred in enumerate(y_pred)]
return (sum(to_sum) * (1.0/len(y))) ** 0.5
Neyi yanlış yapıyorum? Teşekkürler!
DÜZENLEME: Ayar axis=0
, doğru olana çok yakın bir değer veriyor gibi görünüyor, ancak göründüğüm tüm kodlar axis=-1
kullanıyor olduğundan emin değilim.
Teşekkürler, ama exp (x) -1 dönüşümü ne olacak? – Fernando
@Fernando Bu dönüşüme ihtiyacınız olduğunu düşünmüyorum, ancak https://www.kaggle.com/wiki/RootMeanSquaredLogarithmicError – LYu
Modelimin log'a (x + 1) uygun olduğundan ihtiyacım var, bu yüzden exp (x + 1) ile geri dönmem gerekiyor) - 1, daha sonra RMSLE'yi uygulayın. – Fernando