[개정판] 파이썬 라이브러리를 활용한 머신러닝

x9791162241646

★★★★★ 검증된 내용, 훌륭한 번역자, 그리고 좋은 편집(hawkm*** 님)
★★★★ 개정판은 인기없는 책은 나올 이유가 없다(ghcjs*** 님)
♥♥♥♥ 올 컬러로 깔끔한 해설(bi**cle2 님)

송진영 님이 블로그에 올리신 이 책의 서평도 참고하세요!

‘[개정판] 파이썬 라이브러리를 활용한 머신러닝’은 scikit-learn의 코어 개발자이자 배포 관리자인 안드레아스 뮐러Andreas Mueller와 매쉬어블의 데이터 과학자인 세라 가이도Sarah Guido가 쓴 ‘Introduction to Machine Learning with Python‘ 번역서입니다.

사이킷런의 최신 버전에 맞추어 저자들이 새롭게 릴리스한 4판을 기준으로 개정판이 출간되었습니다. 주요한 변경 사항은 다음과 같습니다.

  • OneHotEncoder와 ColumnTransformer, make_column_transformer
  • KBinsDiscretizer
  • cross_validate
  • Pipeline 캐싱
  • 그외 사이킷런 0.19, 0.20에서 추가, 변경된 내용 반영
  • (한국어판 부록) 배깅, 엑스트라 트리, 에이다부스트
  • (한국어판 부록) QuantileTransformer와 PowerTransformer
  • (한국어판 부록) 반복 교차 검증

특별히 개정판에서는 그래프를 손쉽게 구분할 수 있도록 풀 컬러 인쇄를 하였습니다! 흔쾌히 컬러 인쇄를 결정해 주신 한빛미디어 출판사에 감사드립니다.

  • 온라인/오프라인 서점에서 판매중입니다. [YES24], [교보문고], [한빛미디어]
  • 480 페이지, 종이책: 32,000원—>28,800원, 전자책 25,600원
  • 이 책에 실린 코드는 깃허브에서 주피터 노트북으로 볼 수 있습니다. [github], [nbviewer]
  • 이 책의 코드는 scikit-learn 0.20.2, 0.21.1, 0.22, 0.23.1, 0.24, 1.0 버전에서 테스트 되었습니다.
  • 저자 안드레아스 뮐러와의 인터뷰는 한빛미디어 홈페이지에서 볼 수 있습니다.
  • 1판의 1장과 2장을 ‘파이썬 머신러닝‘ 페이지에서 읽을 수 있습니다.
  • 교보문고 Dev READIT 2018에 선택되어 이 책에 대한 칼럼을 썼습니다.

이 페이지에서 책의 에러타와 scikit-learn 버전 변경에 따른 바뀐 점들을 계속 업데이트 하겠습니다.

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

적바림(미처 책에 넣지 못한 내용을 추가하고 있습니다)

감사합니다! 🙂


