मैं केरस में इस मीट्रिक को कैसे कार्यान्वित करूं? नीचे मेरा कोड गलत परिणाम देता है! नोट है कि मैं एक पिछले लॉग (x + 1) exp के माध्यम से परिवर्तन (एक्स) नाश कर रहा हूँ - 1, भी नकारात्मक भविष्यवाणियों को 0 पर काटा जाता है:केरास कस्टम आरएमएसएल मीट्रिक
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
मैं क्या गलत कर रहा हूं? धन्यवाद!
संपादित करें: axis=0
सेट करना सही मान के बहुत करीब है, लेकिन मुझे यकीन नहीं है क्योंकि मेरे द्वारा प्रतीत होता है कि सभी कोड axis=-1
का उपयोग करता है।
धन्यवाद, लेकिन exp (x) - 1 परिवर्तन के बारे में क्या? – Fernando
@ फ़र्नान्डो मुझे नहीं लगता कि आपको उस परिवर्तन की आवश्यकता है हालांकि https://www.kaggle.com/wiki/RootMeanSquaredLogarithmicError – LYu
मुझे इसकी आवश्यकता है क्योंकि मेरा मॉडल लॉग (x + 1) फिट बैठता है, इसलिए मुझे exp (x) के माध्यम से वापस बदलने की आवश्यकता है) - 1, फिर आरएमएसएलई लागू करें। – Fernando