[Review]Introduction to ML with Python

catIntroduction to ML with Python은 사이킷런(scikit-learn) 0.18 버전이 출시된 후 가장 먼저 나온(작년 10월 출간) 파이썬 머신러닝 책입니다. 이전 포스트에서도 잠깐 언급한 적이 있지만 사이킷런 0.18 버전에는 피드포워드(feed-forward) 뉴럴 네트워크 클래스가 추가되었습니다. 그래서 이 책에도 이와 관련된 섹션이 추가되어 있네요. 이 책의 저자 중 한명인 앤디(Andreas C. Muller)는 뉴욕 대학교의 리서치 엔지니어이면서 사이킷런의 핵심 개발자입니다. 머신러닝 PhD로서 머신러닝에 대해서 잘 알고 있을  뿐만 아니라 사이킷런에 대해서 누구보다도 잘 알고 있음은 두말할 필요가 없습니다.

머신러닝의 실용서와 이론서의 측면을 모두 담은 책은 쉽게 보기 힘듭니다. 특히나 여러 종류의 알고리즘에 걸쳐서라면 더욱 그렇습니다. 이 책은 후자 보다는 전자에 무게를 실었습니다. 수식은 과감히 덮고 가능하면 직관적으로 이해할 수 있도록 배려했으며 무엇보다도 상당히 많은 종류의 알고리즘을 설명하고 사이킷런으로 예시를 보여주고 있습니다. 이 책을 번역서로 내기 위해 제가 번역 작업을 진행하고 있고 대략 70% 정도 진척이 되었습니다. 전체 내용을 가늠하실 수 있도록 챕터별 내용을 요약했습니다.

  1. Introduction
    1장은 짧은 분량으로 머신러닝에 대한 간략한 소개와 이 책에서 사용하는 도구인 주피터 노트북, 넘파이(NumPy), 사이파이(SciPy), 맷플롯립(matplotlib), 판다스(pandas)에 대해 설명합니다. 하지만 아주 간략히만 설명하고 있어서 주피터 노트북이나 넘파이를 전혀 모르는 독자라면 내용을 따라가기가 조금 어색할 수 있습니다. 하지만 서두 부분을 최소화한 것이 전체 책의 분량을 조절하는데 도움이 되었을 것 같습니다.
  2. Supervised Learning
    여느 머신러닝 책에서와 마찬가지로 이 책도 지도학습과 비지도학습이 두개의 큰 챕터로 나누어져 있습니다. 이 두 챕터가 이 책의 절반 이상을 차지할 정도로 가장 많은 분량입니다. 2장은 분류와 회귀에 대한 설명으로 시작해서 오버피팅과 언더피팅을 이해하도록 간단한 예시를 들어 직관적으로 이해하도록 설명을 하고 있습니다. 그 다음은 본격적인 알고리즘에 대한 설명입니다. 지도학습 챕터에서 다루고 있는 알고리즘은 k-최근접이웃(KNeighborsClassifier, KNeighborsRegressor), 선형모델(LinearRegression, Ridge, Lasso, LogisticRegression), 나이브 베이즈 분류기(BernoulliNB, MultinomialNB, GaussianNB), 의사결정트리(DecisionTreeClassifier, DecisionTreeRegressor), 랜덤 포레스트(RandomForestClassifier), 그래디언트 부스팅 트리(GradientBoostingClassifier), 서포트 벡터 머신(LinearSVC, SVC), 뉴럴 네트워크(MLPClassifier) 입니다. 예제를 위해서는 사이킷런에 포함된 샘플 데이터와 인공적으로 만든 데이터셋을 함께 사용하고 있습니다. 그리고 각 알고리즘의 장단점과 특징을 잘 비교하였습니다.
  3. Unsupervised Learning
    비지도 학습 챕터는 크게 전처리와 차원 축소, 군집으로 나뉘어서 설명하고 있습니다. 전처리에서는 여러가지 스케일링 메소드(MinMaxScaler, StandardScaler, RobustScaler, Normalizer)에 대해 설명하고 있고 알고리즘에 적용될 때 어떤 차이를 발생시키는지 여러가지 예시를 들고 있습니다. 차원 축소에서는 PCA(PCA)와 NMF(Non-Negative Matrix Factorization, NMF), t-SNE(TSNE)를 다루고 있습니다. 클러스터링에서는 k-평균(KMeans), 병합군집(AgglomerativeClustering), DBSCAN(Density-Based Spatial Clustering of Applications with Noise, DBSCAN) 세가지 알고리즘을 다루고 있습니다. 특히 비지도 학습의 결과를 평가하기 위한 여러가지 방법과 덴드로그램(dendrogram)에 대해서도 설명하고 있습니다. 이 챕터에서는 LFW(Labeled Faces in the Wild) 데이터에 있는 유명 인사의 얼굴 이미지를 이용하여 여러 알고리즘의 예제를 만들어서 알고리즘의 특징을 비교하기가 좋습니다.
  4. Representing Data and Engineering Features
    데이터 표현과 특성 엔지니어링인 이 챕터에서는 숫자 데이터를 카테고리 변수로 다루는 방법(pd.get_dummies, OneHotEncoder)과 선형 모델을 확장하기 위한 특성 추출(PolynomialFeatures)을 앞부분에 다루고 있습니다. 그리고 뒷부분에서는 특성 선택을 위한 사이킷런의 여러 도구(SelectPercentile, SelectFromModel, RFE)를 다루고 있습니다. 이런 방법들이 앞장에서 만들었던 예제를 어떻게 변화시키는지 보이기 위해 지도 학습 알고리즘들을 다시 이용합니다.
  5. Model Evaluation and Improvement
    이 장에서는 머신러닝 책에서 빠질 수 없는 크로스 밸리데이션(cross_val_score, KFold, LeaveOneOut, ShuffleSplit, GroupKFold)을 설명하고 있습니다. 거기에 더해 그리드 서치(Grid Search)와 이를 크로스 밸리데이션과 함께 쓸 수 있는 가이드를 안내하고 있습니다(GridSearchCV). 이 챕터의 뒷부분은 분류와 회귀에서 모델 평가를 위한 도구를 각각 소개하고 있습니다(confusion_matrix, f1_score, classification_report, precision_recall_curve, average_precision_socreroc_curve, roc_auc_score, accuracy_score, SCORERS).
  6. Algorithm Chains and Pipelines
    이 챕터는 짧지만 사이킷런의 강력한 도구인 파이프라인(Pipeline, make_pipeline)에 대해 자세히 설명하고 있습니다. 파이프라인을 사용하여 전처리, 특성 선택, 모델링을 묶는 방법과 또 그리드 서치와 함께 사용하는 방법을 잘 설명하고 있습니다. 역시 앞서 사용했던 지도 학습, 비지도 학습 모델을 다시 사용하여 알고리즘을 반복해서 학습하는 효과가 있습니다.
  7. Working with Text Data
    기술적인 챕터로는 마지막인 이 장에서는 텍스트 데이터를 다루는 여러가지 방식에 대해 설명하고 있습니다(CountVectorizer, tfidVectorizer, LatentDirichletAllocation). 이를 위해 IMDb 영화 리뷰 텍스트 데이터를 사용해 감성 분석을 하는 예를 만듭니다. 백오브워즈(bag-of-words)와 tf-idf 등의 여러 방법을 소개합니다. 그리고 spacy 와 nltk 파이썬 패키지를 사용한 예제와 토픽 모델링 예를 포함하고 있습니다.
  8. Wrapping Up
    마지막 장에서는 머신러닝 시스템을 운영 환경에 구축하기 위한 조언과 앞으로 더 배워나갈 방향에 대해서 이론, 라이브러리, 추천시스템, 뉴럴 네트워크 등으로 자세하게 설명합니다.

