태그 보관물: scikit-learn

Machine Learning with Python Cookbook 2nd Ed. 번역 완료

<Machine Learning with Python Cookbook 2판>의 번역을 완료했습니다. 2판에서는 1판의 큰 틀을 유지하면서 1판에서 부족했던 레시피를 많이 추가했습니다.

특히 2판에서는 딥러닝 파트의 해결책을 만드는데 사용하는 라이브러리를 케라스에서 파이토치로 변경했고 딥러닝 부분의 레시피도 훨씬 늘렸습니다. 파이토치를 주로 사용하는 사용자들의 입맛에 잘 맞을 것 같다는 생각이 드네요.

그럼 조판이 되어 출간이 준비되면 다시 알려 드리겠습니다. 기대해 주세요! 🙂

Scikit-Learn 1.4, TensorFlow 2.16 릴리스

얼마전 사이킷런 1.4 버전이 릴리스되었습니다. 이번 버전에서 추가된 주요 기능으로 HistGradientBoosting 모델에서 데이터프레임의 범주형 특성을 지원합니다. 또한 Polars 데이터프레임을 지원합니다. 랜덤 포레스트에서 누락된 값을 지원합니다. 이에 대한 자세한 내용은 사용자 가이드 문서를 참고하세요.

텐서플로 2.16 버전이 릴리스되었습니다. 2.16버전부터 케라스 3.0이 기본이 됩니다. 만약 케라스 2.0버전을 사용하고 싶다면 tf-keras 패키지를 설치하여 사용하세요. 2.16버전부터 tf.estimator가 삭제되었습니다. 파이썬 3.12 버전을 지원하기 시작합니다. CUDA 12.3과 cuDNN 8.9.7을 사용합니다. 자세한 내용은 릴리스 노트를 참고하세요.

아직 코랩의 사이킷런 버전은 1.2.2이고 텐서플로 버전은 2.15입니다. 🙂

“머신 러닝 교과서: 파이토치 편”이 출간되었습니다!

아마존 베스트 셀러 <머신 러닝 교과서>의 파이토치 버전인 <머신 러닝 교과서: 파이토치 편>이 드디어 출간되었습니다!

머신러닝 파트는 최신 라이브러리 버전에 맞춰 내용을 보강하고 딥러닝 파트는 파이토치를 사용하여 인공 신경망, 합성곱 신경망, 순환 신경망을 설명합니다. 거기에다가 트랜스포머와 그래프 합성곱도 추가되었습니다. 마지막으로 파이토치 라이트닝 라이브러리 설명까지! 와우!

  • 온라인/오프라인 서점에서 판매 중입니다! [Yes24], [교보문고], [알라딘]
  • 876페이지, 58,000원 -> 52,200원, 전자책: 46,400원

책을 출간하는데 도움을 주신 길벗 출판사에 감사드립니다. 올해 마지막 도서입니다. 모두 한 해 마무리 잘 하시고 즐거운 연말되세요! 🙂

Scikit-Learn 1.3.0이 릴리스되었습니다!

