Kerasでこのメトリックを実装するにはどうすればよいですか?下の私のコードは間違った結果を与えます!私はEXPを経由して、前のログ(X + 1)の変換を元に戻すよ 注(X) - 1、また、負の予測は0にクリップされていますKerasカスタムRMSLEメトリック
def 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)
比較のために、ここでは標準numpyの実装があります:
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
私は間違っていますか?ありがとう!
EDIT:設定axis=0
は、正しい値に非常に近い値を示しているようですが、私が使用しているコードはすべてaxis=-1
と思われます。
ありがとうございますが、exp(x)-1変換はどうですか? – Fernando
@Fernando私はあなたがその変換が必要だとは思わないがhttps://www.kaggle.com/wiki/RootMeanSquaredLogarithmicError – LYu
私のモデルはlog(x + 1)に適合しているので、私はexp(x ) - 1を入力し、RMSLEを適用します。 – Fernando