머신 러닝 교과서 3판

‘머신 러닝 교과서 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 버전, 텐서플로 2.4.0, 2.5.0, 2.6.0에서 테스트 되었습니다.

이 페이지에서 수집된 에러타를 정리하여 제공합니다. 또 사이킷런이나 텐서플로의 새로운 버전에 맞춰 바뀐 점들을 계속 업데이트 하겠습니다. 구글 그룹스의 머신러닝/딥러닝 도서 메일링 리스트에 가입하시면 책의 에러타나 수정사항을 자동으로 수신할 수 있습니다. 또 카카오톡 오픈 채팅에 오셔서 문의해 주셔도 좋습니다.

이 책에 대해 궁금한 점이나 오류가 있으면 이 페이지 맨 아래 ‘Your Inputs’에 자유롭게 글을 써 주세요. 또 제 이메일을 통해서 알려 주셔도 되고 구글 그룹스 머신러닝/딥러닝 도서 Q&A에 글을 올려 주셔도 좋습니다.

세바스찬이 번역서 표지가 마음에 드는 모양입니다! ㅎ

감사합니다! 🙂


Outputs (aka. errata)

  1. (p54) 위에서 4번째 줄, 7번째 줄에서 w_ow_0으로 정정합니다.
  2. (p61) 6번 주석에서 xy에 있는 위첨자는 샘플의 인덱스를 나타냅니다. w의 위첨자는 경사 하강법 단계를 나타냅니다. 혼돈을 피하기 위해 xy에 있는 위첨자를 빼고 벡터 표현(굵은 글씨)으로 바꿉니다. 또한 첫 번째 줄 끝에 누락된 괄호도 추가하여 다음과 같이 수정합니다. “퍼셉트론 학습 규칙에서 초기 가중치를 0으로 놓으면 \boldsymbol{w}^{(1)}=\boldsymbol{w}^{(0)}+\mathit{\Delta}\boldsymbol{w}^{(1)}=\boldsymbol{w}^{(0)}+\eta(\boldsymbol{y}-\boldsymbol{\hat{y}})\boldsymbol{x}=\boldsymbol{w}^{(0)}+\eta(\boldsymbol{y}-\Phi(\boldsymbol{w}^{(0)}\boldsymbol{x}))\boldsymbol{x}=\eta(\boldsymbol{y}-\Phi(0))\boldsymbol{x}=\eta(\boldsymbol{y}-1)\boldsymbol{x}
    와 같습니다. 이렇게 \eta가 가중치 벡터의 크기에만 영향을 미칩니다. \boldsymbol{w}^{(0)}가 0이 아니라면 \eta 값의 크기에 따라 \boldsymbol{w}^{(1)} 방향이 바뀔 수 있습니다.”
  3. (p71) Note에 있는 수식 3번째 줄에서 두 번째 시그마(\sum) 기호를 삭제합니다.
  4. (p40 주석5번, p112 주석 20번) “<핸즈온 머신러닝>(한빛미디어, 2018)”을 “<핸즈온 머신러닝 2판>(한빛미디어, 2020)”으로 수정합니다.
  5. (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로 수정합니다.
  6. (p97) 2장의 식과 일관성을 유지하기 위해 페이지 맨 아래 제곱 오차합 비용 함수 식을 J(\boldsymbol{w})=\sum_i \dfrac{1}{2}\left(\phi(z^{(i)})-y^{(i)}\right)^2에서 J(\boldsymbol{w})=\dfrac{1}{2}\sum_i \left(y^{(i)}-\phi(z^{(i)})\right)^2로 수정합니다.
  7. (p64) 주석 10번에서 https://github.com/gilbutITbook/080223/tree/master/code/ch02https://github.com/gilbutITbook/080223/tree/master/ch02로 정정하고, https://github.com/rickiepark/python-machine-learning-book-3rd-edition/tree/master/code/ch02https://github.com/rickiepark/python-machine-learning-book-3rd-edition/tree/master/ch02로 정정합니다.
  8. (p568) 첫 번째 문단 아래 코드에서 tf.keras.activation.tanh(z)tf.keras.activation.relu(z)로 정정합니다.(지*현 님)
  9. (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)로 정정합니다.
  10. (p168) 마지막 코드 블럭 바로 윗줄에서 ‘열을 하나 더 추가하고’를 ‘행을 하나 더 추가하고’로 정정합니다.
  11. (p169) 위에서 2번째 줄에서 print(ex_2f)print(l2_norm)로 정정합니다.
  12. (p154) 페이지 맨 위 “판다스를 사용한 범주형 데이터 인코딩”을 “4.2.1 판다스를 사용한 범주형 데이터 인코딩”로 정정합니다. 페이지 중간에 “4.2.1 순서가 있는 특성 매핑”을 “4.2.2 순서가 있는 특성 매핑”으로 정정합니다. (p155) 페이지 중간에 “4.2.2 클래스 레이블 인코딩”을 “4.2.3 클래스 레이블 인코딩”으로 정정합니다. (p157) 페이지 맨 위 “4.2.3 순서가 없는 특성에 원-핫 인코딩 적용”을 “4.2.4 순서가 없는 특성에 원-핫 인코딩 적용”으로 정정합니다.
  13. (p179) 2번째 문단 첫 번째 줄에서 itertools.combinationitertools.combinations로 정정합니다.
  14. (p191) 2번째 문단 첫 번째 줄에서 “데이터에 있는 특성을 잡아낼 수 있습니다”를 “데이터에 있는 어떤 패턴을 찾을 수 있습니다”로 수정합니다.
  15. (p195) 4번 주석의 첫 번째 문장 “13개 고윳값의 합은 1입니다”를 삭제합니다.
  16. (p526) 노트 중간 코드 블럭에서 >>>import tensorflow.experimental.numpy as tnp 라인 아래 >>>tnp.experimental_enable_numpy_behavior() 를 추가합니다.
  17. (p214, 215) <그림 5-9>의 앞뒤 문장을 다음처럼 변경합니다. “결과 그래프를 보면 클래스 2의 샘플 하나가 로지스틱 회귀 모델의 결정 경계에 가까이 놓여 있습니다.
    <그림 5-9>
    규제 강도를 낮추어 로지스틱 회귀 모델이 훈련 데이터셋의 모든 샘플을 더 확실하게 분류하도록 결정 경계를 옮길 수 있습니다.”
  18. (p637) 주석 13번의 마지막 줄에서 https://keras-ko.krhttps://keras.io로 수정합니다.
  19. (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)로 수정합니다.
  20. (p236) 아래에서 5번째 줄 끝에 다음 주석을 추가합니다. “구현되어 있습니다.<주석>역주 사이킷런 1.2 버전에서 TSNE 클래스의 init 매개변수의 기본값이 'random'에서 'pca'로 바뀔 예정입니다.”
  21. (p271) 사이킷런 1.0 버전에서 plot_confusion_matrix()가 deprecated 되었고 1.2 버전에서는 삭제될 예정입니다. 위에서 4번째 줄에서 from sklearn.metrics import plot_confusion_matrixfrom sklearn.metrics import ConfusionMatrixDisplay로 수정합니다. 위에서 5번째 줄과 아래에서 4번째 줄에서 plot_confusion_matrix(pipe_svc, ...)ConfusionMatrixDisplay.from_estimator(pipe_svc, ...)로 수정합니다.
  22. (p278) 사이킷런 1.0 버전에서 plot_roc_curve()가 deprecated 되었고 1.2 버전에서는 삭제될 예정입니다. 위에서 6번째 줄에서 from sklearn.metrics import plot_roc_curvefrom sklearn.metrics import RocCurveDisplay로 수정합니다. 위에서 12번째 줄에서 plot_roc_curve(pipe_lr, ...)RocCurveDisplay.from_estimator(pipe_lr, ...)로 수정합니다.
  23. (p279) 사이킷런 1.0 버전에서 plot_precision_recall_curve()가 deprecated 되었고 1.2 버전에서는 삭제될 예정입니다. 위에서 5번째 줄에서 from sklearn.metrics import plot_precision_recall_curvefrom sklearn.metrics import PrecisionRecallDisplay로 수정합니다. 위에서 11번째 줄에서 plot_precision_recall_curve(pipe_lr, ...)PrecisionRecallDisplay.from_estimator(pipe_lr, ...)로 수정합니다.
  24. (p328) 사이킷런 1.0에서 히스토그램 기반 부스팅이 experimental 모듈 아래에서 벗어났습니다. 따라서 위에서 7번째 줄에서 시작하는 문장부터 9번째 줄까지 다음 내용을 삭제합니다. “이 클래스는 아직 실험적이기 때문에 사용하기 전에 먼저 활성화해야 합니다.
    from sklearn.experimental import enable_hist_gradient_boosting
  25. (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)로 수정합니다.
  26. (p415) 아래에서 6번째 줄에 price_std 배열을 2차원으로 바꾸기 위해 inverse_transform(price_std)inverse_transform(price_std.reshape(-1,1))로 수정합니다.
  27. (p419) 사이킷런 1.0에서 'absolute_loss'가 deprecated 되었고 1.2 버전에서 삭제될 예정이기 때문에 대신 'absolute_error'를 사용합니다. 아래에서 4번째 줄에 loss='absolute_loss'loss='absolute_error'로 수정합니다.
  28. (p428) 사이킷런 1.0에서 get_feature_names() 메서드를 가진 변환기에 get_feature_names_out() 메서드가 추가되었고 get_feature_names()는 deprecated 되어 1.2 버전에서 삭제될 예정입니다. 주석의 끝에서 2번째 줄에 get_feature_names()get_feature_names_out()으로 수정합니다.
  29. (p436) 사이킷런 1.0에서 'mse'가 deprecated 되었고 1.2 버전에서 삭제될 예정이기 때문에 대신 'squared_error'를 사용합니다. 위에서 11번째 줄에 criterion='mse'criterion='squared_error'로 수정합니다.
  30. (p308) 아래에서 두 번째 줄에서 ‘여기서 볼 수 있듯이 규제 강도가 가장 낮을 때(C=0.001)’을 ‘여기서 볼 수 있듯이 규제 매개변수가 가장 낮을 때(C=0.001)’로 수정합니다.(이*민 님)

Your Inputs