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

ظهور الخطأ ValueError: Cannot have number of splits n_splits greater than the number of samples أثناء محاولة تقسيم البيانات باستخدم RepeatedKFold

Meezo ML

السؤال

أحاول تقسيم البيانات باستخدام RepeatedKFold لكن يظهر لي الخطأ التالي:

import numpy as np
from sklearn.model_selection import RepeatedKFold
X = np.array([[3, 32], [2, 9], [15, 8]])
y = np.array([11, 22, 33])
rkf = RepeatedKFold(n_splits=4, n_repeats=4, random_state=44)
for train_index, test_index in rkf.split(X):
    print("TRAIN:", train_index, "TEST:", test_index)
    X_train, X_test = X[train_index], X[test_index]
    y_train, y_test = y[train_index], y[test_index]
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-30-da9fc9c92435> in <module>
      4 y = np.array([11, 22, 33])
      5 rkf = RepeatedKFold(n_splits=4, n_repeats=4, random_state=44)
----> 6 for train_index, test_index in rkf.split(X):
      7     print("TRAIN:", train_index, "TEST:", test_index)
      8     X_train, X_test = X[train_index], X[test_index]

~\anaconda3\lib\site-packages\sklearn\model_selection\_split.py in split(self, X, y, groups)
   1145             cv = self.cv(random_state=rng, shuffle=True,
   1146                          **self.cvargs)
-> 1147             for train_index, test_index in cv.split(X, y, groups):
   1148                 yield train_index, test_index
   1149 

~\anaconda3\lib\site-packages\sklearn\model_selection\_split.py in split(self, X, y, groups)
    331                 ("Cannot have number of splits n_splits={0} greater"
    332                  " than the number of samples: n_samples={1}.")
--> 333                 .format(self.n_splits, n_samples))
    334 
    335         for train, test in super().split(X, y, groups):

ValueError: Cannot have number of splits n_splits=4 greater than the number of samples: n_samples=3.

 

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

Recommended Posts

  • 1

هذا الخطأ قد يظهر معك في أي نوع من أنواع التقسيم الأخرى التي تندرج تحت فكرة KFolds والسبب فيها أنك تحاول تقسيم البيانات لعدد أكبر من حجم العينات التي لديك.
لذا فعدد التقسيمات n_splits يجب أن يكون أكبر أو يساوي عدد العينات التي لديك وفي حالتك هو 3.
 

import numpy as np
from sklearn.model_selection import RepeatedKFold
X = np.array([[3, 32], [2, 9], [15, 8]])
y = np.array([11, 22, 33])
rkf = RepeatedKFold(n_splits=3, n_repeats=4, random_state=44)
for train_index, test_index in rkf.split(X):
    print("TRAIN:", train_index, "TEST:", test_index)
    X_train, X_test = X[train_index], X[test_index]
    y_train, y_test = y[train_index], y[test_index]

 

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

  • 1

إذا كانت عدد الأقسام n_splits المبرمجة في الكود أكبر من عدد البيانات الممرة samples لدالة KFold فإنه ينتج هذا النوع من الأخطاء، يمكننا التأكد من ذلك بالرجوع لبرنامج دالة التقسيم، نجد في أحد أجزاء البرنامج الشرط التالي:

if self.n_splits > n_samples:
    raise ValueError(
        ("Cannot have number of splits n_splits={0} greater"
         " than the number of samples: {1}.").format(self.n_splits,
                                                     n_samples))

و يجب عليك ايضاً الإنتباه لحالة تمرير قيمة 1 للتقسيم و التي تنتج الخطأ المعرف في الدالة ايضاً كالتالي:

if n_folds <= 1:
            raise ValueError(
                "k-fold cross validation requires at least one"
                " train / test split by setting n_folds=2 or more,"
                " got n_folds={0}.".format(n_folds))

يمكنك الرجوع لكامل البرنامج من هنا.

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

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...