이 책은 세바스찬 라쉬카의 Python Machine Learning에서 수식을 덜어내고 사이킷런에 집중하여 좀 더 많은 알고리즘과 예제를 포함한 버전으로 생각할 수 있습니다. 원서를 읽을 경우엔 에러타가 좀 있어서 오탈자 페이지에서 정정하는 것이 좋습니다. 이 책에서 사용하는 mglearn 모듈은 저자가 주로 그래프나 예제 데이터를 만들기 위해 만든 라이브러리로 깃허브에서 이 책의 소스가 담긴 주피터 노트북과 함께 확인할 수 있습니다. mglearn 모듈을 사용하여 책에 담긴 소스 분량을 줄인 것은 책의 볼륨을 적절히 유지하기 위한 불가피한 선택인 것 같습니다. 🙂

[Review]Introduction to ML with Python”에 대한 4개의 생각

  1. Kwak Ji Won

    안녕하세요,
    늦게나마 새해 인사를 드립니다.
    지난해에도 Machine Learning 과 관련한 유용한 자료들을 공유해주셔서 많은 참고가 되었습니다.
    올해에도 많은 자료공유 부탁드리며 저도 머신러닝을 연구하는 연구원으로서 머신러닝 연구를 수행하면서 지식공유 더욱 활발히 진행했으면 하는 바램입니다.
    이전에 번역출간하신 책 “텐서플로우 첫 걸음”도 구입해서 보았습니다.
    또 이전에 “텐서플로우 첫 걸음”은 출간하시기 전에 html 로 제공해신것 같은데, 지금 번역하시는 책도 html 버전으로 제공이 가능하신지요?
    좋은 하루 되세요.

    좋아요

    응답
    1. 로드홈 글의 글쓴이

      안녕하세요. 댓글 주셔서 감사드립니다. 텐서플로 첫걸음은 저자가 글을 공개했었기 때문에 번역이 책으로 나오기 전에 블로그에 올릴 수 있었습니다. 그러나 이 책처럼 공개가 안되어 있는 경우에는 번역본도 공개가 불가능하네요. ㅜㅜ

      좋아요

      응답
  2. Insung

    혹시언제쯤 출간예정인지알수있을까요? 텐서플로우를 R처럼써보려하는데.. (모델링부분만) 아무래도 다양한설정값이나 적용법이낯설어서 책으로보려고합니다. 현재원서만 미국에서직구할수있는거같지만 제가영어가약하다보니 ㅠㅠ 혹시 언제쯤 국내에번역본이발간될지궁금합니다.

    Liked by 1명

    응답
    1. 로드홈 글의 글쓴이

      안녕하세요. 지금 출판사에서 교정 중이라 4월 중에 출간되지 않을까 생각되네요. 즐거운 하루 되세요! 🙂

      좋아요

      응답

Insung님에게 덧글 달기 응답 취소

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