Sebelum mengirimkan bug, pastikan masalah tersebut belum diatasi dengan menelusuri masalah sebelumnya.
Memanggil GridSearchCV.fit()
dengan n_jobs=-1
memunculkan pengecualian ' OSError: [Errno 22] Invalid argument '.
Memanggil GridSearchCV.fit()
dengan n_jobs=None
berfungsi dengan baik
Dalam kasus n_jobs=None
, output menunjukkan bahwa itu menyelesaikan n_jobs=1 (walaupun di program saya yang lain, setiap menjalankan GridSearchCV yang berhasil akan menyelesaikan n_jobs=6 pada mesin yang sama, ini mungkin bukan masalah besar. Sekedar informasi).
Mungkin, masalahnya terletak pada (1) lib\site-packages\joblib\parallel.py atau _parallel_backends.py atau (2) lib\concurrent\futures_base.py, seperti yang ditunjukkan pada traceback di bawah ini.
search = GridSearchCV(RandomForestClassifier(), param_grid, cv=3, n_jobs=-1, return_train_score=True, verbose=2)
search.fit(feature_matrix, labels)
Tidak ada kesalahan yang dilemparkan.
OSError: [Errno 22] Argumen tidak valid
Trackback rinci terlampir di bawah ini:
_RemoteTraceback Traceback (panggilan terakhir terakhir)
_RemoteTraceback:
"""
Traceback (panggilan terakhir terakhir):
File "C:Users\tlbh9\Anaconda3\lib\site-packages\joblib\externals\loky\process_executor.py", baris 431, di _process_worker
r = barang_panggilan()
File "C:Users\tlbh9\Anaconda3\lib\site-packages\joblib\externals\loky\process_executor.py", baris 285, di __call__
return self.fn( self.args, * self.kwargs)
File "C:Users\tlbh9\Anaconda3\lib\site-packages\joblib_parallel_backends.py", baris 595, di __call__
return self.func( args, * kwargs)
File "C:Users\tlbh9\Anaconda3\lib\site-packages\joblib\parallel.py", baris 252, di __call__
kembalikan [func( args, * kwargs)
File "C:Users\tlbh9\Anaconda3\lib\site-packages\joblib\parallel.py", baris 252, di
kembalikan [func( args, * kwargs)
File "C:Users\tlbh9\Anaconda3\lib\site-packages\sklearn\model_selection_validation.py", baris 505, dalam _fit_and_score
print("[CV] %s %s" % (pesan, (64 - len(pesan)) * '.'))
OSError: [Errno 22] Argumen tidak valid
"""
Pengecualian di atas adalah penyebab langsung dari pengecualian berikut:
OSError Traceback (panggilan terakhir terakhir)
.......
212 pencarian = GridSearchCV(RandomForestClassifier(), param_grid, cv=3, n_jobs=-1, return_train_score=Benar, verbose=2)
--> 213 search.fit(feature_matrix, labels)
.......
~\Anaconda3\lib\site-packages\sklearn\utils\validation.py di inner_f(*args, kwargs)71 Peringatan Masa Depan)72 kwargs.update({k: arg for k, arg in zip(sig.parameters, args)})---> 73 kembali f( kwargs)
74 kembalikan inner_f
75
~\Anaconda3\lib\site-packages\sklearn\model_selection_search.py in fit(self, X, y, groups, **fit_params)
734 hasil pengembalian
735
--> 736 self._run_search(evaluate_candidates)
737
738 # Untuk evaluasi multi-metrik, simpan best_index_, best_params_ dan
~\Anaconda3\lib\site-packages\sklearn\model_selection_search.py di _run_search(self, evaluation_candidates)
1186 def _run_search(sendiri, evaluasi_kandidat):
1187 """Cari semua kandidat di param_grid"""
-> 1188 evaluation_candidates(ParameterGrid(self.param_grid))
1189
1190
~\Anaconda3\lib\site-packages\sklearn\model_selection_search.py di evaluation_candidates(candidate_params)
706 n_splits, n_candidates, n_candidates * n_splits))
707
--> 708 keluar = paralel(tertunda(_fit_and_score)(klon(dasar_estimator),
709 X, y,
710 kereta = kereta, tes = tes,
~\Anaconda3\lib\site-packages\joblib\parallel.py di __call__
(sendiri, dapat diubah)
1040
1041 dengan self._backend.retrieval_context():
-> 1042 self.retrieve()
1043 # Pastikan kita mendapatkan pesan terakhir yang memberitahu kita bahwa kita sudah selesai
1044 elapsed_time = time.time() - self._start_time
~\Anaconda3\lib\site-packages\joblib\parallel.py dalam mengambil (mandiri)
919 coba:
920 jika getattr(self._backend, 'supports_timeout', False):
-> 921 self._output.extend(job.get(timeout=self.timeout))
922 lainnya:
923 self._output.extend(pekerjaan.get())
~\Anaconda3\lib\site-packages\joblib_parallel_backends.py di wrap_future_result (masa depan, batas waktu)
540 AsyncResults.dapatkan dari multiproses."""
541 coba:
-> 542 kembalikan future.result(timeout=timeout)
543 kecuali CfTimeoutError sebagai e:
544 meningkatkan TimeoutError dari e
~\Anaconda3\lib\concurrent\futures_base.py dalam hasil (mandiri, batas waktu)
430 meningkatkan CancelledError()
431 elif self._state == SELESAI:
-> 432 kembalikan diri.__get_result()
433
434 self._condition.wait(batas waktu)
~\Anaconda3\lib\concurrent\futures_base.py di __get_result(self)
386 def __get_result(sendiri):
387 jika self._exception:
-> 388 meningkatkan diri._pengecualian
389 lainnya:
390 kembalikan diri._hasil
OSError: [Errno 22] Argumen tidak valid
Sistem:
python: 3.8.3 (default, 2 Juli 2020, 17:30:36) [MSC v.1916 64 bit (AMD64)]
dapat dieksekusi: C:Users\tlbh9\Anaconda3\python.exe
mesin: Windows-10-10.0.18362-SP0
Ketergantungan python:
pip: 20.1.1
setuptools: 49.2.0.post20200714
sklearn: 0.23.1
numpy: 1.18.5
sip: 1.5.0
Cython: 0.29.21
panda: 1.0.5
matplotlib: 3.2.2
joblib: 0.16.0
threadpoolctl: 2.1.0
Dibangun dengan OpenMP: Benar
Terima kasih telah berkontribusi!@tluocs Bisakah Anda membagikan kode lengkap ketika saya mencoba mereproduksi masalah yang dikatakan param_grid tidak ditentukan.
Saya ingin tahu bagaimana Anda menetapkan param_grid juga feature_matrix.
Akan lebih baik jika Anda dapat membagikan semua variabel yang digunakan dalam kode baris di atas untuk mereproduksi masalah.
Terima kasih Anshu. Kodenya cukup banyak sehingga sepertinya tidak mudah untuk mereproduksi masalah. Itu sebabnya saya mencoba memasukkan semua info yang diperlukan ketika saya mengangkat masalah ini. Sekarang saya baru saja menyelesaikannya dengan memutakhirkan python dan scikit-learn saya ke yang terbaru (walaupun versi saya sebelumnya sudah cukup baru, yang bertanggal Juli 2020). Jadi saya kira "bug" ini (jika ya) mungkin telah diperbaiki di rilis terbaru.
Terima kasih @tluocs telah menjangkau, dan terima kasih @AnshuTrivedi telah melihat ini.
Jika saya memahami dengan benar bahwa masalah telah diperbaiki dengan pembaruan, saya akan menutupnya. Jangan ragu untuk membuka kembali jika masih ada yang perlu diperbaiki. Terima kasih.