사이킷런 1.3.0이 릴리스되었습니다. 새로운 기능이 많이 추가되었네요. 중요 변경 사항은 다음과 같습니다.

  • scikit-learn-contrib 패키지에 있던 DBSCAN의 계층형 버전인 HDBSCAN 클래스가 사이킷런에 추가되었습니다. HDBSCAN은 다양한 입실론 값에서 DBSCAN을 수행하기 때문에 밀도 다른 클러스터를 감지할 수 있습니다.
  • 범주형 특성을 해당 범주의 타깃 평균 값으로 인코딩하는 TargetEncoder가 추가되었습니다. 범주의 카디널리티(cardinality)가 큰 경우 사용하면 좋습니다. 누락된 값을 지원하며 훈련 시 본 적 없는 범주는 타깃 평균으로 인코딩됩니다.
  • 이제 (회귀와 분류) 결정 트리에서 누락된 값을 지원합니다. 각 분할 기준에서 누락된 값을 왼쪽 또는 오른쪽 노드로 보냈을 때를 평가합니다. 평가가 동일한 경우 오른쪽 노드로 이동됩니다. 훈련시 누락된 값이 없었는데 예측할 때 누락된 값이 입력되면 다수의 샘플을 가진 노드에 할당됩니다.
  • validation_curve() 함수의 결과를 사용해 검증 곡선을 쉽게 그려 주는 ValidationCurveDisplay 클래스가 추가되었습니다.
  • HistGradientBoostingRegressor 클래스에 감마 회귀를 위한 loss='gamma' 매개변수가 추가되었습니다.
  • OrdinalEncoder에 자주 등장하지 않는 범주를 합쳐주기 위해 min_frequencymax_categories 매개변수가 추가되었습니다. 두 매개변수의 기본값은 None으로 희소한 범주를 합치지 않습니다.
  • KMeans 클래스에서 sample_weight 매개변수가 이제 센트로이드 초기화에도 영향을 미칩니다. 그리고 predict 메서드의 sample_weight 매개변수가 deprecated 됩니다.
  • RandomForestClassifier, RandomForestRegressor, ExtraTreesClassifier, ExtraTreesRegressor 클래스의 oob_score 매개변수에 사용자 정의 OOB 함수를 전달할 수 있습니다.
  • GradientBoostingClassifier 클래스에서 subsample < 1.0일 때 자동으로 점수를 계산하여 oob_scores_oob_score_ 속성으로 제공합니다.
  • 제곱 유클리드 거리 게산을 위한 멀티스레드 Cython 루틴이 추가되었습니다. 최근접 이웃의 경우 두 배 정도 빨라졌다는군요. 와우!

사이킷런 1.3.0 버전의 변경 사항에 대한 더 자세한 내용은 릴리스 노트를 참고하세요! 🙂

“파이썬 라이브러리를 활용한 머신러닝” 사이킷런 1.1 버전 업데이트

최근 릴리스된 사이킷런 1.1.x 버전에서 변경된 부분에 맞춰 <(번역개정2판) 파이썬 라이브러리를 활용한 머신러닝>의 본문 내용을 다음과 같이 업데이트합니다!

  1. (p102) 사이킷런 1.3 버전부터 SGDClassifier의 loss 매개변수 중 로지스틱 손실을 의미하는 'log'가 'log_loss'로 바뀔 예정이므로 첫 번째 줄에서 “훈련합니다.”를 “훈련합니다(1.3 버전에서 'log'가 'log_loss'로 바뀔 예정입니다).“로 수정합니다.
  2. RandomForestClassifier와 ExtraTreesClassifier의 max_features 매개변수 기본값이 'auto'에서 'sqrt'로 바뀔 예정이므로,
    • (p127) 주석 47번을 다음과 같이 바꿉니다. “RandomForestClassifier의 max_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. GradientBoostingClassifier의 loss 매개변수 기본값이 1.3 버전에서 'deviance'에서 'log_loss'로 바뀔 예정이므로
    • (p128) 주석 50번 네 번째 줄에서 “손실을 의미하는 'deviance'입니다.”를 “손실을 의미하는 'deviance'입니다(1.3 버전에서 'deviance'가 'log_loss'로 바뀔 예정입니다).”로 수정합니다.
    • (p143) 표 2-2의 그레이디언트 부스팅의 ‘손실 함수’ 항목에서 “(로지스틱 회귀)”를 “(로지스틱 손실. 1.3 버전에서 'log_loss'로 바뀔 예정)”으로 수정합니다.
  4. (p143) HistGradientBoostingClassifier의 loss 매개변수 기본값이 1.3 버전에서 'auto'에서 'log_loss'로 바뀔 예정이므로 표 2-2의 히스토그램 기반 부스팅의 ‘손실 함수’ 항목에서 “(이진분류는 'binary_crossentropy', 다중 분류는 'categorical_crossentropy')”을 “(로지스틱 손실. 1.3 버전에서 'log_loss'로 바뀔 예정)”로 수정합니다.
  5. (p297) 버전 1.1에서 OneHotEncoder 클래스에 자주 등장하지 않는 범주를 하나로 묶어주는 min_frequency와 max_categories 매개변수가 추가 되었습니다. 4.2절 아래 세 번째 줄에서 “OneHotEncoder 클래스에 구현되어 있습니다.”를 “OneHotEncoder 클래스에 구현되어 있습니다.<주석>옮긴이_ 버전 1.1에서 추가된 min_frequency 매개변수를 사용하면 특정 횟수 또는 비율 보다 적게 등장하는 범주를 하나의 특성으로 합칠 수 있습니다. 또한 max_categories 매개변수를 사용하여 원-핫 인코딩으로 만들어지는 특성의 개수를 제한할 수 있습니다.</주석>“로 수정합니다.

감사합니다! 🙂

[혼자 공부하는 머신러닝+딥러닝] 사이킷런 1.1.0 버전 업데이트 안내

<혼자 공부하는 머신러닝+딥러닝>의 주피터 노트북 코드를 사이킷런 1.1.0 버전에 맞추어 모두 테스트했습니다.

(노트: 2022년 5월 현재 코랩의 파이썬 버전은 3.7.x로 사이킷런 1.0.x만 설치됩니다. 코랩을 사용하는 경우 아래 수정 사항을 무시하세요)

사이킷런 1.1.0 버전에서 SGDClassifier의 loss 매개변수 중 로지스틱 손실을 의미하는 'log'가 'log_loss'로 바뀐다는 경고가 발생합니다. 사이킷런 1.1.0 버전 이상을 사용하는 경우 경고를 피하기 위해 다음과 같이 변경해 주세요.

  • (p208) 두 번째 손코딩, (p210) 첫 번째 손코딩, (p211) 두 번째 손코딩에서 loss='log'를 loss='log_loss'로 바꿉니다.
  • (p214) 위에서 11번째 줄과 20번째 줄, (p215) 5번째 줄에서 loss='log'를 loss='log_loss'로 바꿉니다.
  • (p345) 세 번째 손코딩, (p362) 위에서 15번째 줄에서 loss='log'를 loss='log_loss'로 바꿉니다.

감사합니다!

사이킷런 1.1 버전이 릴리즈되었습니다!

사이킷런 1.1 버전이 릴리즈되었습니다. 주요 변경 사항은 다음과 같습니다.

  • HistGradientBoostingRegressor의 손실 함수에 quantile이 추가되었습니다.
  • neighbors, decomposition, impute 모듈 등을 포함하여 이제 모든 변환기에 get_feature_names_out 메서드가 추가되어 본격적으로 데이터프레임을 훈련 데이터로 사용할 수 있습니다.
  • OneHotEncoder 클래스에 자주 등장하지 않은 범주를 하나로 묶어주는 min_frequencymax_categories 매개변수가 추가되었습니다. 자세한 내용은 가이드를 참고하세요.
  • 거리 계산 루틴이 리팩토링되어 최근접 이웃 알고리즘 등의 속도가 크게 향상되었습니다.
  • NMF의 온라인 학습 버전인 MiniBatchNMF 클래스가 추가되었습니다.
  • KMeans 알고리즘의 계층 군집 버전인 BisectingKMeans 클래스가 추가되었습니다.

이 외에도 많은 기능이 추가되고 개선되었습니다. 자세한 내용은 사이킷런 1.1 버전의 릴리스 노트를 참고하세요!

“XGBoost와 사이킷런을 활용한 그레이디언트 부스팅”이 출간되었습니다!

최고의 그레이디언트 부스팅 라이브러리 중 하나인 XGBoost를 다룬 <XGBoost와 사이킷런을 활용한 그레이디언트 부스팅> 책이 출간되었습니다!

그레디이디언트 부스팅 알고리즘을 소개하는 것 외에도 XGBoost와 사이킷런의 그레이디언트 부스팅 모델의 다양한 옵션을 소개하고 튜닝하는 방법을 설명합니다.

번역서에는 인기가 많은 또 다른 그레이디언트 부스팅 라이브러리인 LightGBM과 CatBoost, 그리고 사이킷런에 최근에 추가된 히스토그램 기반 부스팅도 부록으로 추가했습니다! 즐거운 부스팅 생활을 위하여! 🙂

  • 온라인/오프라인 서점에서 판매중입니다. [Yes24], [교보문고], [한빛미디어]
  • 380페이지, 풀컬러: 34,000원 –> 30,600원, 전자책 27,200원
  • 이 책에 실린 코드는 깃허브에 있습니다.

scikit-learn with GPU!

사이킷런 알고리즘은 대부분 파이썬 또는 Cython으로 작성되어 있습니다. 그래서 큰 의존성 문제 없이 다양한 플랫폼에 이식될 수 있고 가장 널리 사용되는 머신러닝 라이브러리가 되었습니다.

사이킷런은 그동안 GPU를 활용한 구현에 대해 부정적인 입장을 견지해 왔습니다. 사이킷런의 다층 퍼셉트론(MLPClassifier, MLPRegressor)에 GPU 지원이 추가되지 않는지 내심 기대가 많기도 했습니다. 하지만 사이킷런의 신경망 구현이 텐서플로와 파이토치 같은 기능을 제공하기는 어렵다고 합니다. 복잡도가 너무 높아진다는 것이 그 이유 중 하나입니다.

그런데 최근에 사이킷런에 GPU 기능을 활용하려는 아이디어가 제안되었습니다. 파이썬 Array API를 사이킷런에 접목할 수 있다면 CuPy 등을 통해 GPU 활용이 가능할 수 있습니다(#22352 참조). 아예 저수준에서 GPU를 지원하는 방식도 제안되었습니다(#22438).

며칠 전에는 사이킷런 프로젝트를 이끄는 Inria 연구소에서 GPU 관련된 구인 공고를 냈습니다! 순조롭게 진행된다면 인텔 기반으로 k-최근접 이웃, k-평균, 가우시안 RBF 커널 등에 GPU 구현이 추가될 것으로 예상됩니다. 아직 어떤 모습이 될지는 모르겠지만 파이썬 컨텍스트 매니저를 사용하거나, 메서드나 파이프라인의 일부로 구현될 수도 있을 것 같습니다.

사이킷런이 범용성 뿐만 아니라 속도까지 높아진다면 많은 사람들이 정말 좋아할 것 같습니다. 이참에 그레이디언트 부스팅까지 GPU 구현을 바라는 것은 너무 욕심일까요? 🙂

사이킷런 1.0 RC1이 릴리즈되었습니다.

10년이 훌쩍 넘었습니다. 그동안 명실공히 표준 머신러닝 라이브러리로 자리매김한 사이킷런이 드디어 버전 1.0의 RC1을 릴리스했습니다. 이번에도 많은 변화가 있습니다.

  • loss나 criterion 매개변수마다 서로 다르게 지정되던 제곱 오차를 ‘squared_error’로 통일합니다. 마찬가지로 절대값 오차를 ‘absoulte_error’로 통일합니다.
  • 판다스 데이터프레임으로 모델을 훈련할 때 열 이름을 feature_names_in_ 속성에 저장하여 관리됩니다. 훈련된 모델을 열 이름이 다른 데이터프레임에 사용하면 오류가 납니다.
  • 흑인 비율이 특성으로 들어가 있어 말이 많았던 보스턴 데이터셋이 deprecated 됩니다. 1.2 버전에서는 사라진다고 하네요.
  • 보정 곡선을 그려주는 CalibrationDisplay가 추가됩니다.
  • 특성과 타깃 사이의 피어슨 r 값을 계산해 주는 r_regression 함수가 추가됩니다.
  • OneClassSVM의 SGD 버전인 SGDOneClassSVM 클래스가 추가됩니다.
  • Ridge 클래스에 ‘lbfgs’ solver가 추가됩니다. 선형 모델에 있던 normalize 매개변수가 deprecated 됩니다. 1.2 버전에서는 삭제될 예정입니다. 대신 StandardScaler를 사용하세요.
  • StratifiedKFold와 GroupKFold가 합쳐진 StratifiedGroupKFold가 추가됩니다.

이 외에도 많은 기능이 추가되고 개선되었습니다. 배울 게 한층 더 늘었네요. ㅎ 전체 릴리스 노트는 사이킷런 웹사이트를 참고하세요! 🙂