scikit-learn 핵심개발자 안드레아 뮐러가 쓴 머신러닝 책 - 파이썬 라이브러리를 활용한 머신러닝
수포자를 위한 파이썬 머신러닝(기계학습)책
파이썬 라이브러리를 활용한 머신러닝
이 리뷰는 한빛미디어의 “나는 리뷰어다” 이벤트를 통해 책을 제공받아 작성했습니다.
이 책은 싸이킷런의 핵심 개발자가 참여해 집필했다는 것만으로도 매력적으로 다가왔다. 파이썬 머신러닝을 얘기할 때 사이킷런이 핵심을 차지하고 있기 때문에 출간 때부터 눈여겨 왔는데, 한빛미디어의 나는 리뷰어다
를 통해 읽을 수 있게 되어 행운이었다.
이 책은 그간 여러 경로로 머신러닝을 배워 온 내게 머신러닝의 개념을 머릿속에 정리할 수 있도록 도움을 주었다.
또 그동안 읽었던 머신러닝 관련 책들에 있는 수식들은 수포자인 내게 자연스럽게 위축되고 갑자기 머릿속이 하얗게 타버리는 경험을 주었다. 하지만 이 책은 어려운 수식 대신 친절한 코드로 그 설명을 대신하고 있다. 어려운 수식을 이해하고 있지 못하더라도 싸이킷런에 구현 된 코드 몇 줄이면 머신러닝을 그럴듯 하게 구현하고 비교/실험해 볼 수 있다.
게다가 소스코드는 깃헙 저장소에 친절하게 한글로 번역되어 공개되어 있다. 그리고 역자의 블로그를 통해서 2장까지 무료로 읽어볼 수 있도록 공개 되어 있기도 하다.
이 책의 저자는 mglearn이라는 이 책을 위한 라이브러리를 만들어 그래프나 데이터 적재와 관련한 세세한 코드를 일일이 쓰지 않아도 되게끔 유틸리티 함수를 만들기 까지 했다. 이 라이브러리와 함께 친절한 설명은 싸이킷런을 처음 시작하는 초보자들에게 진입장벽을 낮춰주려는 노력이 보이는 책이다.
그리고 대부분의 데이터는 싸이킷런에 내장된 데이터셋을 사용했다. 그래서 대부분 import만으로 데이터를 로드해서 사용할 수 있도록 구성되어 있다.
기술서적을 읽을 때 코드를 실행해 보지 않고 눈으로만 읽으면 잘 이해가 되지 않는 편인데 이 책은 친절하게 소스코드 주석도 번역이 되어 있어 소스코드를 실행해 보는 것만으로도 쉽게 이해할 수 있도록 구성되어있다. 그래서 책을 읽기 전에 소스코드를 먼저 실행해 보는 것만으로도 책의 흐름을 잡는데 도움이 되었다. 또, 다양한 머신러닝의 여러 알고리즘을 비교해볼 수 있다.
그리고 7장의 텍스트데이터 다루기에서는 KoNLPy를 사용한 영화분석을 별도로 추가해서 한국어 텍스트를 다루는 방법까지 친절하게 안내되어 있다.
지도 학습
이 책을 구매하지 않더라도 지도 학습까지는 역자의 블로그에 공개가 되어 있어 무료로 볼 수 있다. 2장은 지도 학습과 관련 된 모델의 장단점을 자세한 코드와 결과로 비교해 볼 수가 있다. 또 싸이킷런에 내장되어 있는 데이터셋을 통해 다양한 모델을 실험해 볼 수 있어 분류 데이터인지 회귀 데이터인지에 따라 어떤 모델을 사용해야 할지 비교해 볼 수가 있다.
비지도 학습
비지도 학습에서는 PCA와 t-SNE를 사용한 결과비교를 얼굴데이터셋을 통해 비교해 볼 수 있도록 설명하고 있다. 그리고 이미지 데이터셋을 다루는 방법과 다양한 알고리즘에 대한 비교를 해준다.
레이블이 없는 데이터를 다루는 비지도 학습에서는 분해, 매니폴드, 군집을 통해 데이터의 이해도를 높일 수 있는 방법을 제시해 준다.
범주형 변수 다루기 One-hot-Encoding
머신러닝에서 피처엔지니어링을 할 때 범주형 변수를 다루는 원핫인코딩을 이해하기 쉽게 자세히 설명하고 있다. 처음 캐글에서 타이타닉 예제를 다루며 원핫인코딩을 알게 되었는데 get_dummies와 OneHotEncoder를 통해 원핫인코딩을 하는 방법 또한 소개하고 있다.
원핫인코딩을 자전거 대여 데이터셋의 시간-요일에 적용한 예
한국어 자연어처리 KoNLPy
NLTK만으로는 한국어 데이터를 다루기 어려운데 부록으로 한국어 자연어처리 패키지인 KoNLPy부분까지 다루고 있다. 그리고 네이버 영화리뷰 20만개를 묶은 말뭉치 데이터를 활용하여 학습시키는 것도 알려주고 있다.
이 책은 머신러닝(기계학습)을 처음 시작하는 사람들에게 머신러닝이 어떤 것이고 지도 학습과 비지도 학습의 차이, 레이블이란 무엇이고 레이블이 있고 없고의 차이를 알게 해준다. 그리고 데이터셋에 따라 어떤 모델을 사용하고 평가하는 방법, 그리고 성능향상을 위한 방법도 제시하고 있다. 또 파이프라인을 통해 교차검증을 사용하여 모델을 평가하고 그리드서치를 사용해서 매개변수를 엮는 과정에서 발생할 수 있는 실수를 줄여줄 수 있도록 안내하고 있다.
다만, 이 책은 입문서이고 제목에서 라이브러리를 활용한 머신러닝이기 때문에 책 소개에서처럼 밑바닥부터 다루고 있지 않다. 그래서 각 알고리즘의 구현철학이나 내부 동작에 대해서는 좀 더 깊게 볼 필요가 있다.
이 책은 머신러닝이라는 큰 그림을 이해하고 문제를 풀기위한 큰 맥락을 제공한다. 그간 여러 경로로 학습하고 이해했던 머신러닝에 대해 정리하고 놓치고 있었던 부분들을 챙겨서 앞으로 학습할 방향을 잡는데 도움이 되었다.