Outputs (aka. errata)

  • ~29: 2쇄에 반영되었습니다.
  • ~31: 3쇄에 반영되었습니다.
  • ~43: 4쇄에 반영되었습니다.
  • ~82: 5쇄에 반영되었습니다.
  • ~87: 6쇄에 반영되었습니다.
  1. (p104) 그림 2-24와 2-25가 잘못 되었습니다. 다음 그림으로 바꾸어야 합니다.(현*웅 님)
    2-24

    그림 2-24

    2-25

    그림 2-25

  2. (p124) 아래에서 두 번째 줄의 주석 번호를 48에서 51로 바꿉니다.(현*웅 님)
  3. (p36) Note 박스의 첫 번째 줄 끝에서 ‘ 라이브러리’를 ‘다섯 라이브러리’로 정정합니다.(현*웅 님)
  4. (p156) 마지막 줄 끝의 주석 번호를 64에서 68로 바꿉니다.(현*웅 님)
  5. (p161) NOTE 박스 끝의 주석 번호를 78에서 79로 바꿉니다.(현*웅 님)
  6. (p345) CAUTION 박스 끝의 주석 번호를 11에서 12로 바꿉니다.(현*웅 님)
  7. (p375) 마지막 줄의 주석 번호를 33에서 34로 바꿉니다.(현*웅 님)
  8. (p425) 페이지 중간에 있는 주석 번호를 12에서 14로 바꿉니다.(현*웅 님)
  9. (p447) 마지막 줄에 “컴퓨터에 장착된 CPU 코어를 최대한 활용하기 위해 n_jobs=-1로 지정했습니다”를 “Mecab은 Pickle 오류가 발생하기 때문에 n_jobs=1로 지정했습니다”로 정정합니다.(현*웅 님)
  10. (p108) 주석 40에서 “graphviz 모듈은 pip install graphviz 명령으로”를 “graphviz 모듈은 conda install graphviz 또는 pip install graphviz 명령으로”로 수정합니다.(현*웅 님)
  11. (p281) Out [12]의 출력을 다음과 같이 변경합니다.
    [[1. 0. 0. 0. 1. 0.]
    [0. 1. 0. 0. 0. 1.]
    [0. 0. 1. 0. 1. 0.]
    [0. 1. 0. 1. 0. 0.]]
  12. (p71) 주석 6번의 R^2 공식에서 두 번째 항의 분자가 \sum (y-y)^2이 아니고 \sum (y-\hat{y})^2입니다.(서* 님)
  13. (p86) 주석 20번의 두 번째 줄에서 “로스틱 회귀”를 “로스틱”로 정정합니다.(서* 님)
  14. (p103~104) 103 페이지 마지막 문단과 104 페이지 첫 문단에서 0.05960.06으로 정정합니다.(서* 님)
  15. (p157) In[104]의 두 번째 print 함수에서 “훈련 세트 정확도”를 “테스트 세트 정확도”로 정정합니다.(서* 님)
  16. (p291) 첫 번째 줄에서 “학습된 기울기는 음수이고”를 “학습된 기울기는 양수이고”로 정정합니다.(서* 님)
  17. (p295) 마지막 줄에서 “아무런 변환도 거치 않은”을 “아무런 변환도 거치 않은”으로 정정합니다.(서* 님)
  18. (p303) 주석 24번에서 “정보 누설에 대한 자세한 내용은 376쪽”을 “정보 누설에 대한 자세한 내용은 398쪽”으로 정정합니다.(서* 님)
  19. (p123) Out[75]의 두 번째 줄에서 “훈련 세트 정확도”를 “테스트 세트 정확도”로 정정합니다.
  20. (p328) 주석 3번에서 “cross_val_predct(logreg, iris.data, iris.target, cv=5)”를 “cross_val_predict(logreg, iris.data, iris.target, cv=5)”로 정정합니다.(서* 님)
  21. (p344) 페이지 중간에 “In[22] 코드의 결과와 대등합니다”를 “In[24] 코드의 결과와 대등합니다”로 정정합니다.(서* 님)
  22. (p368) 맨 위 세 번째 줄에서 “f_1-점수가 0.14이지만, … ‘9아님’ 클래스는 각각 0.90과 0.99라서”를 “f_1-점수가 0.12이지만, … ‘9아님’ 클래스는 각각 0.89과 0.99라서”로 정정합니다.(서* 님)
  23. (p371) 첫 번째 문단 마지막에 제시된 “https://goo.gl/RaDS8Z“를 “https://bit.ly/2IfMILV“로 바꿉니다.(서* 님)
  24. (p387) In[75]와 In[76] 코드에서 “roc_auc_score(y_test, grid.decision_function(X_test))”를 “average_precision_score(y_test, grid.decision_function(X_test))”로 정정합니다. In[76] 코드에서 GridSearchCV의 scoring 매개변수 값을 “roc_auc”에서 “average_precision“으로 정정합니다. 또한 Out[76]에서 “테스트 세트 AUC: 1.000“을 “테스트 세트 평균 정밀도: 0.996“으로, “테스트 세트 정확도: 1.000“을 “테스트 세트 정확도: 0.890“으로 정정합니다.(서* 님)
  25. (p397, p399) 397페이지 첫 번째 문단과 399페이지 주석 7번에서 “검증 폴더“를 “검증 폴드“로 정정합니다.(서* 님)
  26. (p427) 주석 15번에서 “Out[22]의 출력 결과가”를 “Out[23]의 출력 결과가”로 정정합니다.(서* 님)
  27. (p444) 첫 번째 문단 마지막 부분에서 “keep_default_na=True로 지정하여”를 “keep_default_na=False로 지정하여”로 정정합니다.(서* 님)
  28. (p441) In[45] 코드를 다음과 같이 수정합니다.
    # 요구사항: spacy에서 표제어 추출 기능과 CountVectorizer의 토큰 분할기를 사용합니다.
    
    # spacy의 언어 모델을 로드합니다
    en_nlp = spacy.load('en', disable=['parser', 'ner'])
    
    # spacy 문서 처리 파이프라인을 사용해 자작 토큰 분할기를 만듭니다
    # (우리만의 토큰 분할기를 사용합니다)
    def custom_tokenizer(document):
        doc_spacy = en_nlp(document)
        return [token.lemma_ for token in doc_spacy]
    
    # 자작 토큰 분할기를 사용해 CountVectorizer 객체를 만듭니다
    lemma_vect = CountVectorizer(tokenizer=custom_tokenizer, min_df=5)
  29. (p366, 367, 369, 370, 384) 사이킷런 0.21 버전에서 classification_report 함수의 labels 매개변수가 지정되지 않거나 labels 매개변수로 전달된 클래스 레이블이 타깃값에 모두 포함되어 있다면 micro avg 대신에 같은 의미인 accuracy가 출력됩니다. 따라서 classification_report 함수 출력에서 “micro avg    aa, bb, cc, dd“를 “accuracy    cc, dd“로 바꾸어 주세요.
  30. (p30) scipy.misc.imread 함수가 scipy 1.3.0 버전에서 삭제되었습니다. 대신 imageio.imread 함수를 사용하기 위해 imageio를 설치해야 합니다. pip 명령 맨 뒤에 imageio를 추가해 주세요.
    $ pip install numpy scipy matplotlib ipython scikit-learn pandas pillow imageio
    
  31. (p92) 사이킷런 0.22버전부터 LogisticRegression 클래스의 solver의 기본값이 lbfgs로 바뀌었습니다. 이 알고리즘은 L1 규제를 지원하지 않기 때문에 LogisticRegression 클래스에 L1 규제를 적용하려면 다른 solver를 지정해야 합니다. 따라서 In[47] 코드에서 LogisticRegression 클래스 매개변수에 solver='liblinear'를 추가합니다.
  32. 모델을 훈련할 때 반복 횟수를 늘리라는 경고가 출력되는 것을 막기 위해 max_iter 매개변수 값을 늘립니다.
    1. p87의 In[41], p137의 In[80]: LinearSVCmax_iter=5000 매개변수 추가
    2. p135의 In[78]: LinearSVCmax_iter=5000, tol=1e-3 매개변수 추가
    3. p89의 In[43], p90의 In[44]와 In[45], p306의 In[51], p308의 In[55], p310의 In[57], p424의 In[18], p426의 In[22], p428의 In[25], p430의 In[29], p436의 In[39], p442의 In[47]: LogisticRegression에 max_iter=5000 매개변수 추가
    4. p92의 In[47], p278의 In[8], p284의 In[17], p325의 In[5], p336의 In[2], p360의 In[46], p404의 In[23], p424의 In[17]: LogisticRegression에 max_iter=1000 매개변수 추가
    5. p151의 In[95], p152의 In[97], p153의 In[98]: MLPClassifiermax_iter=1000 매개변수 추가
    6. p215의 In[38], p218의 In[42], p234의 In[59]: NMFmax_iter=1000, tol=1e-2 매개변수 추가
  33. 사이키런 0.21 버전에서 사분위수보다 샘플 개수가 작을 때 적절히 처리하지 못하는 버그가 수정되었습니다. 샘플 개수가 1,000개보다 작을 때 경고 메시지를 출력하지 않기 위해 QuantileTransformer 클래스에 n_quantiles 매개변수를 지정합니다.
    1. p183의 In[4], p185의 In[9], p186의 In[10]: QuantileTransformern_quantiles=50 매개변수 추가
    2. p185의 In[8]: QuantileTransformern_quantiles=5 매개변수 추가
  34. (p360) 사이킷런 0.24 버전에서 DummyClassifierstrategy 매개변수 기본값이 stratified에서 prior로 변경된다는 경고를 피하기 위해 strategy='stratified' 매개변수를 추가합니다.
  35. (p388) metrics.scorer 모듈이 사이킷런 0.24 버전에서 삭제됩니다. 맨 위 첫 줄의 “metrics.scorer 모듈의 SCORERS 딕셔너리를 봐도 됩니다” 문장과 In[77], Out[77]을 삭제합니다.
  36. (p41) In[15] 바로 위 문장 끝에 다음 주석을 추가합니다. “옮긴이_ 사이킷런 0.23 버전부터 dataset 모듈의 함수에서 as_frame=True와 같이 지정하면 데이터프레임으로 반환됩니다.”
  37. (p108) 41번 주석을 다음과 같이 변경합니다.
    옮긴이_ graphviz 모듈은 conda install graphviz 또는 pip install graphviz 명령으로 설치할 수 있습니다. 주피터 노트북이 아닐 경우 graphviz.Source의 결과를 변수로 저장하여 pdf, png 등의 파일로 저장할 수 있습니다.

    dot=graphviz.Source(dot_graph)
    dot.format='png'
    dot.render(filename='tree.png')

    사이킷런 0.21 버전에서 추가된 plot_tree() 함수를 사용하면 .dot 파일을 만들지 않고 바로 트리를 그릴 수 있습니다. 이 함수는 export_graphviz() 함수에서 사용한 class_names, feature_names, impurity, filled 매개변수를 모두 지원합니다.

  38. (p125) 주석 52번을 다음과 같이 변경합니다. “옮긴이_ xgboost(https://xgboost.readthedocs.io/)는 대용량 분산 처리를 위한 그레이디언트 부스팅 오픈 소스 라이브러리로 C++, 파이썬, R, 자바 등 여러 인터페이스를 지원합니다. 히스토그램 기반 부스팅 알고리즘을 사용하는 또 다른 인기 라이브러리는 마이크로소프트에서 만든 LightGBM(https://lightgbm.readthedocs.io/)입니다. 사이킷런 0.21 버전에서도 이와 비슷한 HistGradientBoostingClassifierHistGradientBoostingRegressor 클래스가 추가되었습니다.”
  39. (p193) Out[13] 바로 아래 첫 번째 문장 끝에 다음 주석을 추가합니다. “옮긴이_ 중요한 전처리 작업 중 하나는 누락된 값의 처리입니다. 사이킷런에서는 특성의 평균이나 최빈값으로 대체하는 SimpleImputer 클래스(0.20 버전에서 추가)와 최근접 이웃 방식으로 대체하는 KNNImputer 클래스(0.22 버전에서 추가) 등을 제공합니다.”
  40. (p372) 첫 번째 문장 끝에 다음 주석을 추가합니다.
    옮긴이_ 사이킷런 0.22 버전에서 정밀도-재현율 곡선을 그려주는 함수가 추가되었습니다. 예를 들어 다음 코드는 In [61]에 있는 svc 추정기를 사용해 [그림 5-13]과 유사한 그래프를 그립니다.

    from sklearn.metrics import plot_precision_recall_curve
    plot_precision_recall_curve(svc, X_test, y_test)
    plt.show()
  41. (p377) 첫 번째 문장 끝에 다음 주석을 추가합니다.
    옮긴이_ 사이킷런 0.22 버전에서 ROC 곡선을 그려주는 함수가 추가되었습니다. 예를 들면 다음과 같이 사용합니다.

    from sklearn.metrics import plot_roc_curve
    plot_roc_curve(svc, X_test, y_test)
    plt.show()
  42. (p382) In[70] 바로 위 문장 끝에 다음 주석을 추가합니다.
    옮긴이_ 사이킷런 0.22 버전에서 오차 행렬을 그래프로 그려주는 함수가 추가되었습니다. 예를 들면 다음과 같이 사용합니다.

    from sklearn.metrics import plot_confusion_matrix
    plot_confusion_matrix(lr, X_test, y_test)
    plt.show()
  43. (p401) 11번 주석 끝에 다음 내용을 추가합니다.
    사이킷런 0.23 버전에서는 추정기 객체를 주피터 노트북에서 시각화해주는 기능이 추가되었습니다. 특히 이 기능은 파이프라인 구조를 잘 요약해주기 때문에 유용합니다. 예를 들어 다음 코드는 [그림 6-3]의 pipe 객체의 구조를 출력합니다.

    from sklearn import set_config
    set_config(display='diagram')
    pipe
  44. (4쇄 p108) 주석 41에서 dot=graphviz.Source(dot_graph); dot.format='png'; dot.render(filename='tree.png'). 라인을 삭제합니다.
  45. (p346) 주석 14번에 “Out[32]에서는”을 “Out[34]에서는”으로 정정합니다.(정*균 님)
  46. (p378) 코드 블럭 아래에서 3번째 줄에 tpr[close_default_rf]tpr_rf[close_default_rf]로 정정합니다.(정*균 님)
  47. (p29) Enthought Canopy 항목을 다음으로 교체합니다.
    ActivePython (https://www.activestate.com/products/python/)
    또 다른 범용 파이썬 배포판입니다. NumPy, SciPy, matplotlib, pandas, Jupyter, scikit-learn을 포함하고 있습니다. 무료로 사용할 수 있는 Community Edition과 기업을 위한 유료 버전도 있습니다. ActivePython은 파이썬 2.7, 3.5, 3.6을 지원하며 macOS, 윈도우, 리눅스에서 사용할 수 있습니다.
  48. (p34) 위에서 3번째 줄 “%matplotlib inline을 사용합니다” 뒤에 주석을 추가합니다. <주석>옮긴이_ IPython kernel 4.4.0부터는 %matplotlib inline 매직 명령을 사용하지 않더라도 맷플롯립 1.5 이상에서는 주피터 노트북에 바로 이미지가 출력됩니다.</주석>
  49. (p36) <노트>의 마지막 줄 “만약 이런 매직 커맨드를 사용하지 않는다면 이미지를 그리기 위해 plt.show 명령을 사용해야 합니다”를 “또는 IPython kernel 4.4.0과 맷플롯립 1.5 버전 이상을 사용한다고 가정합니다.”로 수정합니다.
  50. (p37) 1.6절 바로 위 문장 끝에서 “파이썬 3.7 업그레이드하세요”를 “파이썬 3.7 이상으로 업그레이드하세요”로 수정합니다.
  51. (p38) 주석에 포함된 블로그 링크 goo.gl/FYjbK3 을 bit.ly/2K73mA4 로 수정합니다.
  52. (p65) In [14] 코드 블럭 위 문장 끝 “이웃의 수를 3으로 지정합니다”에 주석을 추가합니다. <주석>옮긴이_ KNeighborsClassifier 클래스의 n_neighbors 매개변수 기본값은 5입니다.</주석>
  53. (p87) 22번 주석에서 “LogisticRegression의 solver 매개변수를 지정하지 않으면 scikit-learn 0.22 버전부터 기본값 이 liblinear에서 lbfgs로 변경된다는 경고 메세지가 출력됩니다.”를 삭제합니다. 23번 주석에서 “liblinear를 사용하는 LogisticRegression 과 LinearSVC는”를 “LogisticRegression 과 LinearSVC는”로 수정합니다.
  54. (p94) 28번 주석에서 마지막 문장 “multi_class 매개변수를 지정하지 않으면 0.22 버전부터 기본값이 ovr에서 auto로 변경된다는 경고가 출력됩니다“를 “0.22 버전부터는 multi_class의 기본값이 ‘ovr’에서 ‘auto’로 바뀌었습니다“로 수정합니다.
  55. (p106) 페이지 중간에서 “scikit-learn은 사전 가지치기만 지원합니다” 끝에 주석을 추가합니다. <주석>옮긴이_ 사이킷런 0.22 버전에서 비용 복잡도 기반의 사후 가지치기를 위한 ccp_alpha 매개변수가 추가되었습니다.</주석>
  56. (p113) In [67] 코드 블럭에서 X_train = data_train.date[:, np.newaxis]를 X_train = data_train.date.to_numpy()[:, np.newaxis]로 수정하고 X_all = ram_prices.date[:, np.newaxis]X_all = ram_prices.date.to_numpy()[:, np.newaxis]로 수정합니다.
  57. (p115) 42번 주석 끝에서 “0.25 버전에서는 삭제됩니다”를 “1.0 버전에서는 삭제됩니다”로 수정합니다.
  58. (p116) 44번 주석 “옮긴이_ n_estimators 매개변수의 기본값은 10입니다. n_estimators 매개변수를 지정하지 않으면 scikit-learn 0.22 버전부터 기 본값이 100으로 바뀐다는 경고가 출력됩니다”를 “scikit-learn 0.22 버전부터 n_estimators의 기본값이 10에서 100으로 바뀌었습니다.”로 수정합니다.
  59. (p142) Out [84] 에서 “훈련 세트 정확도: 1.00“을 “훈련 세트 정확도: 0.90“으로 수정하고 “테스트 세트 정확도: 0.63“을 “테스트 세트 정확도: 0.94“로 수정합니다. 그 아래 문장에서 “훈련 세트에는 완벽한 점수를 냈지만 테스트 세트에는 63% 정확도라서 이 모델은 상당히 과대적합되었습니다”를 “훈련 세트에는 90% 정확도를 냈지만 테스트 세트에는 94% 정확도라서 이 모델은 상당히 과소적합되었습니다”로 수정합니다.
  60. (p144) Out [88]에서 “훈련 세트 정확도: 0.948 테스트 세트 정확도: 0.951“를 “훈련 세트 정확도: 0.984 테스트 세트 정확도: 0.972“로 수정합니다. 그 아래 문단에서 “훈련 세트와 테스트 세트의 정확도가 100%에서는 조금 멀어졌지만 매우 비슷해서 확실히 과소적합된 상태입니다“를 “훈련 세트와 테스트 세트의 정확도가 모두 상승하여 과소적합이 많이 해소되었습니다“로 수정합니다. In [89] 코드 블럭에서 svc = SVC(C=1000)svc = SVC(C=20)으로 수정합니다.
  61. (p145) Out [89]에서 “테스트 세트 정확도: 0.972“를 “테스트 세트 정확도: 0.979“로 수정합니다. 그 아래 문장에서 “C 값을 증가시켰더니 모델의 성능이 97.2%로 향상되었습니다”를 “C 값을 증가시켰더니 모델의 성능이 97.9%로 향상되었습니다”로 수정합니다.
  62. (p152) In [96] 코드에서 mlp = MLPClassifier(solver='lbfgs', random_state=0, hidden_layer_size=[10, 10])mlp = MLPClassifier(solver='lbfgs', random_state=0, hidden_layer_size=[10, 10], max_iter=1000)로 수정합니다.
  63. (p159) 75번 주석에서 “『핸즈온 머신러닝』 (한빛미디어, 2018)”을 “『핸즈온 머신러닝 2판』 (한빛미디어, 2020)”로 수정합니다.
  64. (p170) In [122] 코드에서 logreg=LogisticRegression()을 logreg=LogisticRegression(max_iter=1000)로 수정합니다.
  65. (p191) In [11] 코드에서 svm = SVC(C=100)svm = SVC(gamma='auto')로 수정합니다.
  66. (p213) 주석 25번을 “NMF에서 초기화 방식을 지정하는 init 매개변수의 기본값은 None으로 n_components가 샘플이나 특성 개수보다 작으면 ‘nndsvd’를 사용하고 그렇지 않으면 ‘random’을 사용합니다. ‘nndsvd’는 특잇값 분해로 얻은 U와 V 행렬의 절댓값에 S 행렬의 제곱근을 곱해 W와 H 행렬을 만듭니다. 그다음 W와 H 행렬에서 1e-6 보다 작은 값은 0으로 만듭니다. ‘nndsvda’는 0을 입력 행렬의 평균값으로 바꿉니다. scikit-learn 1.1 버전부터는 ‘nndsvd’에서 ‘nndsvda’로 기본값이 바뀝니다. ‘random’은 데이터 평균을 성분의 개수로 나눈 후 제곱근을 구하고, 그런 다음 정규분포의 난수를 발생시켜 앞에서 구한 제곱근을 곱하여 H와 W 행렬을 만듭니다. 이는 데이터 평균값을 각 성분과 두 개의 행렬에 나누어 놓는 효과를 냅니다.”로 바꿉니다.
  67. (p214) In [37] 코드에서 mglearn.plots.plot_nmf_faces(X_train, X_test, image_shape)mglearn.plots.plot_nmf_faces(X_train, X_test[:3], image_shape)로 수정합니다.
  68. (p215) In [38] 코드에서 nmf = NMF(n_components=15, random_state=0, max_iter=1000, tol=1e-2)nmf = NMF(n_components=15, init='nndsvd', random_state=0, max_iter=1000, tol=1e-2)로 수정합니다.
  69. (p218) In [42] 코드에서 nmf = NMF(n_components=3, random_state=42, max_iter=1000, tol=1e-2)를 nmf = NMF(n_components=3, init=’nndsvd’, random_state=42, max_iter=1000, tol=1e-2)로 수정합니다.
  70. (p234) In [50] 코드에서 nmf = NMF(n_components=100, random_state=0, max_iter=1000, tol=1e-2)를 nmf = NMF(n_components=100, init=’nndsvd’, random_state=0, max_iter=1000, tol=1e-2)로 수정합니다.
  71. (p238) 주석 35 끝에 다음 문장을 추가합니다. “scikit-learn 0.23 버전부터 KMeans 클래스는 OpenMP 기반의 병렬화를 제공합니다. 이 때문에 n_jobs 매개변수를 사용하면 경고가 발생하며 이 매개변수는 1.0 버전에서 삭제될 예정입니다.”
  72. (p284) 주석 10번에서 다음 문장을 삭제합니다. “0.20.1 버전 이상에서 (열_리스트, 변환기_객체) 로 전달하면 이와 관련된 경고가 발생하며 0.22 버전에서는 (열_리스트, 변환기_객체) 형식이 삭제될 예정입니다.”
  73. (p309) 주석 31번을 삭제하고 4.7.3절 아래 4번째 줄 “도달할 때까지 하나씩 추가하는 방법입니다.” 끝에 다음 주석을 추가합니다. <주석>옮긴이_ 이를 전진 선택법(foward stepwise selection)과 후진 선택법(backward stepwise selection)이라고도 부릅니다. scikit-learn 0.24 버전에서 추가된 SequentialFeatureSelector 클래스는 scoring 매개변수에 지정된 측정 지표의 교차 검증 점수를 기준으로 특성을 하나씩 추가하거나 제거합니다. scoring 매개변수의 기본값은 회귀일 경우에는 R^2, 분류일 경우에는 정확도입니다. direction 매개변수가 ‘forward’일 경우 전진 선택법, ‘backward’일 때 후진 선택법을 수행합니다. 기본값은 ‘forward’입니다.</주석>
  74. (p318) 주석 39번에서 다음 문장을 삭제합니다. “0.20 버전부터 정수형 데이터를 변환할 때 이와 관련된 경고가 출력됩니다.”
  75. (p325) Out [5]의 출력을 “[0.967 1. 0.933 0.967 1. ]”로 바꿉니다. 아래에서 3번째 줄에 “여기에서는 cross_val_score가 3-겹 교차 검증을 수행했기 때문에 3개의 점수가 반환되었습니다. 현재 scikit-learn의 기본값은 3-겹 교차 검증이이지만 scikit-learn 0.22 버전부터 5-겹 교차 검증으로 바뀔 것입니다”를 “여기에서는 cross_val_score가 5-겹 교차 검증을 수행했기 때문에 5개의 점수가 반환되었습니다. scikit-learn 0.22 버전부터 3-겹 교차 검증에서 5-겹 교차 검증으로 바뀌었습니다“로 수정합니다.
  76. (p326) In [6] 코드에서 scores = cross_val_score(logreg, iris.data, iris.target, cv=5)를 scores = cross_val_score(logreg, iris.data, iris.target, cv=10)로 수정합니다. Out [6]의 출력을 “교차 검증 점수: [1. 0.933 1. 1. 0.933 0.933 0.933 1. 1. 1. ]”로 바꿉니다. Out [7] 출력 아래 문장에서 “5-겹 교차 검증이 만든 다섯 개의 값을 모두 보면 100%에서 90%까지 폴드에 따라”를 “10-겹 교차 검증이 만든 다섯 개의 값을 모두 보면 100%에서 93%까지 폴드에 따라”로 수정합니다.
  77. (p346) 주석 14번을 삭제하고 주석 13번 끝에 다음 문장을 추가합니다. “사이킷런 0.24 버전에서는 SH(Successive Halving) 방식의 HalvingGridSearchCV가 추가되었습니다. 이 클래스는 모든 파라미터 조합에 대해 제한된 자원으로 그리드서치를 실행한 다음 가장 좋은 후보를 골라서 더 많은 자원을 투여하는 식으로 반복적으로 탐색을 수행합니다.”
  78. (p440, p441) In [43], In [45] 코드에서 spacy.load('en'spacy.load('en_core_web_sm'으로 수정합니다.
  79. (p458) 주석 35에서 “『텐서플로 첫걸음』(한빛미디어, 2016)”를 “『혼자 공부하는 머신러닝+딥러닝』(한빛미디어, 2020)”로 수정합니다.
  80. (p463) 위에서 2번째 줄에 “goo.gl/fkQWsN”을 “bit.ly/3c7ylYV”로 수정합니다.
  81. (p467) 주석 9번에서 “『핸즈온 머신러닝』 (한빛미디어, 2018)”를 “『핸즈온 머신러닝 2판』 (한빛미디어, 2020)”로 수정합니다.
  82. (p468) 위에서 2번째 줄에 “goo.gl/lQmL1X”을 “bit.ly/3qnikDx”로 수정합니다.
  83. (p156) (5쇄) 마지막 줄 끝의 주석 번호를 68에서 71로 정정합니다.
  84. (p161) (5쇄) <노트>의 마지막 줄 끝의 주석 번호를 80에서 82로 정정합니다.
  85. (p166) 2번째 문단 끝에 주석을 추가합니다. “옮긴이_ 보정 곡선은 사이킷런의 `calibration_curve()` 함수(https://bit.ly/3yoVG25) 그릴 있습니다. 자세한 사용법은 온라인 문서(https://bit.ly/3Am4rvu) 참고하세요.”
  86. (p306) In[51] 코드 4번째 줄에서 lr = LogisticRegression(max_iter=1000)lr=LogisticRegression(max_iter=5000)으로 수정합니다.
  87. (p334) In [19] 코드 7번째 줄에서 groupsgroups=groups로 수정합니다.
  88. (p62) 위에서 3번째 줄에 다음처럼 주석을 추가합니다. “보스턴 주택가격 데이터셋<주석>옮긴이_ 보스턴 주택가격 데이터셋의 특성에는 흑인 인구 비율이 들어 있어 요즘 시대에 적절치 않다는 의견이 많았습니다. 사이킷런 1.0 버전에서 load_boston() 함수가 deprecated 되었고 1.2 버전에서 삭제될 예정입니다.</주석>을 사용하겠습니다”
  89. (p136, 137) In [79], [80]에서 Axes3D가 자동으로 그림에 추가되는 방식은 matplotlib 3.4 버전에서 deprecated 되었기 때문에 관련 경고를 피하기 위해 ax = Axes3D(figure, elev=-152, azim=-26)ax = Axes3D(figure, elev=-152, azim=-26, auto_add_to_figure=False); figure.add_axes(ax)로 수정합니다.
  90. (p156) In [102]에서 다음처럼 MLPClassifier 객체 생성시 max_iter 매개변수를 지정합니다. mlp = MLPClassifier(max_iter=1000, random_state=0)
  91. (p205) In [26]의 첫 번째 줄에서 np.bool이 1.20버전부터 deprecated 되었기 때문에 대신 bool을 사용합니다. mask = np.zeros(people.target.shape, dtype=bool)
  92. (p223) 4번째 줄에 다음과 같이 주석을 추가합니다. “결과를 비교해 보겠습니다.<주석>옮긴이_ 사이킷런 1.2 버전에서 TSNE 클래스의 init 매개변수의 기본값이 'random'에서 'pca'로 바뀔 예정입니다.</주석> t-SNE는 새 데이터를..”
  93. get_feature_names() 메서드를 가진 변환기에 get_feature_names_out() 메서드가 추가되었고 get_feature_names()는 deprecated 되어 1.2 버전에서 삭제될 예정입니다. 따라서 (p281) 마지막 문장과 In [13],  (p294) 첫 번째 문장과 In [34], (p297) 마지막 문장과 In[39], (p320) 첫 번째 문장과 In [72], (p423) In [16], (p426) In [21], (p430) In [30], (p434) In [35]와 In [36], (p435) In [38], (p437) In [41], (p450) In [51], (p451) In [55]에서 get_feature_names()get_feature_names_out()으로 수정합니다.
  94. (p366) In [52]에서 0 나눗셈 경고를 피하기 위해 다음처럼 zero_division 매개변수를 지정합니다. classification_report(y_test, pred_most_frequent, target_names=["9 아님", "9"], zero_division=0))
  95. (p443) 아래에서 4번째 줄에 다음처럼 주석을 추가합니다. “설치 페이지(…)를 참고하세요.<주석>옮긴이_ 최신 버전의 tweepy 패키지를 설치할 경우 konlpy에서 StreamListener가 없다는 에러가 발생하므로 3.10버전을 설치해 주세요. pip install tweepy==3.10</주석> KoNLPy는 5개의…”
  96. (p335) 주석 7번 끝에 다음을 추가합니다. “사이킷런 1.0 버전에서 그룹을 유지하면서 클래스 비율에 맞게 분할하는 StratifiedGroupKFold가 추가되었습니다.”
  97. (p293) 주석 15번 끝에 다음 문장을 추가합니다. “사이킷런 1.0 버전부터는 PolynomialFeatures 클래스의 degree 매개변수에 변환할 최소 차수과 최대 차수를 튜플로 전달할 수 있습니다.”

Your Inputs

댓글 남기기

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