[리뷰] 파이썬 라이브러리를 활용한 머신러닝
개요
본 리뷰는
한빛미디어
출판사"파이썬 라이브러리를 활용한 머신러닝(번역개정판)"
을 읽고 얻은 지식을 정리한 글입니다.
- 목차
머신러닝을 위한 파이썬의 도구들(Scikit-learn 등)
바야흐로 딥러닝의 시대다. 알파고
를 언급하는 건 이젠 너무나 식상한 일이 되어버렸다. 대신 아카이브
에는 일주일에도 수십편의 논문이 쏟아져 나오고 있고, Google I/O 2018에서는 일종의 튜링테스트 기법으로 사람을 속이는 인공지능 상담원이 등장하였다. 구글에서는 멀티미디어 검색 기능은 물론 심지어 세상에 존재하지 않는 강아지의 사진을 만들어 내기도 한다. 그러기에 필자같은 프로그래머를 비롯하여 통계, 수학 분야는 물론이고 경영, 의학 등 다양한 도메인 분야의 전문가들로 부터 깊은 관심을 받고 있으며,이들은 자연스레 최신기술을 익히고자 다양한 방법으로 데이터 사이언스에 접근하고 있다.
딥러닝, 머신러닝 등 Data Science 영역에서 가장 많이 사용하는 프로그래밍 언어 2가지를 꼽으라면 단연 Python과 R일 것이다. 프로그래머라면 보다 범용적으로 활용도가 높은 Python을 선호하는 편이고, 통계분야 전문가를 비롯한 비 프로그래머 계열은 R을 선호하는 편이다. 물론 필자처럼 양쪽에 깊은 관심을 가지고 활용하는 사람도 있다.
"그렇다면 왜 Python일까? 그리고 머신러닝을 위해선 어떤 도구들이 필요한 것일까?"
이를 위해 먼저 Python이 제공하는 머신러닝 도구들을 살펴 볼 필요가 있다.
- Scikit-learn
- 머신러닝에서 가장 많이 활용되는 분류, 회귀, 랭킹, 예측 등 다양한 알고리즘을 내장하고 있는 Python 라이브러리로 머신러닝 알고리즘을 별도로 구현할 필요가 없게 해준다.
- 오픈소스로 사용 및 배포에 거의 제약이 없다. 더불어 소스코드를 통해 동작방식을 익히기에 적합하기에 자칫 Keras, Tensorflow 등으로 구현에만 너무 치중되어 모델링과 알고리즘에 갈증을 느낀다면 돌아와 머신러닝의 내면을 바라보기에 매우 유용한 라이브러리이다.
- Pandas
- 데이터 처리와 분석을 위한 라이브러리로 R의 data.frame을 본떠서 설계
- SQL과 같은 질의 기능을 수행할 수 있으며, 마치 RDBMS의 테이블과 같이 각 열의 데이터 타입이 달라도 무관하다.
- Scipy
- 고성능 과학 계산용 라이브러리로 선형대수, 함수최적화, 신호처리, 특수 함수 및 통계 분포 기능이 구현되어있다.
- scipy.parse(희소행렬)을 활용하여 연산속도를 높이는 데 큰 효과를 볼 수 있다.
- Numpy
- 기본 수학관련 알고리즘은 물론 선형대수, 푸리에변환, 난수생성기 등을 지원한다.
- 다차원 배열 ndarray을 기본 데이터 타입으로 간주하며 원소로 동일한 데이터 타입만을 가질 수 있다.
- 기타
- 시각화를 위한 Matplotlib, 학습과정을 용이하게 해주는 대화식 실행환경인 주피터 노트북 Ipython, 결정 트리 시각화에 필요한 graphviz 등 다양한 라이브러리로 머신러닝을 지원하고 있다.
이 책은 위와 같은 도구를 소개로 시작한다. 출발하기에 앞서 기본적인 체계를 잡아주기에 가독성과 이해를 도와준다. 더불어 저자
가 위의 도구 중 가장먼저 언급한 Scikit-learn의 핵심 개발자
안드레아스 뮐러, 세라 가이도이기에 그 어떤 책 보다도 본서가 Scikit-learn의 철학 및 내부 구조를 학습하는데 적격이라고 생각하며, 보다 수준높은 데이터 사이언티스트가 되기 위해선 머신러닝 알고리즘의 내부를 내것으로 만들어 다양한 데이터로부터 모델링의 능력을 키우는 것이 가장 중요하다고 생각하기에 이 책을 강력히 추천한다.
이 책이 중요한 이유 : “통계학자 vs 컴퓨터공학자” 누가 더 적임자일까?
머신러닝 분야에 종사하고 싶다면 다양한 길이 있을 것이다. 하지만 진정한 데이터 사이언티스트가 되고 싶다면 개인적으로는 위에서 간략히 언급한 바와 같이 모델링
이 핵심이라고 생각한다. 데이터가 어떤것이 주어지더라도 분석을 통해 인사이트를 뽑아내는 인재라면 EDA를 비롯 전처리 경험이 풍부해야 하며, 이를 기반으로 유의미한 모델링을 설계하는데 필요한 능력이 충분할 것이기 때문이다.
IT의 태생이 그러했듯 딥러닝이 등장하면서 과학으로 불리는 Science의 영역이 Engineering의 영역으로 상당히 많이 옮겨진 듯 하다. 대신 다루는 데이터 영역이 이미지, 동영상, 음성, 텍스트라는 소재에 국한되는 경향이 있으며, 데이터 대신 GAN 같은 의미있는 기법이 등장하긴 하였지만 그래도 딥러닝이 Tabular 성격의 데이터에 유독 취약한 것은 현재까지는 부인할 수 없다고 생각한다.
이에 프로그래머라면 더더욱 머신러닝 더 나아가 통계, 수학, 수리통계학, 정량분석의 분야를 소홀히 해선 안된다는 것을 깨닫곤 한다. 다음의 질문을 생각해보자.
"로또번호를 머신러닝으로 예측할 수 있는가?
과거의 당첨번호로 학습을 시켜 당첨번호를 예측한다? 원리는 몰라도 직관적으로 말도 안되는 일이라고 생각하는 사람이 많을 것이다. 한편으로는 딥러닝이 얼마나 위대한데.. 혹시 딥러닝이라면 가능하지 않을까? 이 질문이 유의미한지 알고 싶다면 그저 Keras, Tensorflow를 잘 다룰 줄 안다고 해결될 문제는 아닐 것이다. 에포크 횟수, 파리미터 튜닝을 열심히 한다고 답이 구해질까? 데이터는 과거 당첨번호를 이용해야 하나? 아니면 어떤 사건이나 영향을 주는 데이터를 수집하면 될까? 말도 안되는 질문들이지만 초보자라면 한번 깊게 생각할 필요가 있다. 우리가 허상에 빠지기 쉬울 때 바른 방향을 제시해주는 것이 통계학과 같은 사이언스 지식이라 생각을 하며 아주 쉬운 확률의 독립사건 개념부터 좀 더 나아가 자기상관성
에 이르기까지 기본 개념이 탄탄하면 애초에 말도 안되는 주제로 시간과 노동력을 낭비하지는 않을것이다.
프로그래머라면 Python이라는 범용프로그램 언어에 취해 R과 같은 데이터 분석 전용언어를 비하하거나 Python의 코딩 능력이 데이터 분석 능력을 좌우한다는 일종의 선입견(?)도 버릴 필요가 있다고 생각한다. 필자 또한 비슷한 과정을 거쳤는데 R은 Python과는 달리 행렬 표현이 2차원에 국한되어 종속적이지 않으며, 대부분의 함수에서 포뮬러
를 지원하기에 불필요한 코딩을 방지하게 하여 보다 분석에 집중하게 해주는 엄청난 장점이 있다. 물론 Python처럼 범용언어가 아니기에 타 기능과의 매끄러운 연결은 어렵다.
각설하고 Python으로 데이터 분석을 원하는 사람이 모델링의 능력을 키우기 위해선 먼저 Scikit-learn의 내부 구조를 들여다 보는 것이 좋은 수순이라고 생각하며, 이책은 그런 관점에서 매우 훌륭한 스승이 될 것이라고 본다. 더불어 mglearn 라이브러리로 핵심에 벗어나는 코딩량을 줄여 알고리즘의 핵심을 바라보게 해주는 장점을 가지고 있으며, 한가지 더, 시각화된 이미지가 아래 사진과 같이 컬러로 되어 가독성이 좋고 집중도 잘된다. 그리고 역자가 참 맛깔나게 번역을 잘했다.
구현 소스는 Github 리파지토리에 공개되어 있다.
누가 읽어야 하는가?
개발자
개발자의 최대 장점인 코딩 구현능력과 구조화된 사고방식을 활용하여 사이언스 원리 중심의 서적보다 머신러닝의 핵심에 더 쉽게 다가갈 수 있다.데이터전문가, 연구자, 과학자
통계, 수학, 모델링 지식에 해박하나 좀 더 성능좋은 도구를 자유자재로 다뤄 연구 수행에 있어 효율성을 높이고 싶은 분들도 이 책이 많은 도움이 될 것이다.그 외 ‘데이터사이언티스트 = 프로그래머’라는 생각을 가지신 분
이유는 위 절에서 자세히 설명하여 생략한다.
책의 구성 및 요약
이 책은 크게 세 부분으로 구성된다.
- 1. 머신러닝의 핵심 알고리즘(지도, 비지도 학습)(1 ~ 3장)
- 사실상 책의 핵심내용으로 친절한 개념 설명과 컬러 시각화를 통해 직관적인 이해를 돕는다.
- 분류, 회귀에 주요 고려사항인 일반화, 결정함수, 예측확률, 불확실성, 차원축소 등 통계 핵심기법이 담겨있다.
- 거의 모든 핵심 알고리즘을 다룬다.(KNN, 선형모델, 나이브베이즈, 결정트리, SVM, 신경망, K-means, 그외 군집알고리즘 등
- 2. 특성공학, 모델평가, 파이프라인 등 모델링 핵심지식(4 ~ 6장)
- 데이터의 성격을 분석하여 다양하고 유용한 전처리 기법을 배울 수 있다.
- 교차검증을 통한 성능 향상은 물론 다양한 평가지표에 대하여 학습한다.
- 전처리에 이어 파이프라인을 활용하는 방법을 익힐 수 있다.
- 3. 텍스트마이닝 및 기타(7 ~ 8장)
- BOW변환, 불용어 등 전처리, tf-idf 생성, 고급 토큰화, stemming 등 텍스트마이닝 필수 지식을 배운다.
- 그 외 실무에 유용한 지식 및 앞으로 나아가야 할 방향을 제시한다.
요약하며…
이 책은 프로그래머로서 자칫 데이터 분석을 코딩만으로 배울뻔한 우(愚)에서 벗어나게 해주었기에 높은 점수를 주고 싶으며, 이 책을 읽으며 남이 만든것을 생각없이 따라가 만드는 데 급급했던 습관에서 모델링의 본질에 대해 깊이 생각하며 창조적인 시각의 중요성을 생각해보는 계기가 되었다. 보통 이럴땐 깊은 생각에 잠겨 책을 읽는 속도가 느려지게 마련인데 신기하게도 가독성이 너무 좋아 생각보다 읽는 시간이 오래 걸리지는 않았다. 데이터 사이언티스트의 영역에 발을 담그고 싶다는 꿈을 가지신 분이라면 누구나 꼭 한번 정독하시길 권한다. 끝으로 이 책을 읽을 기회를 주신 한빛미디어에 깊은 감사를 드린다.
<한빛미디어 출판사>
개발자라면 믿고보는 “한빛미디어 출판사”라는 수식어가 따라다닐 만큼 IT분야는 물론 다른 분야에서도 양질의 도서를 끊임없이 출판하는 회사입니다. 개발자로서 “나는 프로그래머다”라는 유익한 팟캐스트를 즐겨 듣곤 했는데 한빛미디어에서 후원을 하였기에 수년간 방송이 이어져올 수 있었다 생각하며, 그외에도 리뷰어 활동, 학습지원 등 다양한 분야에서 사회에 공헌하는 개발자와 공생하는 업체입니다. IT 분야에 관심이 많은 분이라면 한빛미디어의 책으로 시작하시면 후회없는 출발을 하실 수 있습니다.(저 역시 최근에 출간된 ‘데이터를 부탁해’까지 100권은 넘게 산 것 같네요…^^;)