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

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

개정2판에서는 사이킷런 1.x 버전에 맞추어 전체 코드를 업데이트하고 새롭게 추가된 기능을 반영했습니다. 또한 전체 코드를 구글 코랩(Colab)에서 실습할 수 있도록 수정하였습니다. 물론 풀 컬러 인쇄입니다! 🙂

주요 변경 사항은 다음과 같습니다.

  • QuantileRegressor 예제 추가
  • SGDClassifier, SGDRegressor 예제 추가
  • n_features_in_, feature_names_in_, get_feature_names_out() 메서드 설명 추가
  • 히스토그램 기반 부스팅 예제 추가
  • permutation_importance() 함수 설명 추가
  • 트리 기반 앙상블 모델의 매개변수 비교
  • 설명된 분산 비율, 엘보우 메서드 예제 추가
  • RandomizedSearchCV, HalvingGridSearchCV 예제 추가
  • 온라인/오프라인 서점에서 판매중입니다. [YES24], [교보문고], [한빛미디어]
  • 504 페이지, 종이책: 33,000원—>29,700원, 전자책 26,400원
  • 이 책에 실린 코드는 깃허브에서 주피터 노트북으로 볼 수 있습니다. [github], [nbviewer]
  • 이 책의 코드는 scikit-learn 1.0.1, 1.2.1, 1.3.0 버전에서 테스트 되었습니다.

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

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

감사합니다! 🙂


