<[개정2판] 파이썬 라이브러리를 활용한 머신러닝>은 scikit-learn의 코어 개발자이자 배포 관리자인 안드레아스 뮐러Andreas Mueller와 매쉬어블의 데이터 과학자인 세라 가이도Sarah Guido가 쓴 Introduction to Machine Learning with Python의 번역서입니다.
개정2판에서는 사이킷런 1.x 버전에 맞추어 전체 코드를 업데이트하고 새롭게 추가된 기능을 반영했습니다. 또한 전체 코드를 구글 코랩(Colab)에서 실습할 수 있도록 수정하였습니다. 물론 풀 컬러 인쇄입니다! 🙂
주요 변경 사항은 다음과 같습니다.
QuantileRegressor
예제 추가SGDClassifier
,SGDRegressor
예제 추가n_features_in_
,feature_names_in_
,get_feature_names_out()
메서드 설명 추가- 히스토그램 기반 부스팅 예제 추가
permutation_importance()
함수 설명 추가- 트리 기반 앙상블 모델의 매개변수 비교
- 설명된 분산 비율, 엘보우 메서드 예제 추가
RandomizedSearchCV
,HalvingGridSearchCV
예제 추가
- 온라인/오프라인 서점에서 판매중입니다. [YES24], [교보문고], [한빛미디어]
- 504 페이지, 종이책:
33,000원—>29,700원, 전자책 26,400원 - 이 책에 실린 코드는 깃허브에서 주피터 노트북으로 볼 수 있습니다. [github], [nbviewer]
- 이 책의 코드는 scikit-learn 1.0.1, 1.2.1 버전에서 테스트 되었습니다.
이 페이지에서 책의 에러타와 사이킷런 버전 변경에 따른 바뀐 점들을 계속 업데이트 하겠습니다.
이 책에 대해 궁금한 점이나 오류가 있으면 이 페이지 맨 아래 Your Inputs에 자유롭게 글을 써 주세요. 또 제 이메일을 통해서 알려 주셔도 되고 구글 그룹스 파이썬 머신러닝 Q&A에 글을 올려 주셔도 좋습니다.
감사합니다! 🙂
Outputs (aka. errata)
- 1~5: 2쇄에 반영되었습니다.
- (p102) 사이킷런 1.3 버전부터
SGDClassifier
의loss
매개변수 중 로지스틱 손실을 의미하는'log'
가'log_loss'
로 바뀔 예정이므로 첫 번째 줄에서 “훈련합니다.”를 “훈련합니다(1.3 버전에서'log'
가'log_loss'
로 바뀔 예정입니다).“로 수정합니다. RandomForestClassifier
와ExtraTreesClassifier
의max_features
매개변수 기본값이'auto'
에서'sqrt'
로 바뀔 예정이므로,- (p127) 주석 47번을 다음과 같이 바꿉니다. “
RandomForestClassifier
의max_features
기본값이'auto'
로sqrt(n_features)
를 의미합니다. 1.3 버전에서는max_features
기본값이'auto'
에서'sqrt'
로 바뀔 예정입니다.“ - (p143) 표 2-2에서 랜덤포레스트와 엑스트라트리의 ‘특성 개수’ 항목을 다음과 같이 수정합니다.
분류: max_features=’auto’ (1.3 버전에서 ‘sqrt’로 변경예정)
회귀: 전체 특성 - (p315) 주석 20번에서 “랜덤 포레스트의 기본값은
"auto"
로 특성 개수의 제곱근을 나타내며, … 하지만max_features="auto"
로 설정하면…”을 “랜덤 포레스트 분류기는 기본적으로 특성 개수의 제곱근을 사용하며, … 하지만max_features="sqrt"
로 설정하면…”로 수정합니다.
- (p127) 주석 47번을 다음과 같이 바꿉니다. “
GradientBoostingClassifier
의loss
매개변수 기본값이 1.3 버전에서'deviance'
에서'log_loss'
로 바뀔 예정이므로- (p128) 주석 50번 네 번째 줄에서 “손실을 의미하는
'deviance'
입니다.”를 “손실을 의미하는'deviance'
입니다(1.3 버전에서'deviance'
가'log_loss'
로 바뀔 예정입니다).”로 수정합니다. - (p143) 표 2-2의 그레이디언트 부스팅의 ‘손실 함수’ 항목에서 “(로지스틱 회귀)”를 “(로지스틱 손실. 1.3 버전에서
'log_loss'
로 바뀔 예정)”으로 수정합니다.
- (p128) 주석 50번 네 번째 줄에서 “손실을 의미하는
- (p143)
HistGradientBoostingClassifier
의loss
매개변수 기본값이 1.3 버전에서'auto'
에서'log_loss'
로 바뀔 예정이므로 표 2-2의 히스토그램 기반 부스팅의 ‘손실 함수’ 항목에서 “(이진분류는'binary_crossentropy'
, 다중 분류는'categorical_crossentropy'
)”을 “(로지스틱 손실. 1.3 버전에서'log_loss'
로 바뀔 예정)”로 수정합니다. - (p297) 버전 1.1에서
OneHotEncoder
클래스에 자주 등장하지 않는 범주를 하나로 묶어주는min_frequency
와max_categories
매개변수가 추가 되었습니다. 4.2절 아래 세 번째 줄에서 “OneHotEncoder
클래스에 구현되어 있습니다.”를 “OneHotEncoder
클래스에 구현되어 있습니다.<주석>옮긴이_ 버전 1.1에서 추가된min_frequency
매개변수를 사용하면 특정 횟수 또는 비율 보다 적게 등장하는 범주를 하나의 특성으로 합칠 수 있습니다. 또한max_categories
매개변수를 사용하여 원-핫 인코딩으로 만들어지는 특성의 개수를 제한할 수 있습니다.</주석>“로 수정합니다. - (p32) 아래에서 4번째 줄 주석에서 “희박 행렬로 변환합니다”를 “희소 행렬로 변환합니다”로 수정합니다.(김*진 님)
- (p62) In [9]의 코드를 다음과 같이 수정합니다.
data_url = "http://lib.stat.cmu.edu/datasets/boston"
raw_df = pd.read_csv(data_url, sep="\s+", skiprows=22, header=None)
data = np.hstack([raw_df.values[::2, :], raw_df.values[1::2, :2]])
target = raw_df.values[1::2, 2]
print("데이터의 형태:", data.shape) - (p62) 주석 4번의 마지막 문장을 다음과 같이 수정합니다. “사이킷런의
load_boston()
함수는 1.2 버전에서 삭제되었습니다.” - (p312) In [37] 코드의 처음 다섯 라인을 다음과 같이 수정합니다.
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
# 보스턴 주택 데이터셋이 1.2 버전에서 삭제되므로 직접 다운로드합니다.
data_url = "http://lib.stat.cmu.edu/datasets/boston"
raw_df = pd.read_csv(data_url, sep="\s+", skiprows=22, header=None)
data = np.hstack([raw_df.values[::2, :], raw_df.values[1::2, :2]])
target = raw_df.values[1::2, 2]
X_train, X_test, y_train, y_test = train_test_split(data, target,
random_state=0)
- (p430) In [30] 코드의 처음 세 라인을 다음과 같이 수정합니다.
# 보스턴 주택 데이터셋이 1.2 버전에서 삭제되므로 직접 다운로드합니다.
data_url = "http://lib.stat.cmu.edu/datasets/boston"
raw_df = pd.read_csv(data_url, sep="\s+", skiprows=22, header=None)
data = np.hstack([raw_df.values[::2, :], raw_df.values[1::2, :2]])
target = raw_df.values[1::2, 2]
X_train, X_test, y_train, y_test = train_test_split(data, target,
random_state=0) - (p271) In [86] 코드 마지막 라인, (p273) In [88] 아래에서 6번째 라인, (p280) In [95] 아래에서 3번째 라인, (p282) In [96] 아래에서 5번째 라인, 을 다음과 같이 수정합니다.
ax.imshow(image.reshape(image_shape))
- (p276) In [90] 코드에서 마지막 라인을 다음과 같이 수정합니다.
ax.imshow(pca.inverse_transform(center).reshape(image_shape))
Your Inputs