Ali Ahmed55 نشر 10 فبراير أرسل تقرير نشر 10 فبراير السلام عليكم مثال انا عندي عمود زي دي فيه قيمه زي دي اغلب القيمه عبار عن 0.0 فا ازي اخلي النموذج مايكونش منحيز لقيمه دي ؟ وكمان القيمه الزي دي اي الافضل الطبقه الاخير sigmoid والا linear ؟ efs_combined 0.0 13268 5.8 329 5.5 326 5.2 322 5.6 317 ... 27.7 1 24.1 1 37.6 1 21.8 1 17.2 1 2 اقتباس
0 محمد عاطف17 نشر 10 فبراير أرسل تقرير نشر 10 فبراير وعليكم السلام ورحمة الله وبركاته. توجد عدة حلول لتلك المشكلة : إعادة توزيع البيانات بشكل متوازن : Oversampling: يمكنك زيادة عدد العينات للفئات الأقل مثل القيم الأخرى غير ال 0 عن طريق تكرارها. Undersampling: هنا يمكنك تقليل عدد العينات للفئة الأكثر وهي ال 0 عن طريق حذف بعض البيانات منها. SMOTE (Synthetic Minority Over-sampling Technique): هنا يمكنك إستخدام تلك التقنية والتي تقوم بإنشاء عينات جديدة للفئات الأقل عن طريق توليد بيانات وعينات أخرى. استخدام الأوزان (Class Weights) : عند استخدام نماذج معينة مثل الشبكات العصبية يمكنك تخصيص وزن أكبر للعينات الأقل تكرارا في بيانات التدريب مثل القيم التي تكون 5.8 أو 37.6 في المثال الخاص بك. وذلك لكي يتعلم النموذج تمثيلها بشكل أفضل. ويمكنك تعيين أوزان للفئات أثناء تدريب النموذج فمثلا في scikit-learn يمكنك استخدام class_weight='balanced' في العديد من النماذج. وفي TensorFlow أو PyTorch، يمكنك تعيين أوزان الفئات يدويا. مثال : from sklearn.linear_model import LogisticRegression class_weights = {0: 1, 1: 10} model = LogisticRegression(class_weight=class_weights) model.fit(X_train, y_train) تعديل دالة الخسارة (Loss Function) : يمكنك استخدام دالة خسارة Focal Loss والتي يتم إستخدامها عندما لا يكون هنا توزيع متوازن للبيانات والتي تقوم بإعطاء وزن أكبر للعينات الأقل .مثال : import tensorflow as tf def focal_loss(gamma=2., alpha=.25): def focal_loss_fixed(y_true, y_pred): pt = tf.where(tf.equal(y_true, 1), y_pred, 1 - y_pred) return -tf.reduce_sum(alpha * tf.pow(1. - pt, gamma) * tf.math.log(pt)) return focal_loss_fixed model.compile(optimizer='adam', loss=focal_loss(), metrics=['accuracy']) أما بخصوص الطبقة الأخيرة فإن Sigmoid يستخدم غالبا في المشاكل الثنائية (Binary Classification) حيث يكون المخرج بين 0 و 1. بينما Linear: يستخدم في مشاكل الانحدار (Regression) حيث يكون المخرج قيمة حقيقية.وهنا إذا كنت تحاول التنبؤ بقيمة مستمرة مثل efs_combined فمن الأفضل أن تكون الطبقة الأخيرة خطية (Linear) . أما إذا كنت تقوم بتصنيف ثنائي مثل هل القيمة أكبر من صفر أم لا أى تتوقع الناتج قيمة 0 أو 1 فيفضل إستخدام Sigmoid. 1 اقتباس
0 Mustafa Suleiman نشر 10 فبراير أرسل تقرير نشر 10 فبراير هل الأصفار تمثل قيمًا صحيحة كغياب النشاط أو قيمًا مفقودة missing data؟ في حال مفقودة استخدم تقنيات مثل KNNImputer أو تعويضها بالمتوسط/المنوال، ولو صحيحة تعامل معها كجزء من التوزيع الطبيعي للبيانات. ولو المشكلة تصنيف Classification، فاستخدم تقنيات مثل SMOTE لإنشاء عينات جديدة للفئات النادرة، وحدد أوزانًا للفئات كالتالي TensorFlow: class_weight={0: 0.1, 1: 0.9}. أما لو المشكلة انحدار Regression جرب تحويل الـ Target باستخدام log(1 + y) لتقليل تأثير القيم الكبيرة، وحول المشكلة إلى تصنيف بتقسيم الـ Target إلى فئات (0، 5-10، 10-15، إلخ). أو أضف ميزة ثنائية binary feature تشير هل القيمة تساوي صفرًا أم لا. df['is_zero'] = df['efs_combined'].apply(lambda x: 1 if x == 0 else 0) أو استخدم نماذج مع Regularization ومنها L1/L2 في الانحدار الخطي لتجنب التركيز المفرط على الأصفار، كالتالي في Keras: model.add(Dense(64, kernel_regularizer='l2')) بخصوص اختيار الطبقة الأخيرة، ففي Binary Classification في حال تريد احتمالًا بين 0 و1 (وجود/عدم وجود حدث)، استخدم Sigmoid. model.add(Dense(1, activation='sigmoid')) في الإنحدار Regression لو تتنبأ بقيمة رقمية مستمرة كأسعار وقياسات، استخدم Linear. model.add(Dense(1, activation='linear')) 1 اقتباس
0 Ali Ahmed55 نشر 10 فبراير الكاتب أرسل تقرير نشر 10 فبراير بتاريخ 6 دقائق مضت قال Mustafa Suleiman: هل الأصفار تمثل قيمًا صحيحة كغياب النشاط أو قيمًا مفقودة missing data؟ اه دي نتيجه الكود ده الان الefs عبارن 0.0-1.0 data_train['efs_combined'] = data_train['efs'] * data_train['efs_time'] y_target = data_train['efs_combined'] بتاريخ 9 دقائق مضت قال Mustafa Suleiman: model.add(Dense(64, kernel_regularizer='l2')) طيب دي استخدم ازي في الشبكه العصبيه دي # The 'deep_hit_model' is a Sequential model in Keras, meaning the layers are stacked in a linear fashion. deep_hit_model = keras.models.Sequential([ # - The first layer is a Dense layer with 8 units and 'tanh' activation function. This layer is responsible for transforming the input into a higher-dimensional space. keras.layers.Dense(8), keras.layers.BatchNormalization(), keras.layers.Activation('tanh'), keras.layers.Dropout(0.1), # - The second layer is a Dense layer with 128 units and 'tanh' activation function, allowing the model to learn more complex patterns. keras.layers.Dense(128), keras.layers.BatchNormalization(), keras.layers.Activation('tanh'), keras.layers.Dropout(0.3), # - The third layer is a Dense layer with 64 units and 'tanh' activation function, further processing the data with non-linearities. keras.layers.Dense(64), keras.layers.BatchNormalization(), keras.layers.Activation('tanh'), # - The fourth layer is a Dense layer with 32 units and 'tanh' activation function, continuing to refine the representation of the data. keras.layers.Dense(32), keras.layers.BatchNormalization(), keras.layers.Activation('tanh'), # - The final layer is a Dense layer with 1 unit and 'sigmoid' activation function, producing an output between 0 and 1, suitable for binary classification. keras.layers.Dense(1 , activation='linear'), اقتباس
0 Mustafa Suleiman نشر 11 فبراير أرسل تقرير نشر 11 فبراير بتاريخ On 10/2/2025 at 14:46 قال Ali Ahmed55: اه دي نتيجه الكود ده الان الefs عبارن 0.0-1.0 data_train['efs_combined'] = data_train['efs'] * data_train['efs_time'] y_target = data_train['efs_combined'] طيب دي استخدم ازي في الشبكه العصبيه دي # The 'deep_hit_model' is a Sequential model in Keras, meaning the layers are stacked in a linear fashion. deep_hit_model = keras.models.Sequential([ # - The first layer is a Dense layer with 8 units and 'tanh' activation function. This layer is responsible for transforming the input into a higher-dimensional space. keras.layers.Dense(8), keras.layers.BatchNormalization(), keras.layers.Activation('tanh'), keras.layers.Dropout(0.1), # - The second layer is a Dense layer with 128 units and 'tanh' activation function, allowing the model to learn more complex patterns. keras.layers.Dense(128), keras.layers.BatchNormalization(), keras.layers.Activation('tanh'), keras.layers.Dropout(0.3), # - The third layer is a Dense layer with 64 units and 'tanh' activation function, further processing the data with non-linearities. keras.layers.Dense(64), keras.layers.BatchNormalization(), keras.layers.Activation('tanh'), # - The fourth layer is a Dense layer with 32 units and 'tanh' activation function, continuing to refine the representation of the data. keras.layers.Dense(32), keras.layers.BatchNormalization(), keras.layers.Activation('tanh'), # - The final layer is a Dense layer with 1 unit and 'sigmoid' activation function, producing an output between 0 and 1, suitable for binary classification. keras.layers.Dense(1 , activation='linear'), الـ L2 Regularization يُضاف إلى الطبقات للحد من مشكلة Overfitting عن طريق معاقبة الأوزان الكبيرة في النموذج. model.add(Dense(64, kernel_regularizer='l2')) 1 اقتباس
0 Ali Ahmed55 نشر 11 فبراير الكاتب أرسل تقرير نشر 11 فبراير بتاريخ 4 ساعة قال Mustafa Suleiman: الـ L2 Regularization يُضاف إلى الطبقات للحد من مشكلة Overfitting عن طريق معاقبة الأوزان الكبيرة في النموذج. model.add(Dense(64, kernel_regularizer='l2')) الف شكراا جدا لحضرتك جزاك الله كل خير اقتباس
السؤال
Ali Ahmed55
السلام عليكم
مثال
انا عندي عمود زي دي فيه قيمه زي دي اغلب القيمه عبار عن 0.0 فا ازي اخلي النموذج مايكونش منحيز لقيمه دي ؟
وكمان القيمه الزي دي اي الافضل الطبقه الاخير sigmoid والا linear ؟
5 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.