Meezo ML نشر 24 يونيو 2021 أرسل تقرير نشر 24 يونيو 2021 يظهر لي الخطأ التالي في هذا السطر: X,X_val, y, y_val=train_test_split(data,label,test_size=0.2,stratify=label) الخطأ: ValueError: The least populated class in y has only 1 member, which is too few. The minimum number of groups for any class cannot be less than 2. مالسبب؟ اقتباس
1 Ali Haidar Ahmad نشر 24 يونيو 2021 أرسل تقرير نشر 24 يونيو 2021 بما أنك تستخدم الوسيط stratify (الطبقات)، فهذا يتطلب أن يكون عدد العينات التي تنتمي إلى كل فئة متناسب في كل من بيانات التدريب والاختبار. لكن لديك فئة من بياناتك تحتوي على عينة واحدة فقط. لذلك إما أن تكون في بيانات التدريب أو الاختبار في وقت واحد وهذا يخالف خيار التقسيم الطبقي. لذالك ينتج الخطأ. يمكنك حل المشكلة في أن تزيد عدد البيانات التي تنتمي لهذا الصنف، أو أن تلغي خاصية التقسيم الطبقي. 1 اقتباس
1 ريم المهدي نشر 24 يونيو 2021 أرسل تقرير نشر 24 يونيو 2021 (معدل) هذا الخطأ ينتج بالطبع حسب نوع البيانات المدخلة و توزيعها، أعلم عزيزي@Meezo ML أن هذا الخطأ ناتج عن إستخدام stratify والذي يمكنك التخلص منه فقط بالمسح، راجع السطر التالي: X,X_val, y, y_val=train_test_split(data,label,test_size=0.2) لكن دعنا نفهم لماذا نتج هذا الخطأ من الأساس، stratify هو عبارة عن مدخل لدالة التقسيم والذي يمكننا إستخدامه فقط في حالة البيانات التصنيفية categorical variables و الذي يقوم بتقسيم البيانات بين التدريب و التقييم training and validation بصورة تتناسب مع توزيع البيانات الأساسية، مثلاً إذا كان لدينا صنفين في y أحدهما يمثل 25% من البيانات و الأخر 75% فإن stratify تقوم بتقسيم البيانات بين التدريب و التحقق بنفس النسبة لكل من مجموعتي البيانات. from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split iris = load_iris() X = iris.data y = iris.target X1 = pd.DataFrame(X).drop(pd.DataFrame(X).index[10:50]).drop(pd.DataFrame(X).index[70:100]).drop(pd.DataFrame(X).index[140:]) y1 = pd.DataFrame(y).drop(pd.DataFrame(y).index[10:50]).drop(pd.DataFrame(y).index[70:100]).drop(pd.DataFrame(y).index[140:]) y1.value_counts() x_train, x_test, y_train, y_test = train_test_split(X1,y1,stratify=y1) اولاً قمنا بإستدعاء الدوال لتحميل بيانات Iris وتقسيم البيانات بإستخدام train_test_split و من ثم حملنا البيانات وقسمناها إلى مدخلات و مخرجات X,y و حذفنا عدد من السطور في كل من المدخلات و المخرجات (للتأكد من تنفيذ stratify، مع العلم أنها يمكن أن تعمل حتى لو كانت الأصناف متساوية كما في حالة Iris والتي يتساوى فيها التصنيفات بعدد 50 لكل صنف) الناتج من الحذف يعطي التقسيم التالي: 2 40 1 20 0 10 بمعدل 40 عينة من الصنف الأول، 20 من الثاني و 10 من الأخير. و أخيراً عملية التقسيم تأخذ X1,y1 كمدخلات مع stratify الذي يستقبل y1 وبالتالي إن قمنا بطباعة أعداد التصنيفات في y_test سنحصل على نفس توزيع المدخلات. y_test.value_counts() 2 10 1 5 0 3 تم التعديل في 24 يونيو 2021 بواسطة Reem Elmahdi إضافة توضيح 1 اقتباس
السؤال
Meezo ML
يظهر لي الخطأ التالي في هذا السطر:
الخطأ:
مالسبب؟
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.