Outputs (aka. errata)

  • 1~5: 2쇄에 반영되었습니다.
  1. (p102) 사이킷런 1.3 버전부터 SGDClassifier의 loss 매개변수 중 로지스틱 손실을 의미하는 'log'가 'log_loss'로 바뀔 예정이므로 첫 번째 줄에서 “훈련합니다.”를 “훈련합니다(1.3 버전에서 'log''log_loss'로 바뀔 예정입니다).“로 수정합니다.
  2. RandomForestClassifierExtraTreesClassifiermax_features 매개변수 기본값이 'auto'에서 'sqrt'로 바뀔 예정이므로,
    • (p127) 주석 47번을 다음과 같이 바꿉니다. “RandomForestClassifiermax_features 기본값이 'auto'sqrt(n_features)를 의미합니다. 1.3 버전에서는 max_features 기본값이 'auto'에서 'sqrt'로 바뀔 예정입니다.
    • (p143) 표 2-2에서 랜덤포레스트와 엑스트라트리의 ‘특성 개수’ 항목을 다음과 같이 수정합니다.
      분류: max_features=’auto’ (1.3 버전에서 ‘sqrt’로 변경예정)
      회귀: 전체 특성
    • (p315) 주석 20번에서 “랜덤 포레스트의 기본값은 "auto"로 특성 개수의 제곱근을 나타내며, … 하지만 max_features="auto"로 설정하면…”을 “랜덤 포레스트 분류기는 기본적으로 특성 개수의 제곱근을 사용하며, … 하지만 max_features="sqrt"로 설정하면…”로 수정합니다.
  3. GradientBoostingClassifierloss 매개변수 기본값이 1.3 버전에서 'deviance'에서 'log_loss'로 바뀔 예정이므로
    • (p128) 주석 50번 네 번째 줄에서 “손실을 의미하는 'deviance'입니다.”를 “손실을 의미하는 'deviance'입니다(1.3 버전에서 'deviance''log_loss'로 바뀔 예정입니다).”로 수정합니다.
    • (p143) 표 2-2의 그레이디언트 부스팅의 ‘손실 함수’ 항목에서 “(로지스틱 회귀)”를 “(로지스틱 손실. 1.3 버전에서 'log_loss'로 바뀔 예정)”으로 수정합니다.
  4. (p143) HistGradientBoostingClassifierloss 매개변수 기본값이 1.3 버전에서 'auto'에서 'log_loss'로 바뀔 예정이므로 표 2-2의 히스토그램 기반 부스팅의 ‘손실 함수’ 항목에서 “(이진분류는 'binary_crossentropy', 다중 분류는 'categorical_crossentropy')”을 “(로지스틱 손실. 1.3 버전에서 'log_loss'로 바뀔 예정)”로 수정합니다.
  5. (p297) 버전 1.1에서 OneHotEncoder 클래스에 자주 등장하지 않는 범주를 하나로 묶어주는 min_frequencymax_categories 매개변수가 추가 되었습니다. 4.2절 아래 세 번째 줄에서 “OneHotEncoder 클래스에 구현되어 있습니다.”를 “OneHotEncoder 클래스에 구현되어 있습니다.<주석>옮긴이_ 버전 1.1에서 추가된 min_frequency 매개변수를 사용하면 특정 횟수 또는 비율 보다 적게 등장하는 범주를 하나의 특성으로 합칠 수 있습니다. 또한 max_categories 매개변수를 사용하여 원-핫 인코딩으로 만들어지는 특성의 개수를 제한할 수 있습니다.</주석>“로 수정합니다.
  6. (p32) 아래에서 4번째 줄 주석에서 “희박 행렬로 변환합니다”를 “희소 행렬로 변환합니다”로 수정합니다.(김*진 님)
  7. (p62) In [9]의 코드를 다음과 같이 수정합니다.
    data_url = "http://lib.stat.cmu.edu/datasets/boston"
    raw_df = pd.read_csv(data_url, sep="\s+", skiprows=22, header=None)
    data = np.hstack([raw_df.values[::2, :], raw_df.values[1::2, :2]])
    target = raw_df.values[1::2, 2]
    print("데이터의 형태:", data.shape)
  8. (p62) 주석 4번의 마지막 문장을 다음과 같이 수정합니다. “사이킷런의 load_boston() 함수는 1.2 버전에서 삭제되었습니다.”
  9. (p312) In [37] 코드의 처음 다섯 라인을 다음과 같이 수정합니다.
    from sklearn.model_selection import train_test_split
    from sklearn.preprocessing import MinMaxScaler

    # 보스턴 주택 데이터셋이 1.2 버전에서 삭제되므로 직접 다운로드합니다.
    data_url = "http://lib.stat.cmu.edu/datasets/boston"
    raw_df = pd.read_csv(data_url, sep="\s+", skiprows=22, header=None)
    data = np.hstack([raw_df.values[::2, :], raw_df.values[1::2, :2]])
    target = raw_df.values[1::2, 2]
    X_train, X_test, y_train, y_test = train_test_split(data, target,

    random_state=0)
  10. (p430) In [30] 코드의 처음 세 라인을 다음과 같이 수정합니다.
    # 보스턴 주택 데이터셋이 1.2 버전에서 삭제되므로 직접 다운로드합니다.
    data_url = "http://lib.stat.cmu.edu/datasets/boston"
    raw_df = pd.read_csv(data_url, sep="\s+", skiprows=22, header=None)
    data = np.hstack([raw_df.values[::2, :], raw_df.values[1::2, :2]])
    target = raw_df.values[1::2, 2]
    X_train, X_test, y_train, y_test = train_test_split(data, target,
    random_state=0)
  11. (p271) In [86] 코드 마지막 라인, (p273) In [88] 아래에서 6번째 라인, (p280) In [95] 아래에서 3번째 라인, (p282) In [96] 아래에서 5번째 라인, 을 다음과 같이 수정합니다.
    ax.imshow(image.reshape(image_shape))
  12. (p276) In [90] 코드에서 마지막 라인을 다음과 같이 수정합니다.
    ax.imshow(pca.inverse_transform(center).reshape(image_shape))
  13. (p62) 아래에서 두 번째 줄 끝에 윗첨자 4를 5로 수정합니다. (p63) 위에서 다섯 번째 줄 끝에 윗첨자 5를 삭제합니다.
  14. (p114) plot_tree() 함수가 class_namesfeature_names 매개변수에 넘파이 배열을 받지 못하는 버그 때문에 In [66] 코드의 세 번째 줄에 cancer.feature_namescancer.feature_names.tolist()로 수정합니다.
  15. (p146) In [84] 아래에서 6번째 줄과 4번째 줄, (p148) 위에서 2번째 줄과 4번째 줄의 cmap=mglearn.cm2,를 삭제합니다.
  16. (p175) In [118] 아래에서 3번째 줄, (p178) 위에서 11번째 줄에 cbar.draw_all()fig.draw_without_rendering()로 수정합니다.
  17. (p297) In [12] 위에서 2번째 줄과 3번째 줄, (p299) In [15] 위에서 5번째 줄, (p300) Out [18] 1번째 줄, (p301) In [19] 위에서 4번째 줄에서 sparsesparse_output으로 수정합니다.
  18. (p372) 위에서 7번째 줄에 scipy.stats.randint 다음에 , scipy.stats.loguniform를 추가합니다. 8번째 줄과 9번째 줄의 “scikit-learn 0.22 버전에서 ~ loguniform을 제공합니다.”을 삭제합니다. In [43] 위에서 두 번째 줄에 sklearn.utils.fixesscipy.stats로 수정합니다.
  19. (p102) 첫 번째 줄에서 “(1.3 버전에서 ‘log’가 ‘log_loss’로 바뀔 예정입니다)”를 삭제합니다. (p101) 마지막 줄에서 loglog_loss로 수정합니다.
  20. (p127) 주석 47번을 “RandomForesetClassifiermax_features 매개변수 기본값이 sqrt(n_features)를 의미하는 'sqrt'입니다.”로 교체합니다.
  21. (p143) 표 2-2에서 그레이디언트 부스팅과 히스토그램 기반 부스팅의 손실 함수 항목에서 분류를 “loss=’log_loss'”로 수정합니다. 랜덤포레스트와 엑스트라트리의 특성 개수 항목에서 분류를 “max_features=’sqrt'”로 수정합니다.
  22. (p105) 주석 34번을 다음과 같이 수정합니다. “GaussianNB는 분산을 var_ 속성에, 평균을 theta_ 속성에 저장합니다.”
  23. (p128) 주석 49번 5번째 줄 끝에 “또한 OOB 샘플의 손실 목록을 oob_scores_리스트에 저장하고 마지막 손실 값을 oob_score_ 속성에 저장합니다.”를 추가합니다.
  24. (p92) In [47]의 코드 세 번째 줄에서 "C=0.001""C=0.01"로, (p93) 그림 2-17의 범례에서 C=0.001C=0.01로 수정합니다.

Your Inputs

댓글 남기기

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