• 카테고리

    질문 & 답변
  • 세부 분야

    딥러닝 · 머신러닝

  • 해결 여부

    미해결

GridSearchCV 로 교차검증 및 하이퍼 파라미터 튜닝시 오류

22.01.23 15:07 작성 조회수 757

0

랜덤포레스트로 GridSearchCV 로 파라미터 튜닝 후 학습을 돌리면 codec 오류가 발생합니다. 제공해 주신 소스를 그대로 실행해도 똑같은 오류가 납니다.
- 소스
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 , y_train) - 에러로그
UnicodeEncodeError: 'ascii' codec can't encode characters in position 18-19: ordinal not in range(128)

답변 1

답변을 작성해보세요.

0

안녕하십니까, 

해당 오류가 강의에 나오는 예제를 돌렸을 때 나오는 오류는 아닌것 같습니다만 맞는지요? 

그렇다면, 강의 예제가 아니고, 또한 전체 소스코드도 올려주지 않으셨기 때문에 뭐가 오류인지는 확실히 모르겠지만 해당 오류는 ordinal encoding 과정에서 발생하는 것 같습니다. 원본 데이터와 encoding 부분을 다시 한번 확인해 보십시요. 

감사합니다. 

hoh님의 프로필

hoh

질문자

2022.01.23

안녕하세요. 빠른 답변 감사드립니다.

소스는 제공해 주신 파일(4.3_앙상블학습_4.4_랜덤포레스트_4.5_GBM_Ver01.ipynb)을 수행하였고, 하나씩 에러 나는 부분을 찾아보니, 아래 GridSearchCV 함수에서 n_jobs=-1 을 삭제하면 에러가 나지 않습니다. processor 관련된 파라미터 같은데, 설치환경이나 OS 에 따른 문제인지 모르겠습니다.

소스코드 첨부가 안되서 주피터노트북의 해당 Cell을 카피하여 아래 페이스트하였습니다.

grid_cv = GridSearchCV(rf_clf , param_grid=params , cv=2, n_jobs=-1 )

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 , y_train)

print('최적 하이퍼 파라미터:\n', grid_cv.best_params_)
print('최고 예측 정확도: {0:.4f}'.format(grid_cv.best_score_))

감사합니다.

음, 저는 별 문제없이 수행이 됩니다만,,, 강의 예제에 있는 human activity dataset으로 된 데이터로 학습을 한건가요? 아님 다른 데이터 세트로 학습을 한건가요?

hoh님의 프로필

hoh

질문자

2022.01.23

네. 강의 예제에 있는 human activity dataset으로 된 데이터로 학습을 하였습니다. 아, 데이터는 제가 강의에서 알려주신대로 UCIML에서 human activity dataset을 다운 받아서 사용했고, 소스는 제공해주신 소스를 그대로 수행해보았습니다. 

다른 예제에서 n_jobs=-1 을 적용해보고 확인해보도록 하겠습니다.

감사합니다.

hoh님의 프로필

hoh

질문자

2022.01.23

구글링을 해보니, 이런 경우가 가끔 발생하나봅니다.

해결책은 아래와 같이 나와 있네요.

GridSearchCv에서 n_jobs 값을 1외의 다른 값으로 바꾸려 할때, UnicodeEncodeError: 'ascii' codec can't encode characters in position 18-21: ordinal not in range(18) 에러가 발생하는 경우,

C:\anaconda3\Lib\site-packages\joblib\externals\loky\backend\resource_tracker.py 의

           def _send(self, cmd, name, rtype):
                   msg = '{0}:{1}:{2}\n'.format(cmd, name, rtype).encode('ascii') 에서 ascii를 utf8로 바꾸면 해결됩니다.

 

위의 안내대로 해당 파일 수정 후 해결하였습니다.  감사합니다.

좋은 정보 감사합니다.