Scikit-learn: قد يحتوي GridSearchCV.fit (...، n_job = -1) على خطأ في التوازي

تم إنشاؤها على ١١ سبتمبر ٢٠٢٠  ·  3تعليقات  ·  مصدر: scikit-learn/scikit-learn

قبل إرسال الخطأ ، يرجى التأكد من عدم معالجة المشكلة بالفعل من خلال البحث في المشكلات السابقة.

صف الخلل

استدعاء GridSearchCV.fit() بـ n_jobs=-1 يثير الاستثناء " OSError: [Errno 22] وسيطة غير صالحة ".
استدعاء GridSearchCV.fit() بـ n_jobs=None يعمل بشكل مثالي

في حالة n_jobs=None ، يُظهر الناتج أنه يحل n_jobs = 1 (على الرغم من أنه في برامجي الأخرى ، فإن أي تشغيل ناجح لـ GridSearchCV سيحل n_jobs = 6 على نفس الجهاز ، وقد لا تكون هذه مشكلة كبيرة. لمعلوماتك فقط).

ربما تكمن المشكلة في (1) lib \ site -packs \ joblib \allel.py أو _parallel_backends.py أو (2) lib \ concurrent \ futures_base.py ، كما هو موضح في traceback أدناه.

خطوات / كود الاستنساخ

الرجاء إضافة مثال بسيط يمكننا إعادة إنتاج الخطأ عن طريق تشغيل الكود. كن مقتضبًا قدر الإمكان ، ولا تعتمد على البيانات الخارجية. باختصار ، سنقوم بنسخ ولصق شفرتك ونتوقع الحصول على نفس النتيجة التي حصلت عليها. مثال: md5-0c48dcb0a123e7134795a5b1cc42e4f2 إذا كانت الشفرة طويلة جدًا ، فلا تتردد في وضعها في قائمة عامة وربطها بالمشكلة: https://gist.github.com
search = GridSearchCV(RandomForestClassifier(), param_grid, cv=3, n_jobs=-1, return_train_score=True, verbose=2)
search.fit(feature_matrix, labels)

نتائج متوقعة


لم يتم طرح أي خطأ.

النتائج الفعلية


OSError: [Errno 22] وسيطة غير صالحة

التعقيب المفصل مرفق أدناه:


