[개정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 버전에서 테스트 되었습니다.

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

이 책에 대해 궁금한 점이나 오류가 있으면 이 페이지 맨 아래 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))

Your Inputs

답글 남기기

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

WordPress.com 로고

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

Facebook 사진

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

%s에 연결하는 중

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