핸즈온 머신러닝 2/E

★★★★★ 머신러닝의 바이블! (s******u 님)
★★★★★ 머신러닝을 하는 개발자의 책장에서는 반드시 이 책을 찾을 수 있을 것입니다. (p******k 님)
♥♥♥♥ 매우 훌룡합니다 기본기까지 다져주는 책이라 생각합니다. (ho**76 님)
♥♥♥♥ 인기가 많다고 해서 구매했는데 왜 인기있는지 알거같아요. 이해하기 쉽습니다. (al**e0609 님)

이 책은 글로벌 베스트 셀러인 “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에서 테스트했습니다.
  • 번역 후기를 여기에 적었습니다.
  • 이 책을 읽은 독자들의 리뷰: 시나브로 님, Cory
  • 이 책의 동영상 강의를 유튜브와 인프런에서 볼 수 있습니다! Youtube, 인프런

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

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

감사합니다! 🙂


Outputs (aka. errata)

  • 1~12: 2쇄에 반영되었습니다.
  • ~35: 3쇄에 반영되었습니다.
  • ~89: 4쇄에 반영되었습니다.
  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 = (y_scores > threshold)
    >>> 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 포맷을 사용합니다.”
  49. (p845) 연습문제 18번 6번째 줄에서 “개발 세트에서 성능이 나쁘다면”을 “검증 세트에서 성능이 나쁘다면”으로 정정합니다.(김*훈 님)
  50. (p294) 위에서 3번째 줄에서 “더 구체적 말하면”을 “더 구체적으로 말하면”으로 수정합니다.(김*훈 님)
  51. (p850) 2번 문제에 대한 답변의 마지막 줄에서 \frac{2}{5} \times 0.5 - \frac{3}{5} \times 0 = 0.2\frac{2}{5} \times 0.5 + \frac{3}{5} \times 0 = 0.2로 수정합니다.(김*훈 님)
  52. (p43) 1.4.2절 아래 첫 번째 문장에서 “입력 데이터의 스트림stream부터”를 “입력 데이터의 스트림stream으로부터”로 수정합니다.(김*훈 님)
  53. (p100) 두 번째 문단 끝에 다음처럼 주석을 추가합니다. “… SimpleImputer의 객체를 생성합니다.<주석>옮긴이_ 사이킷런 0.22버전에서 최근접 이웃 방식으로 누락된 값을 대체하는 KNNImputer 클래스가 추가되었습니다.</주석>”
  54. (p109) 첫 번째 문단 끝에 다음처럼 주석을 추가합니다. “… 변환을 적용해보겠습니다.<주석>옮긴이_ 사이킷런 0.22버전에서 열 이름이나 데이터 타입을 기반으로 열을 선택할 수 있는 make_column_selector() 함수가 추가되었습니다.</주석>”
  55. (p118) 54번 주석 끝에 다음 문장을 추가합니다. “사이킷런 0.24버전에서 파라미터 탐색 범위를 좁혀가면서 컴퓨팅 자원을 늘려가는 HalvingGridSearchCVHalvingRandomSearchCV가 추가됩니다. 이 예제는 https://bit.ly/halving-grid-search를 참고하세요.”
  56. (p128) 첫 번째 문장 끝에 다음처럼 주석을 추가합니다. “… 구조를 가지고 있습니다.<주석>옮긴이_ 사이킷런 0.22버전에서 fetch_openml() 함수에 as_frame 매개변수가 추가되었습니다. 이 매개변수를 True로 설정하면 판다스 데이터프레임을 반환합니다.</주석>”
  57. (p140) 6번 주석 끝에 다음 문장을 추가합니다. “사이킷런 0.22버전에서 정밀도/재현율 곡선을 그려주는 plot_precision_recall_curve() 함수가 추가되었습니다.”
  58. (p142) 첫 번째 문장 끝에 다음처럼 주석을 추가합니다. “… 그래프를 그립니다.<주석>옮긴이_ 사이킷런 0.22버전에서 ROC 곡선을 그려주는 plot_roc_curve() 함수가 추가되었습니다.</주석>”
  59. (p149) 첫 번째 문장 끝에 다음처럼 주석을 추가합니다. “… 편리할 때가 많습니다.<주석>옮긴이_ 사이킷런 0.22버전에서 오차 행렬을 그래프로 그려주는 plot_confusion_matrix() 함수가 추가되었습니다.</주석>”
  60. (p188) 첫 번째 문단 2번째 줄에서 “2차방정식처럼 보이며 거의 선형적입니다“를 “3차방정식처럼 보입니다“로 정정합니다.
  61. (p230) 1번 주석 끝에 다음 문장을 추가합니다. “사이킷런 0.21버전에서 dot 파일을 만들지 않고 바로 트리를 그릴 수 있는 plot_tree() 함수도 추가되었습니다.”
  62. (p236) 5번 주석을 다음과 같이 바꿉니다. “옮긴이_ 사이킷런 0.21버전에서 히스토그램 기반 그레이디언트 부스팅이 추가되었고 presort 매개변수로 얻을 수 있는 성능 향상이 크지 않기 때문에 사이킷런 0.24버전에서 결정 트리와 그레이디언트 부스팅 클래스의 presort 매개변수가 삭제됩니다.”
  63. (p238) 9번 주석에서 “… min_impurity_decrease 분할 대상이 되기 위해 … min_impurity_split가 추가되었습니다“를 “… min_impurity_decrease가 추가되었습니다. 분할 대상이 되기 위해 … min_impurity_split는 0.25버전에서 삭제됩니다“로 수정합니다. 또 10번 주석 끝에서 “… 지원합니다“를 “… 지원했지만 0.22버전에서 비용 복잡도 기반의 사후 가지치기를 위한 ccp_alpha 매개변수가 결정 트리와 트리 기반의 앙상블 모델에 추가되었습니다“로 수정합니다.
  64. (p254) 7.4절 아래 두 번째 문장 끝에 다음처럼 주석을 추가합니다. “… 크기로 지정합니다.<주석>옮긴이_ 사이킷런 0.22버전에서 랜덤 포레스트 클래스에 부트스트랩 샘플 크기를 지정할 수 있는 max_samples 매개변수가 추가되었습니다. 샘플 크기를 정수로 입력하거나 비율을 실수로 지정할 수 있습니다. 기본값은 훈련 세트 전체 크기입니다.<주석>”
  65. (p262) 7.5.2절에서 두 번째 문단, 첫 번째 줄에서 “그레이디언트 부스팅은 회귀 문제에도 아주 잘 작동합니다”를 “그레이디언트 부스팅은 분류 문제에도 아주 잘 작동합니다”로 정정합니다.
  66. (p266) 첫 번째 문단 끝에 다음처럼 주석을 추가합니다. “… 훈련을 멈춥니다.<주석>옮긴이_ 사이킷런 0.20버전에서 그래디언트 부스팅에 조기 종료 기능이 추가되었습니다. 훈련 데이터에서 validation_fraction 비율(기본값 0.1)만큼 떼어 내어 측정한 손실이 n_iter_no_change 반복 동안에 tol 값(기본값 1e-4) 이상 향상되지 않으면 훈련이 멈춥니다.</주석>”
  67. (p267) 두 번째 문단 끝에 다음처럼 주석을 추가합니다. “… 매우 비슷합니다.<주석>옮긴이_ 이외에도 히스토그램 기반 그레이디언트 부스팅을 구현한 LightGBM(https://lightgbm.readthedocs.io)이 있습니다. 사이킷런 0.21버전에서 히스토그램 기반 그레이디언트 부스팅을 구현한 HistGradientBoostingClassifierHistGradientBoostingRegressor가 추가되었습니다.</주석>”
  68. (p271) 첫 번째 문장 끝에서 다음처럼 주석을 추가합니다. “… 지원하지 않습니다.<주석>옮긴이_ 사이킷런 0.22버전에서 StackingClassifierStackingRegressor가 추가되었습니다.</주석>”
  69. (p319) 9.1.5절 아래 첫 번째 문단 끝에 다음처럼 주석을 추가합니다. “… 훈련해보겠습니다.<주석>옮긴이_ 사이킷런 0.24버전에서 준지도 학습을 위한 SelfTrainingClassifier가 추가됩니다.</주석>”
  70. (p358) 첫 번째 문단 끝에서 “… 다중 출력 분류기multioutput classifier입니다.”를 “… 다중 레이블 분류기multilabel classifier입니다.”로 정정합니다.
  71. (p380) 아래에서 두 번째 문단 끝에서 “(89% 검증 정확도에 가까이 도달할 것입니다)”를 “(89.4% 검증 정확도에 가까이 도달할 것입니다)”로 수정합니다.
  72. (p405) 페이지 끝에 다음처럼 주석을 추가합니다. “… 배치 크기를 사용해보세요.<주석>옮긴이_ 텐서플로 2.4버전에서 케라스 모델의 compile() 메서드에 있는 steps_per_execution 매개변수를 1이상으로 설정하면 계산 그래프를 한 번 실행할 때 여러 배치를 처리할 수 있기 때문에 GPU를 최대로 활용하고 배치 크기를 바꾸지 않고 훈련 속도를 높일 수 있습니다.</주석>”
  73. (p408) 6번 문제 두 번째와 세 번째 항목에서 “가중치 벡터“를 “가중치 행렬“로 정정합니다.
  74. (p465) 12.2절 아래 첫 번째 문단 끝에 다음처럼 주석을 추가합니다. “… 방법을 알아봅니다.<주석>옮긴이_ 텐서플로 2.4버전에서 넘파이 호환 API인 tf.experimental.numpy가 추가되었습니다.</주석>”
  75. (p475) 첫 번째 코드 블럭에서 my_softplus 함수 옆의 주석을 “# tf.nn.softplus(z)와 반환값이 같습니다.“에서 “# tf.nn.softplus(z)가 큰 입력을 더 잘 다룹니다.“로 수정합니다.
  76. (p492) 22번 주석 끝에 다음 문장을 추가합니다. “이 예는 번역서 깃허브에 있는 custom_model_in_keras.ipynb 주피터 노트북을 참고하세요.”
  77. (p531) 13.3.3절 아래 첫 번째 문장 끝에 다음처럼 주석을 추가합니다. “… 노력하고 있습니다.<주석>옮긴이_ tf.keras.layers.experimental.preprocessing 아래 이미지 처리, 이미지 증식, 범주형 데이터에 관련된 전처리 층이 추가되었습니다.</주석>”
  78. (p633) 첫 번째 문단 마지막 부분에 “타깃(마지막 글자)를 분리하겠습니다”를 “타깃(마지막 100개의 글자)를 분리하겠습니다”로 정정합니다.
  79. (p662) [식 16-2] 위 두 번째 줄에서 “아래쪽에 (전치되어) 표현되어 있습니다”를 “위쪽에 (전치되어) 표현되어 있습니다”로 정정합니다.
  80. (p663) 위에서 네 번째 줄에서 “왼쪽 아래 수직 점선으로”를 “왼쪽 수직 점선으로”로 정정합니다.
  81. (p711) [그림 17-19] 위의 “예를 들어 생성자의 출력을 ~ 풀링 층이 뒤따릅니다).” 문단을 다음 문단으로 교체합니다.
    “예를 들어 생성자의 출력을 4 × 4에서 8 × 8로 크게하려면(그림 17-19) 기존 합성곱 층(“합성곱 층 1”)에 (최근접 이웃 필터링을 사용한27) 업샘플링 층을 추가하여 8 × 8 크기 특성 맵을 출력합니다. 이 특성 맵이 새로운 합성곱 층(“합성곱 층 2”)으로 주입되고 다시 새로운 출력 합성곱 층으로 주입됩니다. “합성곱 층 1”의 훈련된 가중치를 잃지 않기 위해 ([그림 17-19]에 점선으로 표시된) 두 개의 새로운 합성곱 층을 점진적으로 페이드-인fade-in하고 원래 출력층을 페이드-아웃fade-out합니다. 이렇게 하기위해 새로운 출력(가중치 α)과 원래 출력(가중치 1 – α)의 가중치 합으로 최종 출력을 만듭니다. 비슷한 페이드-인fade-in/페이드-아웃fade-out 기법이 판별자에 새로운 합성곱 층을 추가할 때 사용됩니다(다운샘플링을 위해 평균 풀링 층이 뒤따릅니다). 모든 합성곱 층은 “same” 스트라이드 1을 사용하므로 입력의 높이와 너비를 보존합니다. 원래 합성곱 층도 마찬가지입니다. 따라서 (입력이 8 × 8이기 때문에) 8 × 8 출력을 만듭니다. 마지막으로 출력층의 커널 크기는 1입니다. 이를 사용해 입력을 필요한 컬러 채널 수 (일반적으로 3)로 투영합니다.”
  82. (p756) 위에서 3번째 줄에 “오차는 전이 (s, r, s’)가 매우 놀랍다는”를 오차는 전이 (s, a, s’)가 매우 놀랍다는”로 정정합니다.
  83. (p811) 주석 16번 끝에 다음 문장을 추가합니다. “텐서플로 2.4에서 GPU 메모리 사용량을 반환하는 tf.config.experimental.get_memory_usage() 함수가 추가되었습니다.”
  84. (p834) 첫 번째 문단 끝에 다음처럼 주석을 추가합니다. “… 훈련 코드를 실행합니다.<주석>옮긴이_ MultiWorkerMirroredStrategy는 텐서플로 2.4에서 experimental을 벗어나 안정 API가 됩니다.</주석>” 또한 마지막 문단, 마지막 문장 끝에 다음처럼 주석을 추가합니다. “… 생성자에 전달하세요.<주석>옮긴이_ 텐서플로 2.4에서 CollectiveCommunication 클래스의 이름이 CommunicationImplementation로 바뀝니다.</주석>
  85. (p835) 두 번째 문단 끝에 다음처럼 주석을 추가합니다. “… 전략과 동일합니다).<주석>옮긴이_ TPUStrategy는 텐서플로 2.3에서 experimental을 벗어나 안정 API가 되었습니다.</주석>
  86. (p849) 7번 문제 답의 마지막 항목에서 “\textbf{A}\textbf{A}'의 오른쪽에서 m \times n 단위 행렬 \textbf{I}_m이 추가되고 … 채워진 행렬입니다.”를 “\textbf{A}\textbf{A}'의 오른쪽에서 -\textbf{I}_m이 추가되고 … 채워진 행렬입니다(\textbf{I}_mm \times n 단위 행렬).”로 정정합니다. 또한 바로 아래 A 행렬의 첫 번째 행 [\textbf{A}' \;\; \textbf{I}_m][\textbf{A}' \,\, -\textbf{I}_m]으로 정정합니다.
  87. (p857) 6번 문제 답에서 2번째, 3번째 항목에 “가중치 벡터“를 “가중치 행렬“로 정정합니다.
  88. (p889) [식 C-4]의 우변의 두 항의 순서를 다음과 같이 바꿉니다.
    \sum_{i=1}^m \alpha^{(i)} - \dfrac{1}{2} \sum_{i=1}^m \sum_{j=1}^m \alpha^{(i)} \alpha^{(j)} t^{(i)} t^{(j)} \textbf{x}^{(i)^T} \textbf{x}^{(j)}
    그리고 [식 C-4] 아래 “여기서 \alpha^{(i)} \ge 0 \;\;\; i=1,2,\cdots,m 일 때”를 “여기서 \alpha^{(i)} \ge 0 \;\;\; i=1,2,\cdots,m 이고 \sum_{i=1}^m \alpha^{(i)} t^{(i)}=0 일 때”로 정정합니다.
    [식 C-4] 다음 문장에서 “이 함수를 최소화하고 … \hat{\alpha}^{(i)} \ge 0 벡터 …”를 “이 함수를 최대화하고 … \hat{\alpha}^{(i)} \ge 0이고 \sum_{i=1}^m \hat{\alpha}^{(i)} t^{(i)}=0 벡터 …”로 정정합니다.
    또한 [식 C-5] 아래에 “여기에서 n_s는 서포트 벡터의 개수입니다” 문장을 추가합니다.
  89. (p917) 첫 번째 문장 끝에 다음처럼 주석을 추가합니다. “… 그래프를 살펴보겠습니다.<주석>옮긴이_ 이 부록의 코드는 12장의 주피터 노트북에 포함되어 있습니다.</주석>”
  90. (p138) (3쇄, 4쇄) 첫 번째 코드 블럭의 아래 두 번째 줄과 세 번째 줄 사이에 다음과 같이 코드를 추가합니다.
    >>> threshold = 0
    >>> y_some_digit_pred = (y_scores > threshold)
    >>> y_some_digit_pred
    array([ True ])

Your Inputs

 

핸즈온 머신러닝 2/E”에 대한 5개의 생각

  1. 송인혁

    sklearn stacking regressor를 이용해서 모델구성 중입니다. 혹시 sklearn 모델에서 train, test, vaildation의 각각의 평가점수와 모델에 사용된 feature를 뽑아내서 한꺼번에 저장하려하는데 알려주실수 있으신가요?

    좋아요

    응답
    1. 박해선 글의 글쓴이

      안녕하세요. 그리드 서치 클래스의 객체에서 train/validation 점수를 얻을 수 있고 스태킹 객체의 estimators_ 속성에서 각 모델에 접근하실 수 있습니다. 감사합니다.

      좋아요

      응답
  2. 송인혁

    안녕하세요. 도움이 필요해서 댓글남깁니다.
    우선 제가 진행하고 있는 stacking regressor 관련질문입니다.

    stacking 진행시에 만약 weak_model1, weak_model2, weak_model3 3개의 모델이 있고, 최종 meta_model이 있을때 기존의 데이터 셋을 이용하여 먼저 weak_model을 학습시킬때 sklearn에서 각각의 weak_model1,2,3에 대해서 feature를 지정할수 있는지, 안된다면 처음 데이터 셋의 feature를 같이 공유해서 사용하는지 궁금합니다. 3주째 교수님이 그럴리가 없다고(개별 feature를 지정) 하는데 이제 제가 맞는지 틀린지도 모르겠어서 정말 마지막 확인차 댓글을 남깁니다. 제 생각에는 처음 데이터 셋의 feature를 같이 공유해서 사용해서 각각의 weak_model들이 선택해서 진행하는 것으로 판단이 되는데 제가 근거를 제시를 못해서 몇주째 제자리걸음 입니다..

    좋아요

    응답
    1. 박해선 글의 글쓴이

      안녕하세요. 많은 앙상블 모델이 샘플이나 특성을 무작위로 선택하여 사용합니다. 스태킹처럼 아예 다른 종류의 학습기를 사용하기도 하죠. 각 서브 모델이 전체 특성을 사용할지 서로 다른 특성을 사용할지는 선택의 문제이고 어느 것이 더 높은 성능을 낼지는 사전에 알 수 없습니다. 예를 들어 랜덤 포레스트는 랜덤하게 선택한 샘플과 특성을 사용해 훈련한 결정 트리를 사용합니다.
      죄송하지만 제가 개인적인 연구 주제에 대해 의견을 드리기는 어렵습니다. 교수님의 의견에 대한 더 자세한 논의가 필요하다면 학과 동료들이나 인터넷 포럼에 문의 부탁드립니다. 감사합니다.

      좋아요

      응답
      1. 송인혁

        각 서브 모델이 전체 특성을 사용할지 서로 다른 특성을 사용할지는 선택의 문제이고 어느 것이 더 높은 성능을 낼지는 사전에 알 수 없습니다. -> 이 부분이 제가 생각이 좁았습니다 . 개별적인 문제를 질문해서 죄송합니다. 화학에다 머신러닝을 합지다 하다보니 제가 찾아봤어야 했는데 아직 부족하네요. 다음 번 질문 때는 정말 머신러닝 부분만 질문하도록 하겠습니다. 다시 한번 죄송합니다

        Liked by 1명

답글 남기기

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

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.