XGBoost와 사이킷런으로 배우는 그레이디언트 부스팅

이 책은 Packt 출판사에서 나온 <Hands-On Gradient Boosting with XGBoost and scikit-learn>의 번역서입니다.

여러 가지 다양한 문제에서 가장 뛰어난 성능을 내는 머신러닝 알고리즘이 있다면 무엇일까요? 바로 그레이디언트 부스팅(Gradient Boosting) 알고리즘입니다. 이는 여러 캐글 대회의 입상자 솔루션에서도 알 수 있고 XGBoost, LightGBM, CatBoost 같은 그레이디언트 부스팅 라이브러리들이 계속 등장하는 것으로도 짐작할 수 있습니다. 이 책은 그레이디언트 부스팅 알고리즘을 소개하고 XGBoost와 사이킷런 구현을 사용해 그레이디언트 부스팅 모델을 만드는 방법을 안내합니다. 또한 번역서 부록으로 LightGBM과 CatBoost, 사이킷런의 히스토그램 기반 그레이디언트 부스팅을 소개합니다. <XGBoost와 사이킷런을 활용한 그레이디언트 부스팅>으로 그레이디언트 부스팅 모델을 배우고 캐글 대회에도 도전해 보시죠! 🙂

  • 온라인/오프라인 서점에서 판매중입니다. [Yes24], [교보문고], [한빛미디어]
  • 380페이지, 풀컬러: 34,000원 –> 30,600원, 전자책 27,200원
  • 이 책에 실린 코드는 깃허브에 있습니다.
  • 이 책의 코드는 사이킷런 1.0, 1.1과 XGBoost 1.5, 1.6에서 테스트되었습니다.

이 페이지에서 수집된 에러타를 정리하여 제공합니다. 이 책에 대해 궁금한 점이나 오류가 있으면 이 페이지 맨 아래 ‘Your Inputs’에 자유롭게 글을 써 주세요. 또 제 이메일을 통해서 알려 주셔도 되고 구글 그룹스 머신러닝/딥러닝 도서 Q&A에 글을 올려 주셔도 좋습니다. 또 카카오톡 오픈 채팅에 오셔서 문의해 주셔도 좋습니다.

감사합니다! 😀


Outputs (aka. errata)

  1. (p163) 첫 번째 식과 그 다음 줄, (p164) 네 개의 식과 3번째 4번째 줄, (p165) 두 번째, 세 번째 식에서 \hat{y}_l\hat{y}_i 로 정정합니다.(조*우 님)
  2. (p134) 4.2.4절 아래 2번 항목의 문단에서 “마지막으로 learning_rate=3으로 설정합니다”를 “마지막으로 learning_rate=1.0으로 설정합니다”로 정정합니다.(박*삭 님)
  3. (p45) 마지막 코드 블럭에서 df_bikes['dteday'].apply(pd.to_datetime, infer_datetime_format=True, errors='coerce')df_bikes['dteday'] = df_bikes['dteday'].apply(pd.to_datetime, infer_datetime_format=True, errors='coerce')로 정정합니다.(심*철 님)
  4. (p58) 첫 번째 코드 블럭에서 model = XGBRegressormodel = XGBRegressor()로 정정합니다.(심*철 님)
  5. (노트: 2022년 5월 현재 코랩의 파이썬 버전은 3.7.x로 사이킷런 1.0.x만 설치됩니다. 코랩을 사용하는 경우 이 항목의 수정 사항을 무시하세요) 사이킷런 1.1 버전에 따른 변경 사항
    • (p95, p96) DecisionTreeClassifierDecisionTreeRegressor, ExtraTreeClassifier, ExtraTreeRegressor, RandomForestClassifier, RandomForestRegressor, ExtraTreesClassifier, ExtraTreesRegressormax_features 매개변수 중 'auto''sqrt'와 동일합니다. 1.3 버전에서 'auto'가 삭제된다는 deprecated 경고가 발생하므로 'auto''sqrt'로 변경합니다.
      (p95) 위에서 9번째 줄, (p96) 위에서 3번째 줄, (p119) 아래에서 6번째 줄, (p120) 위에서 7번째 줄과 아래에서 9번째 줄, (p121) 위에서 4번째 줄과 아래에서 12번째 줄.
  6. XGBoost 1.6 버전에 따른 변경 사항
    • 1.6 버전에서 use_label_encoder 매개변수 기본값이 True에서 False로 변경되었습니다. 따라서 타깃 레이블을 0부터 인코딩해야 합니다.
      (p149) 위에서 13번째 줄에서 y = df.iloc[:,0]y = df.iloc[:,0] - 1로 수정합니다.
      (p221) 위에서 3번째 줄에서 y = df.iloc[:,0]y = df.iloc[:,0] - 1로 수정합니다.
      (p232) 위에서 8번째 줄에서 “recall_score() 함수를 호출하려면 y_test, y_pred와 함께 pos_label=2로 지정해야 합니다”를 “recall_score() 함수를 호출하려면 y_testy_pred를 전달해야 합니다”로 수정합니다. 그 아래 recall_score() 함수 호출에서 pos_label=2를 삭제합니다.
      (p233) 아래에서 7번째 줄에서 y = df.iloc[:,0]y = df.iloc[:,0] - 1로 수정합니다. 아래에서 1번째 줄에서 pos_label=2를 삭제합니다.
      (p237) 위에서 2번째 줄에서 df_train[df_train['LABEL']==2].valuesdf_train[df_train['LABEL']==1].values로 수정합니다. 아래에서 1번째 줄에서 pos_label=2를 삭제합니다.
    • (p352) 1.6 버전에서 범주형 변수에 대한 지원이 추가되었습니다. 두 번째 문단 끝에 “1.6버전에서는 'approx''hist'에서도 범주형 변수를 지원합니다.”를 추가합니다.
  7. (p42) 위에서 5번째 줄에서 “열의 평균 값으로 누락된 값을 바꿉니다”를 “열의 중간 값으로 누락된 값을 바꿉니다”로 정정합니다.(심*철 님)
  8. (p57) 주석 19번의 마지막 줄에서 cv_results['test_core']cv_results['test_score']로 정정합니다.(심*철 님)

Your Inputs