مضى على الشبكة و يوم من العطاء.

التعامل مع عدم توازن البيانات (Imbalanced Data) :


السمعة:

بسم الله الرحمن الرحيم والصلاة والسلام على اشرف المرسلين
السلام عليكم ورحمة الله

اليوم انشاء الله سننتقل الى ثاني درس في سلسلة المفاهيم المتقدمة في تعلم الالة حيث سنشاهد اليوم احد المشاكل او التحديات التي ستواجهها في بعض البيانات الا وهي مشكلة عدم توازن البيانات والتي هي عبارة عن وجود فئات اكثر من الاخرى مما يسبب بعض المشاكل في النموذج ,سنتعرف اليوم على :
ماهو مشكل عدم توازن البيانات ؟
لماذا قد يؤثر سلبا على نموذجنا ؟
ماهي طرق حل مشكل عدم توازن البيانات ؟


1️⃣ماهو عدم توازن البيانات (Imbalanced Data) :
عدم توازن البيانات يحدث عندما يكون عدد العينات في بعض الفئات اكبر بكثير من الفئات الاخرى ,ففي الاغلب النتائج الذي يعطيها لك هذا النموذج قد تنخدع بها اي ستشاهد مثلا دقة عالية في بيانات التدريب او الاختبار لكن اذا منحت النموذج شيئ مختلف سيتعرف عليها بشكل خاطئ ولفهم الفكرة بصورة اوضح لنتخيل انه لدينا 1000 عينة من البيانات بالاضافة الى فئتين A و B حيث تحتوي الفئة A على 950 عينة اما الفئة B على 50 عينة فقط ,عند تدريب النموذج على هكذا بيانات بالتاكيد سيعطيك دقة عالية لكن ليس لكلا الفئتين فستلاحظ ينجح في التوقع بالفئة الاولى بينما يفشل في التوقع بالفئة والثانية وهذا ببساطة لعدم توفر عدد كافي من العينات ليتدرب او يتعلم منها

2️⃣لماذا يعتبر عدم توازن البيانات مشكلة؟ :
تشكل توزيعات الفئات غير المتوازنة عائقا على الرغم من أن العديد من خوارزميات التعلم الالي تعمل بشكل أفضل عند وجود أعداد متساوية تقريبا من العينات في كل فئة قد يبدو النموذج عالي الدقة في هذه الحالات إذا كان يتنبأ بشكل أساسي بفئة الأغلبية في مثل هذه الحالات يصبح الحصول على دقة عالية أمرًا خادعا للأسف،تتجاهل هذه الاستراتيجية فئة الأقلية -التي غالبا ما تكون المحور الرئيسي لإنشاء النماذج ,ومن المشاكل ايضا التي قد يسببها هو overfiting اي الفرط في التعلم والذي سنراه في الدرس القادم انشاء الله

3️⃣طرق معالجة عدم توازن البيانات ? :

ايضا كم العادة اي مشكلة في تعلم يوجد لها العديد من طرق الحل فهناك العديد من الطرق التي تساعدنا في حل هذه المشكلة سنرى طريقتين او ثلاث ونلاحظ النتائج

1- زيادة البيانات العشوائية (Random Over-Sampling - ROS) :
يتم زيادة عدد العينات في الفئة الأقل تمثيلًا عن طريق تكرار بعض العينات حتى تتساوى مع الفئة الأخرى مما يساعد على تحسين قدرة النموذج على التعرف على هذه الفئة.
2-تقليل البيانات العشوائية (Random Under-Sampling - RUS) :
يتم تقليل عدد العينات في الفئة الأكثر تمثيلا عن طريق إزالة بعض العينات عشوائيا مما يقلل من تأثير هذه الفئة ويجعل النموذج أكثر توازنا.
3-طريقة SMOTE (Synthetic Minority Over-sampling Technique) :
يتم إنشاء عينات جديدة اصطناعية بناء على توزيع البيانات الأصلية مما يجعل النموذج أكثر توازنا بطريقة أكثر كفاءة من التكرار العشوائي.


برمجة الطرق باستعمال بايثون سنستعمل نفس الدالة التي استعملناها في درس انشاء نموذج التعلم الالي (Scaler method ) سنظيف مدخل من نوع string يحدد نوع طريقة
الموازنة التي نريدها
كود:
from imblearn.over_sampling import SMOTE, RandomOverSampler

