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

استخدام (MAE) Mean Absolute Error  كدالة تكلفة، وكمعيار كفاءة لنماذج التوقع Regression في Keras

Meezo ML

السؤال

Recommended Posts

  • 1

هي دالة خسارة (تكلفة) وتستخدم لنماذج التوقع، وهو يمثل متوسط مجموع الفروق بين القيم الحقيقية والمتوقعة بالقيمة المطلقة.

loss = abs(y_true - y_pred)

يعد MAE مفيدًا في حالة تلف بيانات التدريب بسبب القيم المتطرفة (أي أننا نتلقى بشكل خاطئ قيمًا سلبية / إيجابية ضخمة بشكل غير واقعي في بيئة التدريب لدينا ، ولكن لانتلقاها في بيئة الاختبار).
بشكل عام لا أحبذ استخدامه كدالة تكلفة لأن الدوال من الشكل |x| أي دوال القيمة المطلقة يكون لها شكل مشابه تماماً لحرف V وبالتالي فإن قيمة المشتقة في أي نقطة ستكون كبيرة وهذا أمر غير مناسب، ويمكن إصلاح هذه المشكلة لكن لاداعي لإضاعة الوقت عليها، حيث يمكنك استخدام 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=keras.losses., metrics=['mae'])
    #بالشكل التالي compile هنا استخدمناها كدالة تكلفة وكمعيار عن طريق تمريره إلى الدالة 
    model.compile(optimizer='rmsprop', loss='mae', metrics=['mae'])
    return model
# تدريب النموذج
model = build_model()
model.fit(train_data, train_targets,epochs=8, batch_size=64)



 

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

  • 1

هي إحدي الدوال التي تستخدم لقياس دقة النموذج و بالتالي حساب معدل الخسارة loss و ذلك عن طريق إيجاد متوسط الفروقات بين القيم الحقيقية و المتوقعة بإستخدام النموذج. كلما قلت القيمة الناتجة من الدالة كلما زادت دقة النموذج، و يكون إستخدامه مفيداَ في حالة قياس دقة النماذج المطبقة على البيانات التي تحتوي على قيم شاذة أو متطرفة.

يمكننا إستدعاء دالة mean_absolute_error من sklearn.metrics مباشرة أو القيام ببرمجته مباشرة فهو من أسهل المقاييس:

from sklearn.metrics import mean_absolute_error as MAE
import pandas as pd

y_true = pd.DataFrame({'values':[3,6,5,8,9,4,2]})
y_pred = [4,8,7,3,2,4,2]

error = 0
for i in range(len(y_true)):
    error += abs(y_true.values[i] - y_pred[i])

print('manual MAE = ', error / len(y_true))
print('sklearn MAE = ', MAE(y_true, y_pred))

لاحظ لنتيجة كل من الدالتين والتي تكون متقاربة لحد كبير، ويمكننا إظهار كل الأرقام الكسرية في دالة MAE المحسوبة بالبرنامج بزيادة عدد الأرقام الظاهرة في الطباعة.

manual MAE =  [2.42857143]
sklearn MAE =  2.4285714285714284

لاحظ من البرنامج أن دالة MAE قامت بإستقبال القيم الحقيقية y والقيم المتوقعة y_pred وقامت بالحسابات ضمنياً، ويمكن لنفس الدالة إستقبال multioutput والتي يمكن تعريفها في حال كنا نريد إرجاع MAE لكل feature على حدة، و يمكننا أيضاً تمرير sample_weight والتي تقوم بإسناد معاملات لمعدل الفقد.

y_true = [[0., 1.], [0., 0.]]
y_pred = [[1., 1.], [1., 0.]]
#تطبيق sample weight
MAE(y_true, y_pred, sample_weight=[0.7, 0.3])

#تطبيق multioutput
MAE(y_true, y_pred, multioutput='raw_values')

في حالة تطبيق multioutput بدلاً من تمرير معاملات لكل الخصائص في مجموعة البيانات قمنا بتمرير raw_values وهي ترجع كل قيم MAE لكل خاصية على حدا.

 

 

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

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...