اذهب إلى المحتوى
  • 0

دالة التكلفة Huber loss وتطبيقها في Keras

Meezo ML

السؤال

Recommended Posts

  • 1

يمكن اعتبارها كتحسين لل MSE أو كتطوير لها للتعامل مع حالات معينة، وهي مزيج من ال MSE و MSA.
إن ال (MSE) يركز على القيم المتطرفة في مجموعة البيانات، بينما متوسط الخطأ المطلق (MAE) جيد لتجاهل القيم المتطرفة. لكن في بعض الحالات فإن البيانات التي تبدو وكأنها قيم متطرفة، قد لا تشكل مشكلة بالنسبة لك، وأيضاً تلك النقاط من البيانات لا ينبغي أن تحظى بأولوية عالية. وهنا حيث يأتي هوبر لوس.
الصيغة الرياضية:
Huber.png.90ab130f159c9cbe53b8462530565133.png
كما قلنا فهي مزيج من MSE و MAE مما يعني أنها تربيعية (MSE) عندما يكون الخطأ صغيرًا وإلا فهي MAE.
دلتا هنا تعتبر من المعاملات العليا hyperparameter لتحديد نطاق MAE و MSE.
من المعادلة نجد أنه عندما يكون الخطأ أقل من دلتا ، يكون الخطأ تربيعيًا وإلا يكون مطلقًا.
يمن استخدامها في كيراس بسهولة كالتالي:

# تحميل الداتا
from keras.datasets import boston_housing
import keras
(train_data, train_targets), (test_data, test_targets) = boston_housing.load_data()
# توحيد البيانات
mean = train_data.mean(axis=0)
train_data -= mean
std = train_data.std(axis=0)
train_data /= std
test_data -= mean
test_data /= std
from keras import models
from keras import layers
# بناء النموذج
def build_model():
    model = models.Sequential()
    model.add(layers.Dense(64, activation='relu',
    input_shape=(train_data.shape[1],)))
    model.add(layers.Dense(64, activation='relu'))
    model.add(layers.Dense(1))
    #model.compile(optimizer='rmsprop', loss='Huber', metrics=['mae'])
    return model
# تدريب النموذج
model = build_model()
model.fit(train_data, train_targets,epochs=8, batch_size=64)
"""
Epoch 1/8
7/7 [==============================] - 7s 2ms/step - loss: 21.8385 - mae: 22.3385
Epoch 2/8
7/7 [==============================] - 0s 3ms/step - loss: 20.6043 - mae: 21.1043
Epoch 3/8
7/7 [==============================] - 0s 3ms/step - loss: 19.8923 - mae: 20.3920
Epoch 4/8
7/7 [==============================] - 0s 3ms/step - loss: 18.4374 - mae: 18.9368
Epoch 5/8
7/7 [==============================] - 0s 4ms/step - loss: 17.2154 - mae: 17.7146
Epoch 6/8
7/7 [==============================] - 0s 3ms/step - loss: 15.7804 - mae: 16.2756
Epoch 7/8
7/7 [==============================] - 0s 2ms/step - loss: 14.0492 - mae: 14.5466
Epoch 8/8
7/7 [==============================] - 0s 3ms/step - loss: 12.3948 - mae: 12.8905
"""

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

Huber loss هي إحدى دوال حساب الخطأ في regression و تعتبر أقل تأثراً بالقيم الشاذة او المتطرفة من mean squared error. تعتبر Huber loss من الدوال التربيعية تستخدم mean squared error loss في حال كان الفرق بين القيم الحقيقية و المتوقعة صغير و تعتبر الدالة خطية و تحسب عن طريق mean absolute error في حال كان الفرق كبير، المتغير دلتا هو من يحدد نقطة التحول من الحساب الخطي للحساب التربيعي في الدالة، لاحظ المعادلة:

formula_to_calculate_huber_loss.png

لاحظ المثال التالي:

from tensorflow import keras
 
yActual = [4, -1.5, 5, 2]
yPredicted = [3.5, 1, 5, 3]
 
huberObject = keras.losses.Huber(delta=0.5)
huberTensor = huberObject(yActual, yPredicted)
huber = huberTensor.numpy()
 
print(huber)

والناتج هو قيمة 0.40625 والتي نتجت من العمليات الحسابية التالية:

huber_loss_calculation_example.png

 

تم التعديل في بواسطة Reem Elmahdi
رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...