핸즈온 머신러닝 2/E

글로벌 베스트 셀러인 “Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow 2nd Edition“의 번역서입니다.

흔쾌히 추천사를 써 주신 권순선 님, 베타 리뷰에 참여해 주신 김대근, 김주현, 류회성, 박인창, 박찬성, 백혜림, 변성윤, 이고은, 이석곤, 이제현, 장대혁, 정도현, 최영철, 허민, 현재웅 님께 감사드립니다. 시작부터 끝까지 특별히 신경 써 주신 윤나리 님과 둔탁한 글을 다듬어 주신 백지선 님께 감사드립니다. 무엇보다도 번역서를 기다려 주시고 격려의 말을 보내 주신 모든 독자들에게 감사드립니다. 부디 즐거운 여행이 되시길 바라겠습니다! 🙂

  • 온라인/오프라인 서점에서 판매중입니다. Yes24, 교보문고, 알라딘, 한빛미디어
  • 952 페이지, 풀 컬러
  • 종이책: 55,000원—>49,500원, 전자책: 44,000원
  • 이 책에 실린 코드는 깃허브에 주피터 노트북으로 불 수 있습니다. Github, Nbviewer
  • 이 책의 코드는 scikit-learn 0.22, 0.23, TensorFlow 2.1, 2.2, 2.3에서 테스트했습니다.
  • 번역 후기를 여기에 적었습니다.
  • 이 책의 동영상 강의를 유튜브와 인프런에서 볼 수 있습니다! Youtube, 인프런

이 페이지에서 책의 에러타와 scikit-learn과 tensorflow 버전 변경에 따른 바뀐 점들을 계속 업데이트 하겠습니다. 구글 그룹스 도서 메일링 리스트에 가입하시면 책의 에러타나 수정사항을 자동으로 수신할 수 있습니다.

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

감사합니다! 🙂


