‘머신 러닝 교과서 with 파이썬, 사이킷런, 텐서플로(개정 3판)’는 세바스찬 라시카Sebastian Raschka와 바히드 미자리리Vahid Mirjalili가 쓴 아마존 베스트셀러 <Python Machine Learning 3rd Edition>의 번역서입니다.

아마존 베스트 셀러 Python Machine Learning이 3판으로 돌아왔습니다! 넘파이로 밑바닥부터 알고리즘을 만들어 보는 것으로 시작하여 사이킷런과 텐서플로를 사용해 머신러닝과 딥러닝의 주요 알고리즘을 총 망라하고 있습니다. 이론은 물론 다양한 예제를 통해 실전 문제를 해결하는 방법을 배울 수 있습니다! 모든 코드는 깃허브에서 주피터 노트북으로 제공하며 코랩을 사용해 실행해 볼 수 있습니다. 이 책을 혼자 공부하시는 독자들을 위해 유튜브 강좌도 진행합니다!
3판에서는 사이킷런과 텐서플로 최신 버전에서 변경된 내용을 많이 포함하고 있습니다. 특히 딥러닝 파트는 합성곱 신경망, 순환 신경망 이외에도 GAN과 강화 학습 장이 추가되어 내용이 크게 보강되었습니다. 자그만치 868 페이지의 두꺼운 책을 풀 컬러로 인쇄해주신 길벗 출판사에게 감사드립니다. 많은 수식과 부족한 번역 때문에 고생하신 편집자, 교정자, 디자이너에게 정말 감사드립니다.
- 온라인/오프라인 서점에서 판매중입니다. [Yes24], [교보문고], [알라딘]
- 868페이지, 컬러:
44,000원 –> 39,600원, 전자책 35,200원 - 이 책에 실린 코드는 깃허브에 있습니다.
- 동영상 강의를 유튜브로 제공합니다.
- 이 책의 코드는 사이킷런 0.24, 1.0 버전, 텐서플로 2.4.0, 2.5.0, 2.6.0, 2.8.2에서 테스트 되었습니다.
이 페이지에서 수집된 에러타를 정리하여 제공합니다. 또 사이킷런이나 텐서플로의 새로운 버전에 맞춰 바뀐 점들을 계속 업데이트 하겠습니다. 이 책에 대해 궁금한 점이나 오류가 있으면 이 페이지 맨 아래 ‘Your Inputs’에 자유롭게 글을 써 주세요. 또 제 이메일을 통해서 알려 주셔도 되고 구글 그룹스 머신러닝/딥러닝 도서 Q&A에 글을 올려 주셔도 좋습니다. 또 카카오톡 오픈 채팅(참여코드: tensor)에 오셔서 문의해 주셔도 좋습니다.
세바스찬이 번역서 표지가 마음에 드는 모양입니다! ㅎ
감사합니다! 🙂
Outputs (aka. errata)
- ~16: 2쇄에 반영되었습니다.
- ~31: 3쇄에 반영되었습니다.
- ~38: 4쇄에 반영되었습니다.
- (p54) 위에서 4번째 줄, 7번째 줄에서
를
으로 정정합니다.
- (p61) 6번 주석에서
와
에 있는 위첨자는 샘플의 인덱스를 나타냅니다.
의 위첨자는 경사 하강법 단계를 나타냅니다. 혼돈을 피하기 위해
와
에 있는 위첨자를 빼고 벡터 표현(굵은 글씨)으로 바꿉니다. 또한 첫 번째 줄 끝에 누락된 괄호도 추가하여 다음과 같이 수정합니다. “퍼셉트론 학습 규칙에서 초기 가중치를 0으로 놓으면
와 같습니다. 이렇게가 가중치 벡터의 크기에만 영향을 미칩니다.
가 0이 아니라면
값의 크기에 따라
방향이 바뀔 수 있습니다.”
- (p71) Note에 있는 수식 3번째 줄에서 두 번째 시그마(
) 기호를 삭제합니다.
- (p40 주석5번, p112 주석 20번) “<핸즈온 머신러닝>(한빛미디어, 2018)”을 “<핸즈온 머신러닝 2판>(한빛미디어, 2020)”으로 수정합니다.
- (p19) 3장 목차에서 “3.3.2 다중 클래스를 위한 로지스틱 회귀 094″를 삭제합니다. 그 아래 목차 번호를 ‘3.3.3’–>’3.3.2′, ‘3.3.4’–>’3.3.3′, ‘3.3.5’–>’3.3.4′, ‘3.3.6’–>’3.3.5′ 로 수정합니다. (p94) “3.3.2 다중 클래스를 위한 로지스틱 회귀 ~ 앞서 언급한 OvR 기법입니다”를 노트로 바꿉니다. (p97) 3.3.3 목차 번호를 3.3.2로 수정합니다. (p100) 3.3.4 목차 번호를 3.3.3으로 수정합니다. (p104) 3.3.5 목차 번호를 3.3.4로 수정합니다. (p106) 3.3.6 목차 번호를 3.3.5로 수정합니다.
- (p97) 2장의 식과 일관성을 유지하기 위해 페이지 맨 아래 제곱 오차합 비용 함수 식을
에서
로 수정합니다.
- (p64) 주석 10번에서 https://github.com/gilbutITbook/080223/tree/master/code/ch02를 https://github.com/gilbutITbook/080223/tree/master/ch02로 정정하고, https://github.com/rickiepark/python-machine-learning-book-3rd-edition/tree/master/code/ch02를 https://github.com/rickiepark/python-machine-learning-book-3rd-edition/tree/master/ch02로 정정합니다.
- (p568) 첫 번째 문단 아래 코드에서
tf.keras.activation.tanh(z)
를tf.keras.activation.relu(z)
로 정정합니다.(지*현 님) - (p167) Note의 첫 번째 코드 블럭의 4번째 줄
X_test_robust = rbs.fit_transform(X_test)
를X_test_robust = rbs.transform(X_test)
로 정정합니다. 세 번째 코드 블럭 4번째 줄X_test_maxabs = mas.fit_transform(X_test)
를X_test_maxabs = mas.transform(X_test)
로 정정합니다. - (p168) 마지막 코드 블럭 바로 윗줄에서 ‘열을 하나 더 추가하고’를 ‘행을 하나 더 추가하고’로 정정합니다.
- (p169) 위에서 2번째 줄에서
print(ex_2f)
를print(l2_norm)
로 정정합니다. - (p154) 페이지 맨 위 “판다스를 사용한 범주형 데이터 인코딩”을 “4.2.1 판다스를 사용한 범주형 데이터 인코딩”로 정정합니다. 페이지 중간에 “4.2.1 순서가 있는 특성 매핑”을 “4.2.2 순서가 있는 특성 매핑”으로 정정합니다. (p155) 페이지 중간에 “4.2.2 클래스 레이블 인코딩”을 “4.2.3 클래스 레이블 인코딩”으로 정정합니다. (p157) 페이지 맨 위 “4.2.3 순서가 없는 특성에 원-핫 인코딩 적용”을 “4.2.4 순서가 없는 특성에 원-핫 인코딩 적용”으로 정정합니다.
- (p179) 2번째 문단 첫 번째 줄에서
itertools.combination
을itertools.combinations
로 정정합니다. - (p191) 2번째 문단 첫 번째 줄에서 “데이터에 있는 특성을 잡아낼 수 있습니다”를 “데이터에 있는 어떤 패턴을 찾을 수 있습니다”로 수정합니다.
- (p195) 4번 주석의 첫 번째 문장 “13개 고윳값의 합은 1입니다”를 삭제합니다.
- (p526) 노트 중간 코드 블럭에서
>>>import tensorflow.experimental.numpy as tnp
라인 아래>>>tnp.experimental_enable_numpy_behavior()
를 추가합니다. - (p214, 215) <그림 5-9>의 앞뒤 문장을 다음처럼 변경합니다. “결과 그래프를 보면 클래스 2의 샘플 하나가 로지스틱 회귀 모델의 결정 경계에 가까이 놓여 있습니다.
<그림 5-9>
규제 강도를 낮추어 로지스틱 회귀 모델이 훈련 데이터셋의 모든 샘플을 더 확실하게 분류하도록 결정 경계를 옮길 수 있습니다.” - (p637) 주석 13번의 마지막 줄에서
https://keras-ko.kr
을https://keras.io
로 수정합니다. - (p157) 넘파이 1.20버전부터 np.int가 deprecated 되었기 때문에 아래에서 7번째 줄에
OrdinalEncoder(dtype=np.int)
를OrdinalEncoder(dtype=int)
로 수정합니다. (p158) 위에서 12번째 줄에 “np.int
로 지정했습니다”를 “int
로 지정했습니다”로 수정합니다. (p159) 위에서 14번째 줄에OrdinalEncoder()
를OrdinalEncoder(dtype=int)
로 수정합니다. - (p236) 아래에서 5번째 줄 끝에 다음 주석을 추가합니다. “구현되어 있습니다.<주석>역주 사이킷런 1.2 버전에서
TSNE
클래스의init
매개변수의 기본값이'random'
에서'pca'
로 바뀔 예정입니다.” - (p271) 사이킷런 1.0 버전에서
plot_confusion_matrix()
가 deprecated 되었고 1.2 버전에서는 삭제될 예정입니다. 위에서 4번째 줄에서from sklearn.metrics import plot_confusion_matrix
를from sklearn.metrics import ConfusionMatrixDisplay
로 수정합니다. 위에서 5번째 줄과 아래에서 4번째 줄에서plot_confusion_matrix(pipe_svc, ...)
를ConfusionMatrixDisplay.from_estimator(pipe_svc, ...)
로 수정합니다. - (p278) 사이킷런 1.0 버전에서
plot_roc_curve()
가 deprecated 되었고 1.2 버전에서는 삭제될 예정입니다. 위에서 6번째 줄에서from sklearn.metrics import plot_roc_curve
를from sklearn.metrics import RocCurveDisplay
로 수정합니다. 위에서 12번째 줄에서plot_roc_curve(pipe_lr, ...)
를RocCurveDisplay.from_estimator(pipe_lr, ...)
로 수정합니다. - (p279) 사이킷런 1.0 버전에서
plot_precision_recall_curve()
가 deprecated 되었고 1.2 버전에서는 삭제될 예정입니다. 위에서 5번째 줄에서from sklearn.metrics import plot_precision_recall_curve
를from sklearn.metrics import PrecisionRecallDisplay
로 수정합니다. 위에서 11번째 줄에서plot_precision_recall_curve(pipe_lr, ...)
를PrecisionRecallDisplay.from_estimator(pipe_lr, ...)
로 수정합니다. - (p328) 사이킷런 1.0에서 히스토그램 기반 부스팅이
experimental
모듈 아래에서 벗어났습니다. 따라서 위에서 7번째 줄에서 시작하는 문장부터 9번째 줄까지 다음 내용을 삭제합니다. “이 클래스는 아직 실험적이기 때문에 사용하기 전에 먼저 활성화해야 합니다.from sklearn.experimental import enable_hist_gradient_boosting
“ - (p329) XGBoost 1.3.0에서 이진 분류 기본 평가 지표가
'error'
에서'logloss'
로 변경되었습니다. 또한 향후 레이블 인코딩을 수행하지 않는다는 경고가 발생합니다. 경고를 없애기 위해 위에서 6번째 줄에XGBClassifier(tree_method='hist', random_state=1)
을XGBClassifier(tree_method='hist', eval_metric='logloss', use_label_encoding=False, random_state=1)
로 수정합니다. - (p415) 아래에서 6번째 줄에
price_std
배열을 2차원으로 바꾸기 위해inverse_transform(price_std)
를inverse_transform(price_std.reshape(-1,1))
로 수정합니다. - (p419) 사이킷런 1.0에서
'absolute_loss'
가 deprecated 되었고 1.2 버전에서 삭제될 예정이기 때문에 대신'absolute_error'
를 사용합니다. 아래에서 4번째 줄에loss='absolute_loss'
를loss='absolute_error'
로 수정합니다. - (p428) 사이킷런 1.0에서
get_feature_names()
메서드를 가진 변환기에get_feature_names_out()
메서드가 추가되었고get_feature_names()
는 deprecated 되어 1.2 버전에서 삭제될 예정입니다. 주석의 끝에서 2번째 줄에get_feature_names()
를get_feature_names_out()
으로 수정합니다. - (p436) 사이킷런 1.0에서
'mse'
가 deprecated 되었고 1.2 버전에서 삭제될 예정이기 때문에 대신'squared_error'
를 사용합니다. 위에서 11번째 줄에criterion='mse'
를criterion='squared_error'
로 수정합니다. - (p308) 아래에서 두 번째 줄에서 ‘여기서 볼 수 있듯이 규제 강도가 가장 낮을 때(C=0.001)’을 ‘여기서 볼 수 있듯이 규제 매개변수가 가장 낮을 때(C=0.001)’로 수정합니다.(이*민 님)
- (p265) 위에서 18번째 줄에 “기본값은
'exhaust'
입니다”를 “기본값은'smallest'
입니다”로 정정합니다. - (p327) 사이킷런 1.0 변경 사항에 맞춰 위에서 7번째 줄에 있는 ‘mse’, ‘mae’를 ‘squared_error’, ‘absolute_error’로 바꿉니다. 8번째 줄에 있는 ‘mse’를 ‘squared_error’로 바꿉니다. 9번째 줄에서 ‘(기본값)를 사용합니다’를 ‘(기본값) 등을 사용합니다’로 바꿉니다. 10번째 줄에서 ‘사이킷런 0.26 버전에서’를 ‘사이킷런 1.1 버전에서’로 바꿉니다.
- (p111) 위에서 5번째 줄에 ‘정규할 수 있습니다’를 ‘정규화할 수 있습니다’로 정정합니다.(최*혁 님)
- (p211) 위에서 1번째 줄에 ‘클래스 내 산포행렬’을 ‘클래스 간의 산포행렬’로 정정합니다.(최*혁 님)
- (p154) 위에서 6번째, 8번째, 12번째, 14번째 줄의 class1을 class2로 바꿉니다. 같은 페이지 위에서 7번째, 13번째 줄의 class2를 class1으로 바꿉니다. (p155) 위에서 4번째, 6번째 줄의 class1을 class2로 바꿉니다. 같은 페이지 위에서 5번째 줄의 class2를 class1으로 바꿉니다.
- (p115) 사이킷런 1.3버전부터
SGDClassifier
의loss
매개변수 중 로지스틱 손실을 의미하는'log'
가'log_loss'
로 바뀔 예정이므로 주석 24번 끝에 다음 문장을 추가합니다. “사이킷런 1.3버전에서loss
매개변수 중'log'
가'log_loss'
로 바뀔 예정입니다.“
(만약 사이킷런 1.3버전을 사용한다면 p115 위에서 6번째 줄, p350 아래에서 2번째 줄, p355 아래에서 2번째 줄, p356 위에서 2번째 줄의'log'
를'log_loss'
로 바꾸어 사용하세요) - (p135)
RandomForestClassifier
의max_features
매개변수 기본값이'auto'
에서'sqrt'
로 바뀔 예정이므로 주석 31번의 첫 번째 문장 끝에 다음을 추가합니다. “(사이킷런 1.3버전에서 기본값이'auto'
에서'sqrt'
로 바뀝니다)“ - (p327)
GradientBoostingClassifier
의loss
매개변수 기본값이 1.3 버전에서'deviance'
에서'log_loss'
로 바뀔 예정이므로 그림 7-12 아래 4번째 줄에서 “로지스틱 회귀를 의미하는'deviance'
,”를 “로지스틱 회귀를 의미하는'deviance'
(사이킷런 1.3버전에서'deviance'
가'log_loss'
로 바뀝니다),”로 바꿉니다. - (p624) 그림 15-2 아래 공식에서
를
로 수정합니다.(이*엽 님)
- (p128) 위에서 2번째 줄, 5번째 줄, 10번째 줄에서
tree
를tree_model
로 정정합니다. (p131) 중앙의 코드 블록에서 3번째 줄에tree
를tree_model
로 정정합니다.(l***i 님) - (p564) 위에서부터 두 번째 수식에서 가장 오른쪽 식의 분모에 있는 두 번째 항
를
로 정정합니다.
- (p102) 위에서 4번째 줄에
X_train[(y_train == 0) | (y_train == 1)]
을X_train_std[(y_train == 0) | (y_train == 1)]
로 수정합니다.(김* 님)
P102에서
X_train을 사용하는데
label이 petal length [standardized]가 맞나요?
X_train_std를 사용해야 하는것이 아닌지 합니다.
좋아요좋아요
안녕하세요. 아이쿠 X_train_std를 사용하는게 맞습니다. 감사합니다!
좋아요좋아요