Antes de enviar um bug, certifique-se de que o problema já não tenha sido resolvido pesquisando os problemas anteriores.
Chamar GridSearchCV.fit()
com n_jobs=-1
levanta a exceção ' OSError: [Errno 22] Argumento inválido '.
Chamar GridSearchCV.fit()
com n_jobs=None
funciona perfeitamente
No caso de n_jobs=None
, a saída mostra que ele resolve n_jobs = 1 (embora em meus outros programas, qualquer execução bem-sucedida de GridSearchCV resolverá n_jobs = 6 na mesma máquina, isso pode não ser um grande problema. Apenas para sua informação).
Possivelmente, o problema pode estar em (1) lib \ site-packages \ joblib \ parallel.py ou _parallel_backends.py ou (2) lib \ concurrent \ futures_base.py, conforme mostrado no traceback abaixo.
search = GridSearchCV(RandomForestClassifier(), param_grid, cv=3, n_jobs=-1, return_train_score=True, verbose=2)
search.fit(feature_matrix, labels)
Nenhum erro é lançado.
OSError: [Errno 22] Argumento inválido
O trackback detalhado está anexado abaixo:
_RemoteTraceback Traceback (última chamada mais recente)
_RemoteTraceback:
"" "
Traceback (última chamada mais recente):
Arquivo "C: Users \ tlbh9 \ Anaconda3 \ lib \ site-packages \ joblib \ externals \ loky \ process_executor.py", linha 431, em _process_worker
r = call_item ()
Arquivo "C: Users \ tlbh9 \ Anaconda3 \ lib \ site-packages \ joblib \ externals \ loky \ process_executor.py", linha 285, em __call__
return self.fn ( self.args, * self.kwargs)
Arquivo "C: Users \ tlbh9 \ Anaconda3 \ lib \ site-packages \ joblib_parallel_backends.py", linha 595, em __call__
return self.func ( args, * kwargs)
Arquivo "C: Users \ tlbh9 \ Anaconda3 \ lib \ site-packages \ joblib \ parallel.py", linha 252, em __call__
return [func ( args, * kwargs)
Arquivo "C: Users \ tlbh9 \ Anaconda3 \ lib \ site-packages \ joblib \ parallel.py", linha 252, em
return [func ( args, * kwargs)
Arquivo "C: Users \ tlbh9 \ Anaconda3 \ lib \ site-packages \ sklearn \ model_selection_validation.py", linha 505, em _fit_and_score
print ("[CV]% s% s"% (msg, (64 - len (msg)) * '.'))
OSError: [Errno 22] Argumento inválido
"" "
A exceção acima foi a causa direta da seguinte exceção:
OSError Traceback (última chamada mais recente)
.......
212 search = GridSearchCV (RandomForestClassifier (), param_grid, cv = 3, n_jobs = -1, return_train_score = True, verbose = 2)
-> 213 search.fit (feature_matrix, rótulos)
.......
~ \ Anaconda3 \ lib \ site-packages \ sklearn \ utils \ validation.py in inner_f (* args, kwargs)71 FutureWarning)72 kwargs.update ({k: arg for k, arg in zip (sig.parameters, args)})---> 73 return f ( kwargs)
74 return inner_f
75
~ \ Anaconda3 \ lib \ site-packages \ sklearn \ model_selection_search.py in fit (self, X, y, groups, ** fit_params)
734 resultados de retorno
735
-> 736 self._run_search (avaliar_candidatos)
737
738 # Para avaliação multimétrica, armazene o best_index_, best_params_ e
~ \ Anaconda3 \ lib \ site-packages \ sklearn \ model_selection_search.py em _run_search (self, avaliar_candidatos)
1186 def _run_search (self, avaliar_candidatos):
1187 "" "Pesquisar todos os candidatos em param_grid" ""
-> 1188 avaliar_candidatos (ParameterGrid (self.param_grid))
1189
1190
~ \ Anaconda3 \ lib \ site-packages \ sklearn \ model_selection_search.py em avaliar_candidatos (candidatos_params)
706 n_splits, n_candidates, n_candidates * n_splits))
707
-> 708 out = paralelo (atrasado (_fit_and_score) (clone (base_estimator),
709 X, y,
710 treinar = treinar, testar = testar,
~ \ Anaconda3 \ lib \ site-packages \ joblib \ parallel.py em __call__
(auto, iterável)
1040
1041 com self._backend.retrieval_context ():
-> 1042 self.retrieve ()
1043 # Certifique-se de receber uma última mensagem dizendo que terminamos
1044 elapsed_time = time.time () - self._start_time
~ \ Anaconda3 \ lib \ site-packages \ joblib \ parallel.py em recuperação (self)
919 tentativa:
920 se getattr (self._backend, 'supported_timeout', False):
-> 921 self._output.extend (job.get (timeout = self.timeout))
922 mais:
923 self._output.extend (job.get ())
~ \ Anaconda3 \ lib \ site-packages \ joblib_parallel_backends.py em wrap_future_result (futuro, tempo limite)
540 AsyncResults.get de multiprocessamento. "" "
541 tentativa:
-> 542 return future.result (timeout = timeout)
543 exceto CfTimeoutError como e:
544 aumento TimeoutError de e
~ \ Anaconda3 \ lib \ concurrent \ futures_base.py no resultado (self, timeout)
430 aumento CancelledError ()
431 elif self._state == TERMINADO:
-> 432 return self .__ get_result ()
433
434 self._condition.wait (tempo limite)
~ \ Anaconda3 \ lib \ concurrent \ futures_base.py em __get_result (self)
386 def __get_result (self):
387 se self._exception:
-> 388 aumento self._exception
389 mais:
390 return self._result
OSError: [Errno 22] Argumento inválido
Sistema:
python: 3.8.3 (padrão, 2 de julho de 2020, 17:30:36) [MSC v.1916 64 bits (AMD64)]
executável: C: Users \ tlbh9 \ Anaconda3 \ python.exe
máquina: Windows-10-10.0.18362-SP0
Dependências do Python:
pip: 20.1.1
setuptools: 49.2.0.post20200714
sklearn: 0.23.1
entorpecido: 1.18.5
scipy: 1.5.0
Cython: 0.29.21
pandas: 1.0.5
matplotlib: 3.2.2
joblib: 0.16.0
threadpoolctl: 2.1.0
Construído com OpenMP: True
Obrigado por contribuir!@tluocs Você pode compartilhar o código completo enquanto eu tentei reproduzir o problema, ele está dizendo que param_grid não está definido.
Quero saber como você atribuiu param_grid e feature_matrix.
Seria melhor se você pudesse compartilhar todas as variáveis usadas no código de linhas acima para reproduzir o problema.
Obrigado, Anshu. O código é muito grande, então não parece fácil reproduzir o problema. É por isso que tentei inserir todas as informações necessárias ao levantar o problema. Agora, acabei de resolver isso atualizando meu python e scikit-learn para o mais recente (embora minha versão anterior já fosse bastante nova, que foi datada de julho de 2020). Então eu acho que esse "bug" (se for) pode ter sido corrigido na versão mais recente.
Obrigado @tluocs por contato e obrigado @AnshuTrivedi por dar uma olhada nisso.
Se bem entendi, o problema foi corrigido com uma atualização, vou encerrá-lo. Sinta-se à vontade para reabrir se algo ainda precisar ser consertado. Obrigado.