Avant de soumettre un bogue, assurez-vous que le problème n'a pas déjà été résolu en recherchant dans les anciens numéros.
L'appel de GridSearchCV.fit()
avec n_jobs=-1
lève l'exception ' OSError: [Errno 22] Argument invalide '.
Appeler GridSearchCV.fit()
avec n_jobs=None
fonctionne parfaitement
Dans le cas de n_jobs=None
, la sortie montre qu'elle résout n_jobs=1 (bien que dans mes autres programmes, toute exécution réussie de GridSearchCV résoudra n_jobs=6 sur la même machine, cela peut ne pas être un gros problème. Juste FYI).
Peut-être que le problème réside dans (1) lib\site-packages\joblib\parallel.py ou _parallel_backends.py ou (2) lib\concurrent\futures_base.py, comme indiqué dans le retraçage ci-dessous.
search = GridSearchCV(RandomForestClassifier(), param_grid, cv=3, n_jobs=-1, return_train_score=True, verbose=2)
search.fit(feature_matrix, labels)
Aucune erreur n'est renvoyée.
OSError : [Errno 22] Argument non valide
Le rétrolien détaillé est joint ci-dessous :
_RemoteTraceback Traceback (appel le plus récent en dernier)
_RemoteTraceback :
"""
Traceback (appel le plus récent en dernier) :
Fichier "C:Users\tlbh9\Anaconda3\lib\site-packages\joblib\externals\loky\process_executor.py", ligne 431, dans _process_worker
r = élément_appel()
Fichier "C:Users\tlbh9\Anaconda3\lib\site-packages\joblib\externals\loky\process_executor.py", ligne 285, en __call__
return self.fn( self.args, * self.kwargs)
Fichier "C:Users\tlbh9\Anaconda3\lib\site-packages\joblib_parallel_backends.py", ligne 595, en __call__
return self.func( args, * kwargs)
Fichier "C:Users\tlbh9\Anaconda3\lib\site-packages\joblib\parallel.py", ligne 252, en __call__
return [func( args, * kwargs)
Fichier "C:Users\tlbh9\Anaconda3\lib\site-packages\joblib\parallel.py", ligne 252, dans
return [func( args, * kwargs)
Fichier "C:Users\tlbh9\Anaconda3\lib\site-packages\sklearn\model_selection_validation.py", ligne 505, dans _fit_and_score
print("[CV] %s %s" % (msg, (64 - len(msg)) * '.'))
OSError : [Errno 22] Argument non valide
"""
L'exception ci-dessus était la cause directe de l'exception suivante :
OSError Traceback (appel le plus récent en dernier)
.......
212 recherche = GridSearchCV(RandomForestClassifier(), param_grid, cv=3, n_jobs=-1, return_train_score=True, verbose=2)
--> 213 search.fit(feature_matrix, étiquettes)
.......
~\Anaconda3\lib\site-packages\sklearn\utils\validation.py dans inner_f(*args, kwargs)71 Avertissement futur)72 kwargs.update({k : arg pour k, arg dans zip(sig.parameters, args)})---> 73 retour f( kwargs)
74 retour intérieur_f
75
~\Anaconda3\lib\site-packages\sklearn\model_selection_search.py dans fit(self, X, y, groups, **fit_params)
734 résultats de retour
735
--> 736 self._run_search(evaluate_candidates)
737
738 # Pour une évaluation multi-métrique, stockez les best_index_, best_params_ et
~\Anaconda3\lib\site-packages\sklearn\model_selection_search.py dans _run_search(self, evaluation_candidates)
1186 def _run_search(self,évaluer_candidats):
1187 """Rechercher tous les candidats dans param_grid"""
-> 1188 évaluer_candidats(ParameterGrid(self.param_grid))
1189
1190
~\Anaconda3\lib\site-packages\sklearn\model_selection_search.py dans evaluation_candidates(candidate_params)
706 n_splits, n_candidates, n_candidates * n_splits))
707
--> 708 out = parallel(delayed(_fit_and_score)(clone(base_estimator),
709 X, y,
710 train=train, test=test,
~\Anaconda3\lib\site-packages\joblib\parallel.py dans __call__
(auto, itérable)
1040
1041 avec self._backend.retrieval_context() :
-> 1042 self.retrieve()
1043 # Assurez-vous que nous recevons un dernier message nous disant que nous avons terminé
1044 elapsed_time = time.time() - self._start_time
~\Anaconda3\lib\site-packages\joblib\parallel.py dans retrieve(self)
919 essayer :
920 si getattr(self._backend, 'supports_timeout', False):
--> 921 self._output.extend(job.get(timeout=self.timeout))
922 autre :
923 self._output.extend(job.get())
~\Anaconda3\lib\site-packages\joblib_parallel_backends.py dans wrap_future_result(future, timeout)
540 AsyncResults.get du multitraitement."""
541 essayer :
--> 542 return future.result(timeout=timeout)
543 sauf CfTimeoutError comme e :
544 lever TimeoutError de e
~\Anaconda3\lib\concurrent\futures_base.py dans result(self, timeout)
430 augmenter CancelledError()
431 elif self._state == TERMINÉ :
--> 432 renvoie self.__get_result()
433
434 self._condition.wait(timeout)
~\Anaconda3\lib\concurrent\futures_base.py dans __get_result(self)
386 def __get_result(self):
387 si self._exception :
--> 388 lève self._exception
389 autres :
390 return self._result
OSError : [Errno 22] Argument non valide
Système:
python : 3.8.3 (par défaut, 2 juillet 2020, 17:30:36) [MSC v.1916 64 bits (AMD64)]
exécutable : C:Users\tlbh9\Anaconda3\python.exe
ordinateur : Windows-10-10.0.18362-SP0
Dépendances Python :
pépin : 20.1.1
outils de configuration : 49.2.0.post20200714
sklearn: 0.23.1
numpy : 1.18.5
scipy : 1.5.0
Cython : 0.29.21
panda : 1.0.5
matplotlib : 3.2.2
joblib : 0.16.0
threadpoolctl : 2.1.0
Construit avec OpenMP : vrai
Merci d'avoir contribué !@tluocs Pouvez-vous partager le code complet alors que j'essayais de reproduire le problème, il dit que param_grid n'est pas défini.
Je veux savoir comment vous avez affecté param_grid également feature_matrix.
Il serait préférable que vous puissiez partager toutes les variables utilisées dans le code des lignes ci-dessus pour reproduire le problème.
Merci Anshu. Le code est assez lourd donc il ne semble pas facile de reproduire le problème. C'est pourquoi j'essayais de saisir toutes les informations nécessaires lorsque je soulevais le problème. Maintenant, je viens de le résoudre en mettant à jour mon python et mon scikit-learn (bien que ma version précédente était déjà assez nouvelle, qui datait de juillet 2020). Je suppose donc que ce "bug" (si c'est le cas) a peut-être été corrigé dans la dernière version.
Merci @tluocs d'avoir @AnshuTrivedi d'avoir jeté un coup d'œil à cela.
Si j'ai bien compris le problème a été résolu avec une mise à jour, je la ferme. N'hésitez pas à rouvrir si quelque chose doit encore être réparé. Merci.