Books

앵버박사 2018. 1. 13. 22:58



서론

  책의 이름은 '집단지성 프로그래밍' 이지만 실체는 머신러닝이다. 이 책은 수많은 사람들이 인터넷을 이용하면서 발생되는 데이터를 수집/분석하여 스마트한 프로그램을 제작하는 주제를 다루기 때문에 집단지성(Collective intelligence)이라는 단어를 메인으로 내세운 것 같다.

  최근 한참 머신러닝/딥러닝과 관련된 책이 나오고 있지만 그와 반대로 이 책은 상당히 오래 전에 출간된 책이다. 책의 예제는 파이썬2로 작성됐는데, 파이썬3로 포팅하고 실행해보는데 큰 어려움은 없었다. 책에서 공부한 내용에 대한 응용을 다룰 때, 외부 웹 API를 사용하는 경우가 있는데 오래되서 존재하지 않거나 사용방법이 다른 경우가 있다. 이런 부분은 활용이기 때문에 굳이 실습하지 않고 흐름만 이해하면 충분하다고 생각한다. 또한 책의 소스코드는 별도로 제공되지 않으나 독자들이 github 레파지토리를 제공하고 있으니 참고하면 된다.


난이도

  나는 딥러닝에 대한 입문 이후에 보았기 때문에 더 효과적으로 학습이 가능했던 것 같다. 머신러닝에대해 처음 접하는 사람이라면 입문으로는적합하지 않아 보인다. 나에게는 기존에 공부한 신경망 지식과 더불어 머신러닝이라는 학문에 대한 전반적인 이해를 높여주었다.

  설명과 구현코드가 함께 나오는 방식으로 진행되는데, 설명은 번역의 문제인지 모르겠으나 난해하여 이해하기가 쉽지 않았다. 부족한 이해는 코드를 통해 보충했다.

  뒤의 몇몇 복잡한 알고리즘은 식을 유도하지 않고 간단하게만 설명한 부분이 있는데, 더 깊게 이해하고 싶다면 직접 찾아서 공부해야 한다.


구성

  추천시스템 영화평가 데이터를 가지고 특정 사용자에게 영화를 추천해주는 예제를 만들어본다. 특정 사용자와 유사한 그룹을 찾아 그 그룹이 높게 평가한 영화를 추천해주는데, 유사 그룹을 찾는데 유클리디안 거리점수와 피어슨 상관점수를 사용한다.

  군집 비감독 학습으로 유사한 항목끼리 알아서 그룹지어주는 알고리즘을 배운다. 예제로는 블로그 데이터를 가져다가 유사 블로거들 끼리 묶어준다. 군집 알고리즘으로 계층적 군집화와 K평균 군집화를 사용한다.

  검색과 랭킹 간단한 검색엔진을 만든다. 클롤러를 만들어 데이터를 수집하고, 수집한 데이터를 색인(인덱싱)하고, 사용자가 검색하면 색인한 데이터의 랭크를 정하고 노출시킨다. 페이지의 내용을 기반으로 랭킹을하는 기법과 구글의 페이지랭크 기법을 배운다. 사용자가 특정 검색어에 어떤 페이지를 클릭했는지 데이터를 쌓고 그 데이터를 기반으로 랭킹을하도록 학습하는데 신경망을 사용한다.

  최적화 굉장히 많은 해답 중 최적의 해답을 찾는 최적화 알고리즘을 배우며, 최적의 비행편을 찾는 예제를 다룬다. 최적화를 위해서는 비용함수를 정의해야 하며, 무작위검색/언덕등반/시뮬레이티드어닐링/유전자알고리즘 등의 최적화 기법을 사용하여 비용함수를 최소화시키는 최적해답을 찾아낸다.

  문서 필터링 스팸을 필터링하는 분류기를 만든다. 조건부 확률을 뒤집는 베이즈 정리를 활용한 나이브 베이지안 분류기와 피셔 분류기를 만들어본다.

  의사결정트리 해석이 쉬운 의사결정트리라는 분류기에 대해 배운다. 웹 서비스의 체험판이 끝난 후 프리미엄 가입자가 될 것인지를 예측하는 예제를 다룬다. 특정 필드를 기준으로 학습 데이터를 두갈래로 나누었을 때, 나누어진 데이터에 결과값(일반/프리미엄)이 섞여있으면 적절한 기준이 아닌 것이다. 섞여있는 혼합정도를 판단하는데 지니불순도와 엔트로피를 사용한다. 두갈래로 나누기 전과 후의 엔트로피를 비교하여 의사결정트리의 가지를 만들어나간다. 이렇게 만든 의사결정트리에 새로운 데이터를 넣어 분류한다.

  가격 모델링 분류가 아닌 숫자를 예측하는 알고리즘을 배우는데 그 중 관심있는 항목과 유사한 항목들을 고르고, 고른 항목들의 평균으로 관심있는 항목의 수치를 예측하는 kNN 알고리즘을 배운다. 항목의 유사도를 측정하는 방법으로는 유클리디안 거리점수를 사용한다. 항목의 거리에 따라 역함수/빼기함수/가우스함수 등의 가중치 함수를 적용한다. 예제로는 와인가격 예측을 해본다.

  커널기법과 SVM 비선형 데이터를 분류할 수 있는 커널기법과 SVM에 대해 배운다. 커플을 매칭시켰을 때 좋은매칭인지 나쁜매칭인지 분류하는 예제를 다룬다.

  독립 특성 발견 비감독 학습으로 데이터의 중요한 은닉 특성을 찾는 NMF(비음수 행렬 인수분해) 알고리즘을 배운다. 뉴스기사들에서 핵심주제를 찾아내는 예제를 다룬다.

  진화 지성 문제에 적용할 알고리즘을 선정하는 대신 최적의 프로그램을 구축하는, 알고리즘을 만드는 알고리즘인 유전자 프로그래밍을 배운다. 예제로 컴퓨터가 그리드 전쟁이라는 게임을 하면서 점점 실력이 진화해가는 프로그램을 만들어본다.


결론

  검색엔진을 만들기 위해 구입한 책이지만 머신러닝 알고리즘과 머신러닝에 대한 전반적인 이해를 하는데도 많은 도움이 됐다.

  우선 에버노트와 같은 노트 프로그램을 간단하게 구현해보고, 이 책에서 공부한 분류기(Classifier)를 적용하여 작성한 글의 카테고리를 자동으로 분류해주는 응용부터 적용해보려 한다.


별점 ★★☆