O’REILLY Hands on machine learning with Sci-kit learn and tensorflow 리뷰

쓰여진 날: by Creative Commons Licence

약 5개월 동안 천천히 읽으며 공부했던 책으로 국내외로 평이 좋은 책입니다. 인기 때문인지 인터넷에서는 찾기가 매우 힘들었고 저는 결국 책을 아마존에서 구매했네요. 이 책의 반은 기본적인 기계학습 개념에 관한 내용입니다. 기계학습의 모든 알고리즘을 소개하기 보다는 딥러닝에 기초가 되는 부분만을 추려놓았고 sklearn 으로 직접 코드를 돌려봅니다. 다른 책과 비교해 좋은 점은 알고리즘을 간단히 소개하고 돌려보기 보단 기계학습이라는 분야 자체게 좀 더 깊숙히 들어간다는 거죠. 다음은 텐서플로를 이용한 딥러닝이 반을 이룹니다. 텐서플로로 짜는 선형회귀부터 Autoender 까지 꽤 넒은 부분을 다루는데 체계적인 텐서플로 코드가 인상 깊습니다. 특히 딥러닝은 공부했지만 코딩이 막막한 분에겐 정말 좋습니다. 개인적으로는 딥러닝을 배우기보단 텐서플로 코딩을 배우는데 좋았네요.

1. The machine learning Landscape

기계학습이 무엇을 하는 것인지 개념부터 잡습니다. 기계학습이 다루는 문제들과 기계학습에 대한 전체적인 틀을 보는 챕터입니다. 이전에 기계학습에 대해 공부를 해보았다면 넘어가거나 가볍게 읽는 정도로 넘어갈 수 있습니다.

2. End-to-End Machine learning project

LA 집값 데이터를 가지고 실제 기계학습을 해봅니다. 데이터 전처리부터 Fine Tuning 까지 정말 처음부터 끝까지 보여줍니다. 데이터를 전처리하는 부분에 신경을 많이 쓴 듯 합니다. 한 과정에도 여러가지 방법을 보여주는데 이 부분이 저는 특히 좋았네요. 코드 자체가 매우 고급지게 짜여서 두고두고 볼 수 있습니다. 이런 방식으로 코드를 짜는 것을 연습해보고 있습니다. 그렇지만 데이터가 워낙 단순해 실제로 비슷한 코드를 짜는데는 개인적으로 연습이 필요합니다. 가장 좋은 점이 간단한 과정에도 고급진 코딩을 볼 수 있다는 것이네요.

3. Classification

유명한 MNIST 데이터를 가지고 분류를 해봅니다. Classification의 기초 중 하나는 performance measure 입니다. 역시나 이 장은 measuring에 신경을 썼어요. 알고리즘 자체는 SVM이나 K Neighbor과 같은 코드를 돌리기만 하면 되는 것이라 간단하게 소개하고 차이를 보여줍니다. 제목은 classification이지만, classification performance measure로 생각하면 됩니다.

4. Training Models

모델링 방법들에 대해 소개하는 장입니다. 처음엔 2장이 regression에 관한 것인줄 알았는데 2장은 머신러닝 과정에 대해 소개만 하는 것이고 이 4장이 regression에 대한 설명입니다.  GD, Regularized linear models와 같은 가장 기본적인 regression을 다룹니다. sci-kit learn을 이용하여 코드에 대한건 그닥 자세히 나오지는 않습니다. 그보단 알고리즘에 대한 소개, 즉 GD, SGD, Ridge이 무엇인지에 더 공부합니다. 이 부분은 코드가 별로 없고 설명 뿐이라 대충 넘어갈 수도 있으나 사실 매우 중요한 부분입니다. Regression에 대한 기본 개념을 잡아야 이후에 공부가 수월해 집니다. 학습이라는 것이 무엇인지, overfitting, underfitting에 대한 깨달음? 을 얻는 것을 목표로 했습니다. 딥러닝을 하기 위해선 이 부분을 매우 잘 이해하고 넘어가야 합니다.

5,6. SVM, Decision Tree

SVM이 어떻게 작동되는지, 왜 좋은 알고리즘인지 소개합니다. 자세한 설명보다는 큰 맥락으로 이러하게 돌아간다 는 것을 보여주는 거 같아요. 사실 수학적으로 깊게 들어갈 것이 아니면 어떻게 작동하는지만 알면 되는 알고리즘이라 많은 설명이 있진 않습니다.

7. Ensemble Learning and Random Forests

머신러닝 프로젝트의 끝에는 앙상블을 쓰기 마련입니다. 여기서 그 앙상블을 다루는데 설명이 아주 좋습니다. 사실 머신러닝에 대한 큰 개념이 없으면 처음부터 앙상블을 적용하거나 그냥 이유없이 쓰는 경우가 많습니다. 앙상블을 왜 쓰는지, 어떻게 적용하는지 설명이 되어있습니다. 단순히 앙상블 뿐만 아니라 RF, Ada, GB 도 어떻게 regression을 하고 classification을 하는지 보여줍니다.

8. Dimensionality Reduction

차원 축소는 내가 아직 딱히 쓸 데가 없어 개념만 아는 정도입니다. 여기선 PCA를 주로 다루고 나머지 기법은 짧게 소개만 합니다.

9. Up and Running with TensorFlow

여기서부터 딥러닝을 시작합니다. 딥러닝이라기 보다는 텐서플로를 시작합니다. 9장은 텐서플로우를 설명하는 장입니다. 텐서플로를 사용한 linear regression부터 GD, tensorboard등 주로 텐서플로 사용법인데 전 몇몇은 아직도 어렵네요. 이 장은 코드를 따라해보며 텐서플로가 뭔지, 어떻게 사용하는지 간단하게 알고 넘어 가보았습니다.

10. Introduction to Artificital Neural Network

이 부분부터가 이 책의 꽃이라고 나는 생각합니다. 여기서는 DNN을 짜는 과정인데 초반에 나오는 High-Level API 보다는 Low-level에 집중합니다. 다음으로 텐서플로를 사용해 DNN코드는 짜는데 코드가 예술입니다. DNN 코드 짜는 것 자체가 예술성이 있다고 나는 생각하지만, 이 책보다 좋은 DNN코드는 지금까지 못봤습니다. DNN코드가 정말 깔끔하고 잘 짜여져 있어 코딩 자체는 공부하기에 매우 좋습니다.

11. Training Deep Neural Nets

10장에서 DNN의 초기 모델을 짠다면 여기는 모델을 튜닝하는 장입니다. 딥러닝에는 activation function만 해도 여러가지이고 optimizer, regularizer에도 종류가 많아 큰 바다에 빠지는 느낌인데 모델을 짜는데 있어 좋은 방향을 줍니다. 코드를 짤때 참고하기도로 매우 좋아요.

이 책의 강점은 코드라고 생각합니다. 제가 프로그래밍을 못해서 인지 코드를 보며 감탄하기도 하고요. 그리고 머신러닝을 처음 접하는 독자에겐 약간 어려울 수 있는 난이도라고 생각합니다. 시중에 있는 많은 책들이 초보자용인 경우가 많아 그 부분을 걱정했는데 그 정도는 아닙니다. 다음엔 CNN, RNN, Autoender 파트가 있습니다. 이 부분은 다른 곳에서 좀 더 개념을 잡은 후 코딩을 보려고 계획 중입니다.