Outputs (aka. errata)

  • 1~12: 2쇄에 반영되었습니다.
  • ~35: 3쇄에 반영되었습니다.
  1. (p254) 아래에서 2번째 줄에 RandomForestClassiferRandomForestClassifier로 정정합니다.
  2. (p459) 위에서 7번째 줄에 “15비트”를 “16비트”로 정정합니다.(현*웅 님)
  3. (p236) 위에서 5번째 줄에 O(n\times m \text{log}(m))O(n\times m \text{log}_2(m))로 정정합니다.(이*석 님)
  4. (p239) 아래에서 4번째 줄에 “예를 들어 x_1=0.6인 샘플의 클래스를 예측한다고”를 “예를 들어 x_1=0.6인 샘플의 타깃 값을 예측한다고”로 정정합니다.(이*석 님)
  5. (p844) 연습문제 11번 답의 시작 부분에서 “인스턴스 기반 학습”을 “사례 기반 학습”으로 바꿉니다.
  6. (p299) 아래에서 2번째 줄에 “비지도 학습 방업인”을 “비지도 학습 방법인”으로 정정합니다.(이*범 님)
  7. (p113) CAUTION 상자의 문단 마지막의 주석 번호를 51에서 52로 정정합니다.(김*훈 님)
  8. (p179) CAUTION 안의 주석 번호 2724로 정정합니다.
  9. (p368) 아래에서 7번째 줄에 PlainMLPlaidML로 정정합니다.
  10. (p168) CAUTION 안의 주석 번호 1311로 정정합니다.
  11. (p269) 첫 문장에서 ‘서브셋로 나눕니다’를 ‘서브셋으로 나눕니다’로 정정합니다.
  12. (p174) [그림 4-10] 아래에 있는 두 문단 사이에 CAUTION이 빠졌습니다. 다음을 추가합니다.
    CAUTION: 확률적 경사 하강법을 사용할 때 훈련 샘플이 IID(independent and identically distributed)를 만족해야 평균적으로 파라미터가 전역 최적점을 향해 진행한다고 보장할 수 있습니다. 이렇게 만드는 간단한 방법은 훈련하는 동안 샘플을 섞는 것입니다(예를 들어, 각 샘플을 랜덤하게 선택하거나 에포크를 시작할 때 훈련 세트를 섞습니다). 만약 레이블 순서대로 정렬된 샘플처럼 샘플을 섞지 않은 채로 사용하면 확률적 경사 하강법이 먼저 한 레이블에 최적화하고 그다음 두 번째 레이블을 최적화하는 식으로 진행됩니다. 결국 이 모델은 최적점에 가깝게 도달하지 못할 것입니다.
  13. (p97) 마지막 줄, (p98) 아래에서 5번째, 6번째 줄에 ‘침대‘를 ‘침실‘로 정정합니다.
  14. (p404) 학습률 섹션의 첫 번째 문장에서 ‘가중 중요한 하이퍼파라미터입니다’를 ‘가장 중요한 하이퍼파라미터입니다’로 정정합니다.(김*교 님)
  15. (p14) 첫 번째 줄에서 ‘처럼’을 ‘처럼’으로 정정합니다.(김*모 님)
  16. (p146) 아래에서 4번째 줄에서 “10개의 이진 분류기를 훈련시키고”를 “45개의 이진 분류기를 훈련시키고”로 정정합니다.(최*민 님)
  17. (p132) 위에서 3번째 줄 코드의 StratifiedKFold 클래스에서 shuffle=False 기본값을 그대로 두고 random_state를 지정하면 경고가 발생합니다. 0.24버전부터는 에러가 발생될 예정이므로 명시적으로 shuffle=True 매개변수를 추가합니다.
  18. (p93) housing.plot() 메서드 호출에서 x 축의 레이블을 올바르게 표시하기 위해 sharex=False 매개변수를 추가합니다.
  19. (p364) 페이지 중간에 있는 두 번째 목록 ReLU 함수 옆에 “(9장 참조)“를 삭제합니다.(최*민 님)
  20. (p288) 첫 번째 줄에 “500보다 그고“를 “500보다 크고“로 정정합니다.(김*훈 님)
  21. (p655) 페이지 중간 21번 주석 앞에 “성능을 크게 향상습니다”를 “성능을 크게 향상시켰습니다”로 바꿉니다.(김*훈 님)
  22. (p105) 44번 주석에서 Transformer MixinTransformerMixin으로 정정합니다.(김*훈 님)
  23. (p138) 첫 번째 코드 블럭 마지막 줄을 다음과 같이 수정합니다.(김*훈 님)
    >>> y_some_digit_pred
    array([ True])
  24. (p188) 아래에서 1번째와 2번째 줄에서 “\alpha …”을 “\alpha …”로 수정합니다.(김*훈 님)
  25. (p198) 아래에서 2번째 줄에서 “수평한 직선들은”을 “나란한 직선들은”로 수정합니다.(김*훈 님)
  26. (p317) 9.1.4절 아래 첫 번째 문장에서 “알고리즘을 적용하 전에”를 “알고리즘을 적용하 전에”로 정정합니다.(김*훈 님)
  27. (p175) 18번 주석 학습률 \eta^{(t)} 공식에서 분모가 t^{powet\_t}가 아니고 t^{power\_t}입니다.(조*기 님)
  28. (p309) 위에서 4번째 줄에서 “거리 계산을 많이 피함으로서“를 “거리 계산을 많이 피하여“로 수정합니다.(김*훈 님)
  29. (p462) 3번 주석에서 “커뮤티니에서 번역하고”를 “커뮤니티에서 번역하고”로 정정합니다.(김*훈 님)
  30. (p469) 7번 주석에서 “값을 증가하거나“를 “값을 증가시키거나“로 정정합니다.(김*훈 님)
  31. (p495) 위에서 2번째 줄에 “어떻게 사용지 알아봅시다”를 “어떻게 사용하는지 알아봅시다”로 정정합니다.(김*훈 님)
  32. (p83) NOTE에 있는 주석 번호 17을 18로 바꾸고 다음 주석을 페이지 아래 추가합니다. “18 옮긴이_ IPython kernel 4.4.0부터는 %matplotlib inline 매직 명령을 사용하지 않더라도 맷플롯립 1.5 이상에서는 자동으로 주피터 자체 백엔드로 설정됩니다.”(정*호 님)
  33. (p219) 주석 17번에서 “초평면(hyperplaine)”을 “초평면(hyperplane)”으로 정정합니다.(김*훈 님)
  34. (p275) 위에서 9번째 줄에서 “평균 거리는 약 428.25″를 “평균 거리는 약 408.25″로 정정합니다.
  35. (p64) 위에서 3번째 줄에서 “웹 사진과 모바일 앱 사진 데이터가 불일치하 때문인지”를 “웹 사진과 모바일 앱 사진 데이터가 불일치하 때문인지”로 정정합니다.(한*규 님)
  36. (p916) 첫 번째 문장에 있는 괄호 안에서 “여러 개의 레코드를 추출할 때는 추출할 원소의 개수를 지정해야 합니다”를 “후자의 경우 큐를 만들 때 추출할 원소의 개수를 지정해야 합니다”로 정정합니다.
  37. (p373) 두 번째 목록의 두 번째 줄에서 X.reshape(-1, 1)X.reshape(-1, 28*28) 로 정정합니다.
  38. (p377) NOTE 블럭 아래 6번째 줄에서 “(하나 또는 그 이상의 이진 레이블을 가진) 이진 분류를 수행한다면”을 “이진 분류나 다중 레이블 이진 분류를 수행한다면”으로 수정합니다.
  39. (p454) 첫 번째 코드 블럭 바로 아래 “training=True 로 지정하여 Dropout 층을 활성화하고 테스트 세트에서 100번의 예측을 만들어 쌓습니다. 드롭아웃이 활성화되었기 때문에 예측이 모두 달라집니다. predict() 메서드는 샘플이 행이고 클래스가 열로 이루어진 행렬을 반환합니다.“를 “model(X)는 넘파이 배열이 아니라 텐서를 반환한다는 것만 빼고는 model.predict(X)와 비슷하고 training 매개변수를 지원합니다. 이 코드 예에서 training=True로 지정하여 Dropout 층이 활성화되기 때문에 예측이 달라집니다.  테스트 세트에서 100개의 예측을 만들어 쌓았습니다. 모델을 호출할 때마다 샘플이 행이고 클래스마나 하나의 열을 가진 행렬이 반환됩니다.“로 수정합니다.
  40. (p494) 목록 바로 아래 첫 번째 문장 “옵티마이저의 clipnorm이나 clipvalue 하이퍼파라미터를 지정하면 가중치를 자동으로 클리핑해줍니다“를 “만약 그레이디언트 클리핑(11장 참조)을 하고 싶다면 clipnorm이나 clipvalue 하이퍼파라미터를 지정하세요“로 수정합니다.
  41. (p740) 식 18-1에서 \sum_{s}\sum_{s'}으로 정정합니다.
  42. (p663) 첫 번째 문단 마지막 줄에서 “p=25와 (x 표시된) p=35 위치를”를 “p=22와 (x 표시된) p=35 위치를”로 정정합니다.
  43. (p317) 9.1.4절 아래 첫 번째 문장에서 “군집은 차원 축소에 효과적인 방법입니다. 특히 지도 학습 알고리즘을”을 “군집은 지도 학습 알고리즘을”로 수정합니다.
  44. (p319) 첫 번째 문장에서 “하지만 클러스터 개수 k를”을 “클러스터 개수 k를”로 수정합니다.
  45. (p319) 첫 번째 문단 앞에 새로운 문단을 추가합니다. “군집이 데이터셋의 차원을 (64에서 50으로) 감소시켰지만 성능 향상은 대부분 변환된 데이터셋이 원본 데이터셋보다 선형적으로 더 잘 구분할 수 있기 때문입니다. 따라서 로지스틱 회귀를 사용하기에 더 좋습니다.
  46. (p291) 사이킷런 0.23 버전에서 KernelPCAinverse_transform 메서드에 있는 버그가 수정되었습니다. 따라서 이전 버전에서 만든 재구성 원상은 잘못된 그림입니다. 그림 8-11에 있는 왼쪽 아래 그림을 다음 그림으로 교체해주세요(주피터 노트북 In[59] 셀 참조).
  47. (p326) 위에서 2번째 줄에 “열을 k 개 가진 행렬”을 “k 개 열을 가진 행렬”로 수정합니다.
  48. (p391) 48번 주석을 다음과 같이 바꿉니다. “옮긴이_ save() 메서드는 기본적으로 SavedModel 포맷으로 저장합니다. 파일의 확장자가 ‘.h5’이거나 save_format 매개변수를 ‘h5’로 지정하면 HDF5 포맷을 사용합니다.”

Your Inputs

 

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google photo

Google의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중

This site uses Akismet to reduce spam. Learn how your comment data is processed.