이 책은 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)
- (p163) 첫 번째 식과 그 다음 줄, (p164) 네 개의 식과 3번째 4번째 줄, (p165) 두 번째, 세 번째 식에서
을
로 정정합니다.(조*우 님)
- (p134) 4.2.4절 아래 2번 항목의 문단에서 “마지막으로
learning_rate=3
으로 설정합니다”를 “마지막으로learning_rate=1.0
으로 설정합니다”로 정정합니다.(박*삭 님) - (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')
로 정정합니다.(심*철 님) - (p58) 첫 번째 코드 블럭에서
model = XGBRegressor
를model = XGBRegressor()
로 정정합니다.(심*철 님) - (노트: 2022년 5월 현재 코랩의 파이썬 버전은 3.7.x로 사이킷런 1.0.x만 설치됩니다. 코랩을 사용하는 경우 이 항목의 수정 사항을 무시하세요) 사이킷런 1.1 버전에 따른 변경 사항
- (p95, p96)
DecisionTreeClassifier
와DecisionTreeRegressor
,ExtraTreeClassifier
,ExtraTreeRegressor
,RandomForestClassifier
,RandomForestRegressor
,ExtraTreesClassifier
,ExtraTreesRegressor
의max_features
매개변수 중'auto'
가'sqrt'
와 동일합니다. 1.3 버전에서'auto'
가 삭제된다는 deprecated 경고가 발생하므로'auto'
를'sqrt'
로 변경합니다.
(p95) 위에서 9번째 줄, (p96) 위에서 3번째 줄, (p119) 아래에서 6번째 줄, (p120) 위에서 7번째 줄과 아래에서 9번째 줄, (p121) 위에서 4번째 줄과 아래에서 12번째 줄.
- (p95, p96)
- 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_test
와y_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].values
를df_train[df_train['LABEL']==1].values
로 수정합니다. 아래에서 1번째 줄에서pos_label=2
를 삭제합니다. - (p352) 1.6 버전에서 범주형 변수에 대한 지원이 추가되었습니다. 두 번째 문단 끝에 “1.6버전에서는
'approx'
와'hist'
에서도 범주형 변수를 지원합니다.”를 추가합니다.
- 1.6 버전에서
- (p42) 위에서 5번째 줄에서 “열의 평균 값으로 누락된 값을 바꿉니다”를 “열의 중간 값으로 누락된 값을 바꿉니다”로 정정합니다.(심*철 님)
- (p57) 주석 19번의 마지막 줄에서
cv_results['test_core']
를cv_results['test_score']
로 정정합니다.(심*철 님)
Your Inputs