인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

김정구님의 프로필 이미지
김정구

작성한 질문수

[개정판] 파이썬 머신러닝 완벽 가이드

early_stopping_rounds,eval_metric 오류 관련 질문있습니다.

작성

·

536

0

분류 강의 위스콘신 유방암 예측 실습강의 코드입니다.

from xgboost import XGBClassifier

xgb_wrapper = XGBClassifier(n_estimators=400, learning_rate=0.05, max_depth=3)

evals = [(X_tr, y_tr), (X_val, y_val)]

xgb_wrapper.fit(X_tr, y_tr, early_stopping_rounds=50, eval_metric="logloss",

eval_set=evals, verbose=True)

ws50_preds = xgb_wrapper.predict(X_test)

ws50_pred_proba = xgb_wrapper.predict_proba(X_test)[:, 1]

 

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[36], line 5
      3 xgb_wrapper = XGBClassifier(n_estimators=400, learning_rate=0.05, max_depth=3)
      4 evals = [(X_tr, y_tr), (X_val, y_val)]
----> 5 xgb_wrapper.fit(X_tr, y_tr, early_stopping_rounds=50, eval_metric="logloss", 
      6                 eval_set=evals, verbose=True)
      8 ws50_preds = xgb_wrapper.predict(X_test)
      9 ws50_pred_proba = xgb_wrapper.predict_proba(X_test)[:, 1]

File ~\anaconda3\Lib\site-packages\xgboost\core.py:726, in require_keyword_args.<locals>.throw_if.<locals>.inner_f(*args, **kwargs)
    724 for k, arg in zip(sig.parameters, args):
    725     kwargs[k] = arg
--> 726 return func(**kwargs)

TypeError: XGBClassifier.fit() got an unexpected keyword argument 'early_stopping_rounds'

위 코드를 입력하였을때 이러한 오류가 뜨는데 무엇이 원인인지 잘모르겠습니다. Xgboost 버전은 2.1.0이고 파이썬버전같은경우는 3.1.1입니다.

 

아래는 인터넷에 검색하여 찾아낸 방법으로 입력한 코드입니다

from xgboost import XGBClassifier

xgb_wrapper=XGBClassifier(n_estimators=400,learning_rate=0.05,max_depth=3,early_stopping_rounds=50,eval_metric="logloss")

evals=[(X_tr,y_tr),(X_val,y_val)]

xgb_wrapper.fit(X_tr,y_tr,

eval_set=evals,verbose=True)

ws50_preds=xgb_wrapper.predict(X_test)

ws50_pred_proba=xgb_wrapper.predict_proba(X_test)[:,1]

 

아래는 위 코드에 대한 결과값입니다.

오차 행렬 [[35 2] [ 2 75]] 정확도: 0.9649, 정밀도: 0.9740, 재현율: 0.9740, F1: 0.9740, AUC:0.9961

 

아래는 책에 있는 코드를 입력하였을때의 결과값입니다.

오차 행렬

[[35 3]

[ 2 75]]

정확도: 0.9561, 정밀도: 0.9615, 재현율: 0.9740, F1: 0.9677, AUC:0.9933

 

제 생각에는 버전차이에 따른 문제같은데 수정된 코드를 사용하였을때 결과값은 도출되지만 기존 강의에서 사용하신 코드의 결과값과는 다릅니다. 수정된 코드를 그대로 사용하는게 맞을지 아니면 다른 방법이 있는지 궁금합니다.

답변 1

1

권 철민님의 프로필 이미지
권 철민
지식공유자

안녕하십니까,

설치 버전이 강의 실습 버전과 다르군요. conda 설치시 xgboost 버전이 바뀐 것 같습니다.

기존 xgboost 설치를 삭제하고, 다시 xgboost 설치가 필요해 보입니다.

먼저 conda 가상환경 command를 실행하신 후 xgboost를 삭제해 보십시요.

pip uninstall xgboost

이후에 xgboost를 아래 버전으로 재 설치 해보십시요.

pip install xgboost==1.5.0

이후에 jupyter notebook 기동하신 후

import xgboost

print(xgboost.__version__) 하셔서 버전이 1.5.0 인지 확인하고 다시 실습 코드 수행 부탁드립니다.

감사합니다.

김정구님의 프로필 이미지
김정구

작성한 질문수

질문하기