• 카테고리

    질문 & 답변
  • 세부 분야

    딥러닝 · 머신러닝

  • 해결 여부

    미해결

랜덤 포레스트 오류와 관련한 질문입니다

21.04.28 16:04 작성 조회수 297

0

fit하는 과정에서 문제가 생긴 것 같고 몇달 전 저와 같은 질문을 하신분이 계셨는데 그분에게 답변해주신 것을 보고 따라해보려해도 해결이 안돼서 질문 남깁니다 
어떤식으로 해결해야할 지 설명해주시면 감사하겠습니다 ㅜㅜ!


from sklearn.model_selection import GridSearchCV params = { 'n_estimators':[100], 'max_depth' : [6, 8, 10, 12], 'min_samples_leaf' : [8, 12, 18 ], 'min_samples_split' : [8, 16, 20] } # RandomForestClassifier 객체 생성 후 GridSearchCV 수행 rf_clf = RandomForestClassifier(random_state=0, n_jobs=-1) grid_cv = GridSearchCV(rf_clf , param_grid=params , cv=2, n_jobs=-1 ) grid_cv.fit(X_train ) print('최적 하이퍼 파라미터:\n', grid_cv.best_params_) print('최고 예측 정확도: {0:.4f}'.format(grid_cv.best_score_))

---------------------------------------------------------------------------
UnicodeEncodeError Traceback (most recent call last) <ipython-input-45-a4ef1b9de222> in <module> 10 rf_clf = RandomForestClassifier(random_state=0, n_jobs=-1) 11 grid_cv = GridSearchCV(rf_clf , param_grid=params , cv=2, n_jobs=-1 ) ---> 12 grid_cv.fit(X_train , y_train,encoding='UTF-8') 13 14 print('최적 하이퍼 파라미터:\n', grid_cv.best_params_) C:\ProgramData\Anaconda3\lib\site-packages\sklearn\utils\validation.py in inner_f(*args, **kwargs) 61 extra_args = len(args) - len(all_args) 62 if extra_args <= 0: ---> 63 return f(*args, **kwargs) 64 65 # extra_args > 0 C:\ProgramData\Anaconda3\lib\site-packages\sklearn\model_selection\_search.py in fit(self, X, y, groups, **fit_params) 777 verbose=self.verbose) 778 results = {} --> 779 with parallel: 780 all_candidate_params = [] 781 all_out = [] C:\ProgramData\Anaconda3\lib\site-packages\joblib\parallel.py in __enter__(self) 728 def __enter__(self): 729 self._managed_backend = True --> 730 self._initialize_backend() 731 return self 732 C:\ProgramData\Anaconda3\lib\site-packages\joblib\parallel.py in _initialize_backend(self) 738 """Build a process or thread pool and return the number of workers""" 739 try: --> 740 n_jobs = self._backend.configure(n_jobs=self.n_jobs, parallel=self, 741 **self._backend_args) 742 if self.timeout is not None and not self._backend.supports_timeout: C:\ProgramData\Anaconda3\lib\site-packages\joblib\_parallel_backends.py in configure(self, n_jobs, parallel, prefer, require, idle_worker_timeout, **memmappingexecutor_args) 492 SequentialBackend(nesting_level=self.nesting_level)) 493 --> 494 self._workers = get_memmapping_executor( 495 n_jobs, timeout=idle_worker_timeout, 496 env=self._prepare_worker_env(n_jobs=n_jobs), C:\ProgramData\Anaconda3\lib\site-packages\joblib\executor.py in get_memmapping_executor(n_jobs, **kwargs) 18 19 def get_memmapping_executor(n_jobs, **kwargs): ---> 20 return MemmappingExecutor.get_memmapping_executor(n_jobs, **kwargs) 21 22 C:\ProgramData\Anaconda3\lib\site-packages\joblib\executor.py in get_memmapping_executor(cls, n_jobs, timeout, initializer, initargs, env, temp_folder, context_id, **backend_args) 40 _executor_args = executor_args 41 ---> 42 manager = TemporaryResourcesManager(temp_folder) 43 44 # reducers access the temporary folder in which to store temporary C:\ProgramData\Anaconda3\lib\site-packages\joblib\_memmapping_reducer.py in __init__(self, temp_folder_root, context_id) 529 # exposes exposes too many low-level details. 530 context_id = uuid4().hex --> 531 self.set_current_context(context_id) 532 533 def set_current_context(self, context_id): C:\ProgramData\Anaconda3\lib\site-packages\joblib\_memmapping_reducer.py in set_current_context(self, context_id) 533 def set_current_context(self, context_id): 534 self._current_context_id = context_id --> 535 self.register_new_context(context_id) 536 537 def register_new_context(self, context_id): C:\ProgramData\Anaconda3\lib\site-packages\joblib\_memmapping_reducer.py in register_new_context(self, context_id) 558 new_folder_name, self._temp_folder_root 559 ) --> 560 self.register_folder_finalizer(new_folder_path, context_id) 561 self._cached_temp_folders[context_id] = new_folder_path 562 C:\ProgramData\Anaconda3\lib\site-packages\joblib\_memmapping_reducer.py in register_folder_finalizer(self, pool_subfolder, context_id) 588 # semaphores and pipes 589 pool_module_name = whichmodule(delete_folder, 'delete_folder') --> 590 resource_tracker.register(pool_subfolder, "folder") 591 592 def _cleanup(): C:\ProgramData\Anaconda3\lib\site-packages\joblib\externals\loky\backend\resource_tracker.py in register(self, name, rtype) 189 '''Register a named resource, and increment its refcount.''' 190 self.ensure_running() --> 191 self._send('REGISTER', name, rtype) 192 193 def unregister(self, name, rtype): C:\ProgramData\Anaconda3\lib\site-packages\joblib\externals\loky\backend\resource_tracker.py in _send(self, cmd, name, rtype) 202 203 def _send(self, cmd, name, rtype): --> 204 msg = '{0}:{1}:{2}\n'.format(cmd, name, rtype).encode('ascii') 205 if len(name) > 512: 206 # posix guarantees that writes to a pipe of less than PIPE_BUF UnicodeEncodeError: 'ascii' codec can't encode characters in position 18-20: ordinal not in range(128)

답변 2

·

답변을 작성해보세요.

1

안녕하십니까,

일단 원인은 저도 잘 모르겠습니다만, 병렬 처리에 문제로 보입니다. 아래와 같이 처리해 보시지요.

1. 먼저 Dask와 같은 package가 설치되어 있는지 확인합니다. Dask는 Pandas와 유사하지만 아직 안정화가 되어 있지 않습니다.

2. Dask가 설치 되어 있지 않는데도 여전히 문제면, RandomForestClassifier와 GridSearchCV 생성 시 인자인 n_jobs=1 로 변경해 주시고 다시한번 테스트 해보시기 바랍니다. 적용후 상황 업데이트 부탁드립니다.

감사합니다.

nknk님의 프로필

nknk

질문자

2021.04.29

dask를 설치한 기억이 없어 2번으로 해보았더니 다행히 작동이 되는 것 같습니다 감사합니다 !

0

다행입니다. 현재 사용하고 계신 scikit learn version을 물어봐도 될까요.

아래와 같이 수행해 주시면 됩니다.

import sklearn

print(sklearn.__version__)

nknk님의 프로필

nknk

질문자

2021.06.01

알림을 잘 확인하지 않아 너무 늦게 답변을 봤습니다 죄송합니다

0.24.1이라고 뜹니다 !