from imblearn.under_sampling import RandomUnderSampler

def scaling(df, method='none'):

    # فصل الميزات X والهدف y

    X = df[df.columns[:-1]].values

    y = df[df.columns[-1]].values

 

    # تطبيق التحجيم (Normalization) باستخدام MinMaxScaler

    scaler = MinMaxScaler()

    X = scaler.fit_transform(X)

 

    # معالجة عدم توازن البيانات بناءً على الطريقة المحددة

    if method == 'oversample':  # زيادة الفئة الأقل تمثيلًا (Random Over-Sampling)

        ros = RandomOverSampler()

        X, y = ros.fit_resample(X, y)

    elif method == 'undersample':  # تقليل الفئة الأكثر تمثيلًا (Random Under-Sampling)

        rus = RandomUnderSampler()

        X, y = rus.fit_resample(X, y)

    elif method == 'smote':  # توليد بيانات اصطناعية باستخدام SMOTE

        smote = SMOTE()

        X, y = smote.fit_resample(X, y)

 

    # دمج الميزات X والهدف y في مصفوفة واحدة

    data = np.hstack((X, np.reshape(y, (-1, 1))))

return data, X, y

train, X_train, y_train = scaling(train,'undersample')

test, X_test, y_test = scaling(test,'undersample')

الان كلما ماعلينا فعله هو اثناء مناداة الدالة نكتب اسم طريقة الموازنة التي نريدها ثم سيتم التحقق من نوع الطريقة في شرط if اذا لم تكتب اي طريقة سيتم تعيين method=null اي لن يتم تنفيذ اي طريقة
مقارنة النتائج الاصلية بنتائج طرق موازنة الفئات :
النتيجة الاصلية :
Capture.webp

النتيجة بعد تنفيد RUS :
Capture.webp

نلاحظ انه هنا توازن بين الفئات وبين كل انواع المقاييس الى ان الدقة قليلة جدا وليست كافية
النتيجة بعد تنفيد ROS :
Capture.webp

هنا نلاحظ ان الفئة واحد اصبحت اعلى من الفئة 0 من ناحية الدقة وباقي الماقييس اي اصبح لدينا عكس النتائج الاصلية كما ان دقة الاختبار ايضا قليلة جدا
النتيجة بعد تنفيد SMOTE :
Capture.webp

ايضا كما السابق نلاحظ ارتفاع دقة الفئة 1 على دقة الفئة 0 كما انخفضت دقة الاختبار الى 87

يمكنكم ملاحظة ان كل الطرق التي استعملناها اثرت سلبا على دقة نموذجنا وهذا ليس بالامر المهم لانه ببساطة البيانات الخاصة بنا اما انها متوازنة ولا تحتاج الى موازنة ام انها تحتاج الى استعمال بعض طرق اختيار المعلمات الفائقة التي رايناها سابقة
مقارنة بين الطرق الثلاث :


الطريقةنوع العملالية العملالمزاياالعيوب
ROSزيادة البيانات
تكرار عينات من الفئة الأقل تمثيلا حتى تتساوى مع الفئة الأخرى
بسيط وسريع يحافظ على جميع البيانات الأصلية
قد يؤدي إلى الإفراط في التكيف (Overfitting) بسبب تكرار نفس البيانات
RUSتقليل البيانات
إزالة بعض العينات من الفئة الأكثر تمثيلا
يقلل حجم البيانات يجعل التدريب أسرع
قد يؤدي إلى فقدان معلومات هامة مما يضعف أداء النموذج
SMOTEزيادة البيانات
إنشاء عينات جديدة اصطناعية باستخدام مزيج خطي بين أقرب الجيران
يضيف تنوعا للبيانات يقلل من مشكلة الإفراط في التكيف
قد يؤدي إلى إدخال ضوضاء في البيانات لا يعمل جيدا مع البيانات عالية الأبعاد

اتمنى ان اكون وفقت في شرحي لكم وشكرا
بالتوفيق انشاء الله
 
التعديل الأخير:

آخر المشاركات

فانوس

رمضان
عودة
أعلى