



السمعة:
- إنضم7 فبراير 2024
- المشاركات 52
- مستوى التفاعل 108
- النقاط 33
بسم الله الرحمن الرحيم والصلاة والسلام على اشرف المرسلين
السلام عليكم ورحمة الله
اليوم انشاء الله سننتقل الى ثاني درس في سلسلة المفاهيم المتقدمة في تعلم الالة حيث سنشاهد اليوم احد المشاكل او التحديات التي ستواجهها في بعض البيانات الا وهي مشكلة عدم توازن البيانات والتي هي عبارة عن وجود فئات اكثر من الاخرى مما يسبب بعض المشاكل في النموذج ,سنتعرف اليوم على :
ماهو مشكل عدم توازن البيانات ؟
لماذا قد يؤثر سلبا على نموذجنا ؟
ماهي طرق حل مشكل عدم توازن البيانات ؟
ماهو عدم توازن البيانات (Imbalanced Data) :
عدم توازن البيانات يحدث عندما يكون عدد العينات في بعض الفئات اكبر بكثير من الفئات الاخرى ,ففي الاغلب النتائج الذي يعطيها لك هذا النموذج قد تنخدع بها اي ستشاهد مثلا دقة عالية في بيانات التدريب او الاختبار لكن اذا منحت النموذج شيئ مختلف سيتعرف عليها بشكل خاطئ ولفهم الفكرة بصورة اوضح لنتخيل انه لدينا 1000 عينة من البيانات بالاضافة الى فئتين A و B حيث تحتوي الفئة A على 950 عينة اما الفئة B على 50 عينة فقط ,عند تدريب النموذج على هكذا بيانات بالتاكيد سيعطيك دقة عالية لكن ليس لكلا الفئتين فستلاحظ ينجح في التوقع بالفئة الاولى بينما يفشل في التوقع بالفئة والثانية وهذا ببساطة لعدم توفر عدد كافي من العينات ليتدرب او يتعلم منها
لماذا يعتبر عدم توازن البيانات مشكلة؟ :
تشكل توزيعات الفئات غير المتوازنة عائقا على الرغم من أن العديد من خوارزميات التعلم الالي تعمل بشكل أفضل عند وجود أعداد متساوية تقريبا من العينات في كل فئة قد يبدو النموذج عالي الدقة في هذه الحالات إذا كان يتنبأ بشكل أساسي بفئة الأغلبية في مثل هذه الحالات يصبح الحصول على دقة عالية أمرًا خادعا للأسف،تتجاهل هذه الاستراتيجية فئة الأقلية -التي غالبا ما تكون المحور الرئيسي لإنشاء النماذج ,ومن المشاكل ايضا التي قد يسببها هو overfiting اي الفرط في التعلم والذي سنراه في الدرس القادم انشاء الله السلام عليكم ورحمة الله
اليوم انشاء الله سننتقل الى ثاني درس في سلسلة المفاهيم المتقدمة في تعلم الالة حيث سنشاهد اليوم احد المشاكل او التحديات التي ستواجهها في بعض البيانات الا وهي مشكلة عدم توازن البيانات والتي هي عبارة عن وجود فئات اكثر من الاخرى مما يسبب بعض المشاكل في النموذج ,سنتعرف اليوم على :
ماهو مشكل عدم توازن البيانات ؟
لماذا قد يؤثر سلبا على نموذجنا ؟
ماهي طرق حل مشكل عدم توازن البيانات ؟

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

طرق معالجة عدم توازن البيانات ? :
ايضا كم العادة اي مشكلة في تعلم يوجد لها العديد من طرق الحل فهناك العديد من الطرق التي تساعدنا في حل هذه المشكلة سنرى طريقتين او ثلاث ونلاحظ النتائج 
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 اي لن يتم تنفيذ اي طريقة
مقارنة النتائج الاصلية بنتائج طرق موازنة الفئات :
النتيجة بعد تنفيد RUS :
نلاحظ انه هنا توازن بين الفئات وبين كل انواع المقاييس الى ان الدقة قليلة جدا وليست كافية
هنا نلاحظ ان الفئة واحد اصبحت اعلى من الفئة 0 من ناحية الدقة وباقي الماقييس اي اصبح لدينا عكس النتائج الاصلية كما ان دقة الاختبار ايضا قليلة جدا
ايضا كما السابق نلاحظ ارتفاع دقة الفئة 1 على دقة الفئة 0 كما انخفضت دقة الاختبار الى 87
يمكنكم ملاحظة ان كل الطرق التي استعملناها اثرت سلبا على دقة نموذجنا وهذا ليس بالامر المهم لانه ببساطة البيانات الخاصة بنا اما انها متوازنة ولا تحتاج الى موازنة ام انها تحتاج الى استعمال بعض طرق اختيار المعلمات الفائقة التي رايناها سابقة
مقارنة بين الطرق الثلاث :
الطريقة | نوع العمل | الية العمل | المزايا | العيوب | |||
---|---|---|---|---|---|---|---|
ROS | زيادة البيانات |
|
|
| |||
RUS | تقليل البيانات |
|
|
| |||
SMOTE | زيادة البيانات |
|
|
|
اتمنى ان اكون وفقت في شرحي لكم وشكرا
بالتوفيق انشاء الله
بالتوفيق انشاء الله
التعديل الأخير: