카테고리 보관물: Machine Learning

‘혼자 공부하는 머신러닝+딥러닝’ 사이킷런 1.2.2, 텐서플로 2.11.0에서 재실행 완료

<혼자 공부하는 머신러닝+딥러닝>의 주피터 노트북을 코랩(사이킷런 1.2.2와 텐서플로 2.11.0)에서 모두 재실행하여 업데이트했습니다.

9-02절의 코드가 원-핫 인코딩 벡터 크기 때문에 코랩에서 메모리 부족을 일으킵니다. 이를 피하기 위해 사용하는 단어 개수를 500개에서 300개로 줄였습니다. 자세한 수정 내용은 에러타 페이지를 참고해 주세요.

감사합니다!

‘파이썬 라이브러리를 활용한 머신러닝(개정 2판)’ 사이킷런 1.2.1에서 재실행 완료

<파이썬 라이브러리를 활용한 머신러닝(개정 2판)>의 코드를 사이킷런 1.2.1 버전에서 재실행하여 깃허브에 업데이트했습니다.

주요 수정 사항은 다음과 같습니다. 사이킷런 1.2 버전에서 load_boston() 함수가 삭제되었기 때문에 대신 보스턴 주택 데이터셋을 직접 다운로드 하도록 수정합니다. 넘파이 1.20 버전에서 np.bool이 deprecated 되었기 때문에 대신 bool을 사용합니다.

맷플롯립 3.4.0 버전에서 _rebuild() 메서드가 사라졌기 때문에 대신 3.2.0 버전에서 추가된 addfont() 메서드를 사용하여 한글 폰트를 추가하도록 수정합니다. 또 imshow() 함수에서 vmin, vmax 매개변수를 삭제했습니다.

감사합니다!

“파이썬 라이브러리를 활용한 머신러닝” 사이킷런 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 매개변수를 사용하여 원-핫 인코딩으로 만들어지는 특성의 개수를 제한할 수 있습니다.</주석>“로 수정합니다.

감사합니다! 🙂

XGBoost 1.6 버전 릴리즈와 [XGBoost와 사이킷런을 활용한 그레이디언트 부스팅] 업데이트 안내

지난 달에 XGBoost 1.6 버전이 릴리스되었습니다. 무엇보다도 이번에 범주형 변수에 대한 지원이 확대된 것이 눈에 띱니다. 1.5버전에서 'gpu_hist'만 범주형 변수를 지원했는데 1.6 버전에서는 'hist', 'approx'에서도 범주형 변수를 지원합니다. 또 LightGBM처럼 원-핫 인코딩을 위한 범주 개수의 임곗값을 지정하는 max_cat_to_onehot 매개변수가 추가되었습니다. 기본값은 4입니다.

또한 다중 출력 모델을 지원하고, 'approx' 트리 메서드를 'hist'를 기반으로 재작성했으며, 모델 저장을 위해 UBJSON 포맷을 지원합니다. 이외에도 많은 기능이 추가, 개선되었습니다. 자세한 내용은 XGboost 릴리스 노트를 참고하세요.

<XGBoost와 사이킷런을 활용한 그레이디언트 부스팅>의 깃허브 코드는 사이킷런 1.1과 XGBoost 1.6에서 모두 테스트되었습니다.

다음은 두 라이브러리의 버전 변경으로 인해 수정할 내용입니다.

  1. (노트: 2022년 5월 현재 코랩의 파이썬 버전은 3.7.x로 사이킷런 1.0.x만 설치됩니다. 코랩을 사용하는 경우 이 항목의 수정 사항을 무시하세요) 사이킷런 1.1 버전에 따른 변경 사항
    • (p95, p96) DecisionTreeClassifier와 DecisionTreeRegressorExtraTreeClassifierExtraTreeRegressorRandomForestClassifierRandomForestRegressorExtraTreesClassifierExtraTreesRegressor의 max_features 매개변수 중 'auto'가 'sqrt'와 동일합니다. 1.3 버전에서 'auto'가 삭제된다는 deprecated 경고가 발생하므로 'auto'를 'sqrt'로 변경합니다.
      (p95) 위에서 9번째 줄, (p96) 위에서 3번째 줄, (p119) 아래에서 6번째 줄, (p120) 위에서 7번째 줄과 아래에서 9번째 줄, (p121) 위에서 4번째 줄과 아래에서 12번째 줄.
  2. XGBoost 1.6 버전에 따른 변경 사항
    • 1.6 버전에서 use_label_encoder 매개변수 기본값이 True에서 False로 변경되었습니다. 따라서 타깃 레이블을 0부터 인코딩해야 합니다.
      (p149) 위에서 13번째 줄에서 y = df.iloc[:,0]을 y = df.iloc[:,0] - 1로 수정합니다.
      (p221) 위에서 3번째 줄에서 y = df.iloc[:,0]을 y = df.iloc[:,0] - 1로 수정합니다.
      (p232) 위에서 8번째 줄에서 “recall_score() 함수를 호출하려면 y_testy_pred와 함께 pos_label=2로 지정해야 합니다”를 “recall_score() 함수를 호출하려면 y_test와 y_pred를 전달해야 합니다”로 수정합니다. 그 아래 recall_score() 함수 호출에서 pos_label=2를 삭제합니다.
      (p233) 아래에서 7번째 줄에서 y = df.iloc[:,0]을 y = df.iloc[:,0] - 1로 수정합니다. 아래에서 1번째 줄에서 pos_label=2를 삭제합니다.
      (p237) 위에서 2번째 줄에서 df_train[df_train['LABEL']==2].values를 df_train[df_train['LABEL']==1].values로 수정합니다. 아래에서 1번째 줄에서 pos_label=2를 삭제합니다.
    • (p352) 1.6 버전에서 범주형 변수에 대한 지원이 추가되었습니다. 두 번째 문단 끝에 “1.6버전에서는 'approx'와 'hist'에서도 범주형 변수를 지원합니다.”를 추가합니다.

사이킷런 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원
  • 이 책에 실린 코드는 깃허브에 있습니다.

“파이썬 라이브러리를 활용한 머신러닝(번역개정2판)”이 출간되었습니다!

2017년 처음 이 책을 작업할 때 사이킷런 코드를 보면서 무식하게 노트에 한 줄 한 줄 펜으로 번역해서 옮겼던 기억이 납니다. 사이킷런 개발자가 쓴 책인만큼 잘 옮기고 싶었고 그때는 지금처럼 좋은 책이 많지 않아서 더 그랬던 것 같습니다.

무슨 생각이 들었는지 읽을만한 책을 만들자고 호기롭게 시작한 그 도전이 5년을 지나 오늘 여기까지 오게된 것 같네요. 이 책이 없었다면 아마 지금 다른 일을 하고 있을 것 같습니다.

2019년 번역개정판을 내고도 많은 분들에게 꾸준히 사랑을 받았습니다. 정말 감사드립니다. 새로운 번역개정2판은 최근 릴리즈된 사이킷런 1.0 버전을 반영하였습니다. 새로운 기능과 변경된 내용을 많이 담아서 500페이지가 넘었습니다. 또 구글 코랩에서 실습할 수 있도록 코드를 업데이트했습니다. 흔쾌히 번역개정2판을 허락해 주신 한빛미디어 출판사에 감사드립니다. 다시 한 번 머신러닝 학습의 엔트로피를 줄이는데 도움이 되기를 기대합니다! 감사합니다! 🙂

“머신러닝 파워드 애플리케이션” 독서 후기

아래는 구글 Machine Learning GDE인 박찬성 님이 <머신러닝 파워드 애플리케이션>을 읽은 후 작성하신 리뷰입니다. 찬성 님의 허락을 받아 블로그에 싣게 되었습니다. 좋은 리뷰 정말 감사합니다! 🙂


🖌 머신러닝 파워드 애플리케이션 독서 후기

이 책은 머신러닝이 탑재된 애플리케이션을 만들기위해, End to End 로(처음부터 끝까지) 들어가야 하는 노력을 잘 정리해 보여준다. 이 책만의 몇 가지 특징이 있는 데, 그 중 두개를 꼽자면

1️⃣ 머신러닝 에디터라는 애플리케이션을 만드는 예를 보여주는것 같지만, 이 구체적인 예제를 다룸과 동시에 다양한 문제에 사용될 수 있는 접근법들을 함께 설명한다. 구체적인 예제를 풀어내지만, 일반적인 컨셉도 함께 배울 수 있다.

2️⃣ 애플리케이션 구축에 필요한 모든 요소에 동일한 가중치를 두고 설명한다. 데이터 수집, 모델링, 배포, 모니터링 등에서 한 부분에만 집중하지 않기 때문에, 성공적인 애플리케이션 구축을 위해서는 “모든 부분이 중요하다”는 사실을 묵시적으로 뇌리에 잘 심어주는것 같다.

이 책이 강조하는 부분은 반복성이다. 애플리케이션을 만드는 전체 과정의 입장에서의 반복. 또는 데이터 수집/검증, 모델링, 배포 후 사용자와의 상호작용 등 전체 파이프라인의 부분별로의 반복. 빠르게 아이디어를 실험하고, 검증을 통해 문제를 파악하고, 개선하는 반복의 사이클을 항상 고려해야만 성공적인 머신러닝이 탑재된 애플리케이션을 만들 수 있다는것이다.

✔️ 이는 다른 책에서도 흔히 볼 수 있는 강조인데, 이 책에서는 특히 더 많이 강조하는 부분인것 같다. 전체 파이프라인, 모델링 측면에서는 그렇다고 많이 느끼고 있었는데, 이를 현재 보유한 인력에 맞춰 더욱 잘게 쪼개진 사이클을 만들 수 있구나 라는걸 알게되었다.

이 책은 애플리케이션을 구축하는 전반을 다룬다. 따라서 “서비스”, “고객”의 관점에서 내용을 설명한다. 대개 인공지능이 모든것을 대체할 것이다 라고들 생각하는 경향이 있지만, 100%의 예측이란 불가능하기 때문에 머신러닝이 실패할 때를 항상 대비해야한다. 이 실패를 대처하는 방법으로 머신러닝이 도입되기 전 활용되어온 규칙기반 알고리즘, 또는 매우 단순하게라도 작동하는 간단한 머신러닝 모델을 추가적으로 활용하는것이다.

✔️ 즉 머신러닝이 실패하는 상황을 “우아하게” 대처하기 위해서는 머신러닝이 들어가기 이전의 노력 + 머신러닝을 운용하는 노력이 결합되어야 한다는 것이다. 그리고 이를 위해서는 도메인 지식을 집요하게 습득하려는 노력이 선행되어야한다. AI가 만능이다 라는 생각도 가져야 하지만(그래야 더 완성도 높은 모델을 만들기 때문에), AI 붐이 일어나기 전 수십년간 사람들이 축적해온 문제 해결 능력/방법은 결코 무시해서는 안된다.

✔️ 머신러닝이 탑재되는 애플리케이션/시스템을 만들겠다는 계획은 좋지만, 그 전에 MVP로 만들어야 할 것은 머신러닝이 탑재되지 않은 버전의 최선의 결과물이어야 할 것이다.

그 외에도 보다 구체적인 경험적 방법 (모범 사례)를 파이프라인의 각 요소마다 상세히 설명하고 있다. 물론 추가적인 리서치는 필요하지만, 큰 그림을 이해하고 체크리스트를 만들기에 충분한 지식을 전달한다.

약간 아쉬운점은 비교적 배포, 모니터링, 인프라에 대한 내용이 부족하다는 것이다. 하지만 보다 구체적인 내용을 뒷받침할 수 있는 책들이 많으므로 함께 읽어보면 좋을것 같다고 생각한다.

이 책은 두 번 이상 읽을 때 더 도움이되는 책이며, 각 장마다 제시하는 여러가지 옵션을 시각적으로 표현하거나 체크-리스트로 만들어 관리하면 꽤 도움이 될 것이라고 느꼈다. 다음 주 부터 재독을 진행할 예정인데, 만들게되면 공유해 보겠습니다 🙂


“혼자 공부하는 머신러닝+딥러닝”과 “파이토치로 배우는 자연어 처리”가 교보문고 2021년 올해의 책에 선정되었습니다!

교보문고 2021 올해의 책에 <혼자 공부하는 머신러닝+딥러닝>과 <파이토치로 배우는 자연어 처리> 책이 선정되었습니다. <혼자 공부하는 머신러닝+딥러닝>은 AI/ML 분야에서 1등을 했고 <파이토치로 배우는 자연어 처리>는 자연어 처리 분야에서 1등을 했습니다! (머신 러닝 교과서도 후보에 들었네요! 🙂 )

한 해 동안 제 책을 애독해 주신 모든 분들께 정말 감사드립니다!

“머신러닝 파워드 애플리케이션” 사이킷런 1.0 업데이트 완료!

<머신러닝 파워드 애플리케이션>의 주피터 노트북을 사이킷런 1.0에 맞추어 업데이트했습니다. 업데이트된 노트북은 깃허브 저장소에서 확인하실 수 있습니다. 감사합니다! 🙂