_RemoteTraceback Traceback (آخر مكالمة أخيرة)
_RemoteTraceback:
""
Traceback (آخر مكالمة أخيرة):
ملف "C: Users \ tlbh9 \ Anaconda3 \ lib \ site-bunder \ joblib \ externals \ loky \ process_executor.py" ، السطر 431 ، في _process_worker
r = call_item ()
ملف "C: Users \ tlbh9 \ Anaconda3 \ lib \ site -pack \ joblib \ externals \ loky \ process_executor.py" ، السطر 285 ، في __call__
إرجاع self.fn ( self.args ، * self.kwargs)
ملف "C: Users \ tlbh9 \ Anaconda3 \ lib \ site -pack \ joblib_parallel_backends.py" ، السطر 595 ، في __call__
إرجاع self.func ( args ، * kwargs)
ملف "C: Users \ tlbh9 \ Anaconda3 \ lib \ site -pack \ joblib \allel.py" ، السطر 252 ، في __call__
إرجاع [func ( args، * kwargs)
ملف "C: Users \ tlbh9 \ Anaconda3 \ lib \ site -pack \ joblib \allel.py" ، السطر 252 ، في
إرجاع [func ( args، * kwargs)
ملف "C: Users \ tlbh9 \ Anaconda3 \ lib \ site -pack \ sklearn \ model_selection_validation.py" ، السطر 505 ، في _fit_and_score
طباعة ("[CV]٪ s٪ s"٪ (msg، (64 - len (msg)) * '.'))
OSError: [Errno 22] وسيطة غير صالحة
""

كان الاستثناء أعلاه هو السبب المباشر للاستثناء التالي:

تتبع خطأ OSError (آخر مكالمة أخيرة)
في
.......
212 بحث = GridSearchCV (RandomForestClassifier ()، param_grid، cv = 3، n_jobs = -1، return_train_score = True، verbose = 2)
-> 213 search.fit (feature_matrix ، ملصقات)
.......

~ \ Anaconda3 \ lib \ site -pack \ sklearn \ utils \ validation.py in inner_f (* args، kwargs)71 المستقبل تحذير)72 kwargs.update ({k: arg for k، arg in zip (sig.parameters، args)})—-> 73 إرجاع f ( kwargs)
74 عودة inner_f
75

~ \ Anaconda3 \ lib \ site -pack \ sklearn \ model_selection_search.py ​​in fit (self، X، y، groups، ** fit_params)
734 عودة النتائج
735
-> 736 self._run_search (التقييم_المرشحون)
737
738 # للتقييم متعدد المقاييس ، قم بتخزين best_index_ و best_params_ و

~ \ Anaconda3 \ lib \ site -pack \ sklearn \ model_selection_search.py ​​in _run_search (self، rating_candidates)
1186 def _run_search (ذاتي ، تقييم_المرشحين):
1187 "" "بحث في كافة الترشيحات في param_grid" ""
-> 1188 rating_candidates (ParameterGrid (self.param_grid))
1189
1190

~ \ Anaconda3 \ lib \ site -pack \ sklearn \ model_selection_search.py ​​in rating_candidates (filter_params)
706 n_splits، n_candidates، n_candidates * n_splits))
707
-> 708 إخراج = موازٍ (متأخر (_ fit_and_score) (استنساخ (أساس_المقياس) ،
709 X ، ص ،
قطار 710 = قطار ، اختبار = اختبار ،

~ \ Anaconda3 \ lib \ site -pack \ joblib \allel.py in __call__ (self، iterable)
1040
1041 مع self._backend.retrieval_context ():
-> 1042 استرداد ذاتي ()
1043 # تأكد من حصولنا على آخر رسالة تخبرنا بأننا انتهينا
1044 elapsed_time = time.time () - self._start_time

~ \ Anaconda3 \ lib \ site -pack \ joblib \allel.py في استرداد (ذاتي)
919 جرب:
920 if getattr (self._backend، 'support_timeout'، False):
-> 921 self._output.extend (job.get (timeout = self.timeout))
922 آخر:
923 self._output.extend (job.get ())

~ \ Anaconda3 \ lib \ site -pack \ joblib_parallel_backends.py in wrap_future_result (المستقبل ، المهلة)
540 AsyncResults.get من المعالجة المتعددة. "" "
541 حاول:
-> 542 إرجاع Future.result (timeout = timeout)
543 باستثناء CfTimeoutError مثل e:
544 رفع TimeoutError من e

~ \ Anaconda3 \ lib \ متزامن \ futures_base.py في النتيجة (ذاتي ، مهلة)
430 رفع إلغاء خطأ ()
431 elif self._state == انتهى:
-> 432 إرجاع ذاتي _ get_result ()
433
434 self._condition.wait (timeout)

~ \ Anaconda3 \ lib \ concurrent \ futures_base.py في __get_result (self)
386 def __get_result (ذاتي):
387 إذا كان الاستثناء الذاتي:
-> 388 رفع النفس _ الاستثناء
389 آخر:
390 عودة النتيجة الذاتية

OSError: [Errno 22] وسيطة غير صالحة

إصدارات


نظام:
python: 3.8.3 (افتراضي ، 2 يوليو 2020 ، 17:30:36) [MSC v.1916 64 بت (AMD64)]
الملف القابل للتنفيذ: C: Users \ tlbh9 \ Anaconda3 \ python.exe
الجهاز: Windows-10-10.0.18362-SP0

تبعيات بايثون:
النقطة: 20.1.1
أدوات الإعداد: 49.2.0.post20200714
sklearn: 0.23.1
numpy: 1.18.5
scipy: 1.5.0
سايثون: 0.29.21
الباندا: 1.0.5
matplotlib: 3.2.2
سجل العمل: 0.16.0
مؤشر ترابط ctl: 2.1.0

بنيت مع OpenMP: صحيح

شكرا للمساهمة!
triage

ال 3 كومينتر

tluocs هل يمكنك مشاركة التعليمات البرمجية الكاملة لأنني حاولت إعادة إنتاج المشكلة التي تقول إن param_grid لم يتم تعريفه.
أريد أن أعرف كيف قمت بتعيين param_grid أيضًا feature_matrix.
سيكون من الأفضل إذا كان بإمكانك مشاركة جميع المتغيرات المستخدمة في رمز الأسطر أعلاه لإعادة إنتاج المشكلة.

شكرا لك Anshu. الرمز كثير جدًا لذا يبدو أنه ليس من السهل إعادة إظهار المشكلة. لهذا السبب كنت أحاول إدخال جميع المعلومات الضرورية عندما كنت أثير المشكلة. لقد قمت الآن بحلها للتو عن طريق ترقية python و scikit-learn إلى الأحدث (على الرغم من أن إصداري السابق كان جديدًا بالفعل ، والذي تم تأريخه في يوليو 2020). لذلك أعتقد أن هذا "الخطأ" (إذا كان كذلك) ربما تم إصلاحه في الإصدار الأخير.

شكرًا tluocs على التواصل ، وشكر AnshuTrivedi لإلقاء نظرة على هذا.
إذا فهمت بشكل صحيح أنه تم إصلاح المشكلة بتحديث ، فأنا أغلقها. لا تتردد في إعادة الفتح إذا كان هناك شيء لا يزال بحاجة إلى الإصلاح. شكرا.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات