파이썬을 활용한 머신러닝 쿡북

x9791162241950
★★★★★ 좋은 내용, 멋진번역이네요(s9055038 님)
★★★★★ 머신러닝 전문가의 참고도서!(kjooh0220 님)
♥♥♥♥ 데이터사이언스 전처리 실무를 다루는 끝판왕!(na**mjjang 님)

‘파이썬을 활용한 머신러닝 쿡북’은 크리스 알본Chris Albon이 쓴 아마존 베스트셀러 ‘Machine Learning with Python Cookbook’의 번역서입니다.

이 책은 넘파이, 판다스, 사이킷런, 케라스 등을 사용한 머신러닝 핵심 레시피를 담고 있습니다. 짧은 레시피에서 부족한 부분은 덧붙임 섹션에 보완했습니다. 이 책에서 크리스만의 간결한 문장과 깔끔한 코드를 맛볼 수 있습니다. 어떤 작업을 하려는데 갑자기 메서드가 떠오르지 않을 때를 대비하여 책장에 꼭 들여 놓으세요! 🙂

  • 온라인/오프라인 서점에서 판매중입니다. [교보문고] [Yes24]
  • 508페이지, 컬러: 33,000원 –> 29,700원, 전자책: 26,400원
  • 이 책에 실린 코드는 깃허브에 있습니다.
  • 책의 코드는 케라스 2.2.4를 기준으로 하지만 깃허브는 최신 텐서플로 2.x을 기반으로 업데이트했습니다.
  • 이 책의 코드는 numpy 1.16.2, scikit-learn 0.21.2, 0.22.0, 0.23.0 pandas 0.24.2, TensorFlow 2.2.0, 2.3.0(또는 keras 2.2.4), 2.6.0에서 테스트 되었습니다.

이 페이지에서 책의 에러타와 라이브러리 버전 변경에 따른 바뀐 점들을 계속 업데이트 하겠습니다. 이 책에 대해 궁금한 점이나 오류가 있으면 이 페이지 맨 아래 ‘Your Inputs’에 자유롭게 글을 써 주세요. 또 제 이메일을 통해서 알려 주셔도 되고 구글 그룹스 머신러닝/딥러닝 도서 Q&A에 글을 올려 주셔도 좋습니다.

감사합니다! 🙂


Outputs (aka. errata)

  • 1~5: 2쇄에 반영되었습니다.
  1. (p60) 두 번째 코드 블럭의 주석에서 “랜덤하게 10번을 뽑습니다”를 “랜덤하게 5번을 뽑습니다”로 정정합니다.(이*찬 님)
  2. (p191) 레시피 7.4의 해결 섹션에 있는 코드 중에서 주석 “다섯 개의 날짜를 만듭니다”를 “150개의 날짜를 만듭니다”로 정정합니다.
  3. (p364) 두 번째 줄에서 “레시피 13.3 참조”를 “레시피 14.3 참조”로 정정합니다.(이*찬 님)
  4. (p456) 케라스 2.3 버전부터는 compile() 메서드의 metrics 매개변수에 쓴 문자열이 그대로 history 객체의 키 값이 됩니다. 케라스 2.3 버전 이상을 쓴다면 456페이지 아래쪽 코드 블럭의 첫 번째, 두 번째 줄에서 history.history["acc"]history.history["val_acc"]history.history["accuracy"]history.history["val_accuracy"] 로 바꾸어 주세요.(이*찬 님)
  5. (p93) ‘설명’ 단락의 첫 줄에서 value_uniquevalue_counts로 정정합니다.(정*민 님)
  6. (p151) 13번째 줄에서 OneHot EncoderOneHotEncoder로 정정합니다.
  7. (p136) 페이지 중간의 코드 중에서 Binarizer(18)Binarizer(threshold=18) 로 변경합니다. 사이킷런 0.23버전부터 이 매개변수가 0.25 버전에서 키워드 매개변수로 변경된다는 경고가 출력됩니다.
  8. (p422~423) p422 코드 중에서 KMeans(n_clusters=3,  random_state=0, n_jobs=-1)에 있는 n_jobs=-1을 삭제합니다. KMeans는 사이킷런 0.23 버전부터 OpenMP 기반으로 바뀌어 기본적으로 가능한 모든 코어를 활용합니다. p423에 8번째 줄의 “이렇게 하기 위해 n_jobs=-1로 설정합니다“를 “사이킷런 0.23버전부터 KMeans 클래스는 기본적으로 가능한 모든 코어를 사용합니다“로 변경합니다.
  9. (p458) from keras.callbacks import EarlyStopping, ModelCheckpointfrom keras import regularizer로 바꾸고, 렐루 활성화 함수를 사용하는 2개의 Dense 층을 추가하는 코드에 규제 매개변수 kernel_regularizer=regularizers.l2(0.01)를 추가합니다.(서*교 님)
  10. (p459) fit() 메서드 코드에서 epochs=3으로 바꾸고 callbacks=callbacks 매개변수를 삭제합니다.(서*교 님)
  11. (p203) 아래에서 4번째 줄에 “가장 우측 상단의 픽셀 강도는 140입니다”를 “가장 좌측 상단의 픽셀 강도는 140입니다”로 정정합니다.(이*훈 님)
  12. (p75, 79, 81, 85, 86, 88, 91, 93, 95, 97, 99, 100, 102, 107, 108, 110) 타이타닉 데이터를 다운로드하는 https://tinyurl.com/titanic_csv 주소에 문제가 생겨서 https://bit.ly/titanic_csv_data로 바꿉니다.
  13. (p177) 덧붙임의 첫 번째 문단 끝에 다음 주석을 추가합니다. “…설치할 수 있습니다.<주석>옮긴이_ 최신 버전의 tweepy 패키지가 설치될 경우 konlpy에서 StreamListener가 없다는 에러가 발생하므로 3.10버전을 설치해 주세요. pip install tweepy==3.10</주석>
  14. 사이킷런 1.0에서 get_feature_names() 메서드를 가진 변환기에 get_feature_names_out() 메서드가 추가되었고 get_feature_names()는 deprecated 되어 1.2 버전에서 삭제될 예정입니다. 따라서 (p128) 마지막 줄, (p129) 1번째 줄, (p156) 위에서 15, 17번째 줄, (p179) 마지막 줄, (180) 2번째 줄, (p493) 아래에서 2번째 줄에서 get_feature_namesget_feature_names_out으로 수정합니다.
  15. (p229) 위에서 3번째 줄에서 corner의 값을 정수로 변환하기 위해 corner[0].astype('int')로 수정합니다.
  16. (p252) 9.4절 [해결]의 첫 번째 문장 끝에 다음 주석을 추가합니다. “… 차원을 축소합니다.<주석>옮긴이_ 기본값인 init=None일 때 n_componentsn_samplesn_features 보다 작으면 init='nndsvd'가 됩니다. 사이킷런 1.1버전부터 이 값이 'nndsvda'로 바뀔 예정입니다.</주석>
  17. (p252) 아래에서 9번째 줄에서 NMF 객체를 만들 때 반복횟수를 늘려주기 위해 max_iter 매개변수를 추가합니다. nmf = NMF(n_components=10, max_iter=1000, random_state=1)
  18. (p283) 11.2절 [해결]의 첫 번째 문장 끝에 다음 주석을 추가합니다. “…모델을 만듭니다.<주석>옮긴이_ 보스턴 주택가격 데이터셋의 특성에는 흑인 인구 비율이 들어 있어 요즘 시대에 적절치 않다는 의견이 많았습니다. 사이킷런 1.0 버전에서 load_boston() 함수가 deprecated 되었고 1.2 버전에서 삭제될 예정입니다.</주석>
  19. 로지스틱 회귀 객체를 만들 때 반복횟수를 늘려주기 위해 (p300) 위에서 15번째 줄, (p311) 위에서 5번째 줄에 max_iter 매개변수를 추가합니다. classifier = LogisticRegression(max_iter=1000)
  20. (p312) 위에서 4번째 줄에 0 나눗셈 경고를 피하기 위해 다음처럼 zero_division 매개변수를 지정합니다. print(classification_report(target_test, target_predicted, labels=[0,1,2,3], zero_division=0))
  21. 사이킷런 0.22 버전에서 solver 매개변수의 기본값이 'liblinear'에서 'lbfgs'로 변경되었습니다. 'lbfgs''l2' 페널티만 지원합니다. 예제에서 'l1', 'l2' 페널티를 그리드서치로 탐색하기 위해 solver='liblinear'로 지정합니다. 또 반복 횟수를 늘려주기 위해 max_iter=1000을 추가합니다. (p318) 위에서 13번째 줄, (p320) 아래에서 3번째 줄, (p323) 위에서 15번째 줄, (p325) 아래에서 7번째 줄, (p327) 아래에서 8번째 줄, (p329) 위에서 11번째 줄에서 LogisticRegression()LogisticRegression(solver='liblinear', max_iter=1000)으로 바꿉니다.
  22. (p331) 위에서 8번째 줄에 반복 횟수를 늘려 주기 위해 max_iter 변수를 추가합니다. logit = linear_model.LogisticRegressionCV(max_iter=1000, Cs=100)
  23. (p332) 사이킷런 1.0에서 매개변수 변화에 따른 경고가 발생하지 않으므로 아래에서 4번째 줄을 다음처럼 수정합니다. logistic = linear_model.LogisticRegression(max_iter=1000)
  24. 사이킷런 1.0에서 매개변수 변화에 따른 경고가 발생하지 않으므로 위에서 (p333) 5번째 줄에 iid=False, 7번째 줄에 cv=3, 아래에서 4번째 줄에 iid=False, (p334) 위에서 8번째 줄에 cv=3을 삭제합니다.
  25. (p335) 위에서 2 번째 줄 끝에서 시작되는 문장, 아래에서 3번째 줄에 있는 문장, 마지막 줄에 있는 문장인 “경고를 출력하지 않기 위해 … 로 지정합니다”를 삭제합니다.
  26. (p355) 결정 트리의 criterion 매개변수 값인 mae가 사이킷런 1.0에서 deprecated되었고 1.2 버전에서 삭제될 예정입니다(mse도 마찬가지). 대신 'absolute_error'를 사용합니다. 위에서 6번째 줄을 decisiontree_mae = DecisionTreeRegressor(criterion="absolute_error", random_state=0)으로 수정합니다.
  27. (p374) 사이킷런 1.0에서 히스토그램 기반 부스팅이 experimental 모듈 아래에서 벗어났습니다. 따라서 위에서 8번째 줄 끝에서 시작하는 문장부터 12번째 줄까지 다음 내용을 삭제합니다.
    “이 클래스들은 실험적이기 때문에 명시적으로 사용한다는 것을 선언해야 합니다.
    # 히스토그램 기반의 그레이디언트 부스팅을 활성화하고 라이브러리를 임포트합니다.
    from sklearn.experimental import enable_hist_gradient_boosting
  28. (p397) 아래에서 2번째 줄에 compute_class_weight 함수에 키워드 매개변수를 추가합니다. compute_class_weight('balanced', classes=[0,1], y=target)
  29. (p98) 주석 2번을 삭제합니다. 아래에서 8번째 줄에 다음처럼 주석을 추가합니다. “바로 수정합니다.<주석>옮긴이_ inplece=True로 지정하면 새로운 데이터프레임을 만들어 호출 객체에 재할당하며 성능상에 큰 잇점이 없습니다”</주석>”
  30. (p327) 위에서 7번째 줄에 “만는 특성은”을 “만든 특성을”로 정정합니다.(이*곤 님)
  31. (p67) 마지막 줄에서 https://tinyurl.com/simulated-datahttps://bit.ly/47Hl2t5로, (p69) 위에서 7번째 줄에서 https://tinyurl.com/simulated-excelhttps://bit.ly/3UcfsMb로, (p70) 아래에서 5번째 줄에서 https://tinyurl.com/simulated-jsonhttps://bit.ly/47OMrct로 수정합니다.
  32. 12번 항목의 타이타닉 데이터 다운로드 링크를 https://bit.ly/3OJKGGV 로 수정합니다.

Your Inputs

댓글 남기기

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.