Top

Building Machine Learning Systems with Python 한국어판 (개정판) [Scikit-learn 라이브러리로 구현하는 기계 학습 시스템]

  • 원서명Building Machine Learning Systems with Python - Second Edition (ISBN 9781784392772)
  • 지은이루이스 페드로 코엘류(Luis Pedro Coelho), 윌리 리커트(Willi Richert)
  • 옮긴이전철욱
  • ISBN : 9788960777613
  • 30,000원
  • 2015년 09월 18일 펴냄
  • 페이퍼백 | 348쪽 | 188*235mm
  • 시리즈 : acorn+PACKT, 데이터 과학

책 소개

최신 코드는 https://github.com/luispedro/BuildingMachineLearningSystemsWithPython에서 받을 수 있습니다.

요약

일반 CSV 데이터가 아닌 독자들이 실제로 해보고 싶었던 위키피디아의 주제 분류, 트위터의 감성 분류, 영화 추천, 사진의 범주 분류, MP3의 음악 장르 분류 등을 기계 학습을 활용하여 구현하며 각 기법을 평가한다. 또한, 빅 데이터 시대에 맞춰 대량의 데이터를 빠르게 처리하는 기계 학습 환경을 구축해본다. 파이썬과 파이썬 생태계의 핵심인 NumPy, SciPy, scikit-learn등 다양한 라이브러리를 활용하여 파이썬 언어를 좀 더 깊게 이해할 수 있다. 개정판은 초판과 달리, 간결하게 예제를 재정리했으며, 관련 설명도 보강했다. 초판에서 부족했던 라이브러리도 좀 더 풍부하게 소개한다.

이 책에서 다루는 내용

■ 텍스트, 이미지, 사운드에 적용하는 분류 시스템 개발
■ 과학 컴퓨팅과 기계 학습을 위한NumPy, SciPy, scikit-learn과학 파이썬 오픈 소스 라이브러리
■ 이미지 처리와 컴퓨터 비전을 위한 mahotas 라이브러리
■ 전체 위키피디아를 모델로 하는 주제 모델링
■ 클라우드에서 분석하기 위한 아마존 웹 서비스 활용
■ 기계 학습 문제 분석
■ 장바구니 분석을 사용한 추천
■ 과거 구매 기반의 제품 추천

이 책의 대상 독자

이 책은 실제 비지니스 문제에 대한 효과적인 해결책을 개발하기 위해 데이터에서 가치 있는 통찰을 얻고자 하는 개발자나 기계 학습을 사용하거나 학습하고자 하는 파이썬 개발자를 대상으로 한다.

이 책의 구성

1장, '기계 학습 파이썬으로 시작하기'에서는 매우 단순한 예제로 기계 학습의 기본적인 개념을 소개한다. 단순하지만 과적합(overfitting)의 위험을 제기하겠다.
2장, '실제 예제 분류하기'에서는 분류에 대해 배울 실제 데이터를 설명하고 꽃의 범주를 구별할 수 있도록 컴퓨터를 훈련한다.
3장, '군집화: 관련된 게시물 찾기'에서는 단어 주머니(bag of words) 접근법이 게시물에 대한 실제 이해 없이도 유사한 게시물 찾기에 적용할 때 얼마나 뛰어난지 설명한다.
4장, '주제 모델링'에서는 각 게시물을 하나의 군집에 배정하는 것을 넘어, 실제 문서가 여러 주제에 속하듯이 게시물이 다수의 주제에 어떻게 배정되는지 보여준다.
5장, '분류: 형편없는 답변 감지'에서는 질문에 대한 사용자 답변이 좋은지 나쁜지를 판단하기 위해 로지스틱 회귀(logistic regression) 기법을 설명한다. 이와 더불어, 기계 학습 모델을 분석하기 위해 편향(bias)과 변화량(variance) 균형을 어떻게 사용하는지도 배운다.
6장, '분류 II: 감성 분석'에서는 나이브 베이즈(Naive Bayes)가 어떻게 작동하는지 소개하고, 트윗이 긍정적인지 부정적인지를 분류하는 데 나이브 베이즈를 사용하겠다.
7장, '회귀'에서는 오늘날까지 데이터를 다루는 데 잘 사용하는 고전적인 주제인 회귀를 설명한다. 라소(Lasso)와 일래스틱넷츠(ElasticNets)와 같은 발전된 회귀 기법도 다룬다.
8장, '추천'에서는 소비자 제품 평점을 근거로 추천 시스템을 만든다. 평점 데이터(사용자가 항상 제공하진 않는다)없는 쇼핑 데이터로 추천을 어떻게 하는지도 살펴보겠다.
9장, '분류: 음악 장르 분류'에서는 무작위의 수많은 노래를 기계 학습기가 분류할 수 있는 방법을 알아본다. 우리 스스로 속성을 만들기보다는 누군가의 전문 지식을 믿는 편이 더 괜찮을 때도 있음을 보여준다.
10장, '컴퓨터 비전'에서는 데이터에서 속성을 추출하여 이미지를 다루는 특수한 분야에서 분류를 어떻게 적용하는지 설명한다. 이 기법을 이미지 모음에서 유사한 이미지를 찾도록 어떻게 적용하는지도 다룬다.
11장, '차원 수 줄이기'에서는 기계 학습 알고리즘에 잘 적용할 수 있도록 데이터의 크기를 줄이는 다양한 기법들을 알아본다.
12장, '조금 더 큰 빅데이터'에서는 데이터 멀티코어와 컴퓨팅 클러스터의 장점을 활용해 좀 더 큰 데이터를 다루는 기법들을 살펴본다. 클라우드 컴퓨팅도 소개한다(클라우드 제공자로서 아마존의 웹 서비스를 사용한다).
부록, '기계 학습에 대한 보충 자료'에는 기계 학습에 대한 훌륭한 자료 목록이 실려 있다.

저자/역자 소개

지은이의 말

이 책을 만난 건 좋은 인연이다. 무엇보다, 매년 수백만 권이 쏟아져 나오는 와중에 여러분은 이 책을 읽고 있다. 몇몇 기계 학습 알고리즘이 여러분을 이 책으로 이끄는 중요한 역할을 했을 수도 있다. 그리고 여러분이 방법(how)과 이유(why)를 좀 더 이해하고자 한다는 사실에 우리 저자들은 행복하다.

이 책은 대부분 방법에 대해 다룬다. 기계 학습 알고리즘을 최대로 활용하려면 데이터를 어떻게 다뤄야 할까? 문제에 즉시 적용할 수 있는 적합한 알고리즘을 어떻게 선택할 수 있을까?

가끔은 이유도 다룬다. 왜 정확하게 측정하는 일이 중요한가? 주어진 상황에서 왜 어떤 알고리즘은 다른 알고리즘보다 나은 성능을 내는가?

이 분야에서 전문가가 되려면 배워야 할 내용이 무척 많다. 여기서 다루는 ‘어떻게’와 ‘왜’는 그중 일부일 뿐이지만, 궁극에는 이 혼합이 여러분을 가능한 한 빨리 전문가로 만드는 밑거름이 되길 바란다.

지은이 소개 ★

루이스 페드로 코엘류(Luis Pedro Coelho)

생체 시스템을 이해하려, 컴퓨터를 사용하는 전산 생물 학자다. 특히, 미생물의 행위를 특징짓기 위해 미생물군집(microbial communities)에서 나온 DNA를 분석하고 있다. 그는 생체 표본 이미지를 분석하는 데 기계 학습 기술을 활용하는 분야인 바이오이미지 인포매틱스(Bioimage Informatics)에 관련된 일도 한다. 주 관심사는 대용량 이미지 데이터 처리다.

기계 학습 분야에서 세계적인 대학 중 하나인 카네기 멜론 대학교(Carnegie Mellon University)의 박사 학위자이며, 몇몇 과학 출판물의 저자이기도 하다. 리스본 기술 대학교(Technical University of Lisbon) 컴퓨터 학과에서 배운 것을 실제 코드로 적용하고자 1998년부터 오픈소스 소프트웨어를 개발하기 시작했다.

2004년부터 파이썬으로 개발하기 시작했으며, 몇몇 오픈소스 라이브러리에 기여했다. 기계 학습 코드의 기여자뿐만 아니라 인기 있는 파이썬 컴퓨터 비전 패키지와 mahotas의 리더 개발자다. 현재 룩셈부르크와 하이델베르크를 오가며 생활하고 있다.

윌리 리커트(Willi Richert)

다양한 로봇이 모방 학습을 하도록 강화 학습(reinforcement learning), 은닉 마코프 모델(hidden Markov models), 베이즈 네트워크(Bayesian network)를 활용하는 기계 학습과 로보틱스 박사 학위자이다. 현재 마이크로소프트 빙(Bing)의 코어 렐러번스 팀(Core Relevance Team)에서 일하고 있다. 액티브 학습과 통계적 기계 번역 같은 다양한 기계 학습에 관여하고 있다.

옮긴이의 말

네 잎 클로버 어떻게 찾아요?
또래 아이들이 그러하듯 우리 집 아이의 소일거리 중 하나는 네 잎 클로버 찾기다. 한 수분 잔디에서 뒤지다 보면, 제풀에 지쳐 집으로 뛰어 들어오며 "행운을 드립니다"라며 세 잎 중 한 잎을 찢어 만든 거짓 네 잎 클로버를 내게 내민다. '네 잎 클로버를 어떻게 찾을까', '네 잎 클로버의 확률 분포는 무엇일까', '기계 학습으로 네 잎 클로버를 찾을 수 있을까?' 잠시 생각에 잠겨본다. 수학적으로, 네 잎 클로버의 확률 분포는 푸아송 분포를 따른다면, 1시간에 찾을 수 있는 확률을 구할 수 있다. 네 잎 클로버의 잎 너비, 잎 길이, 줄기 길이 등 다양한 속성으로 기계 학습에 적용도 할 수 있을 듯하다. 이 책의 소개된 이미지 처리와 기계 학습 기법을 활용하여 마당 잔디를 휴대전화로 찍어 아이를 대신해 네 잎 클로버를 한번 찾아볼까도 생각해본다. 아니면, 네 잎 클로버의 유전자 분석에 기계 학습을 적용해 볼까 하는 데까지 생각이 미친다.
데이터 저장 장치가 지속적으로 저렴해지고, 다양한 장치에서 데이터를 생성해내고 있는 현재, 기계 학습을 적용할 분야는 점점 더 많아지고 있다. 관심 분야에서 데이터를 찾고 기계 학습을 적용해 보면 우리 생활이 좀 더 편해진다. 구글, 아마존, 넷플릭스, 수많은 회사가 자신의 서비스에 기계 학습을 적용하는 이유가 여기에 있다. 친구를 추천해주고, 사진에서 친구 얼굴을 찾아 이름을 붙여주고, 스팸 메일을 완벽히 제거해주는 서비스가 대표적인 예다. 표피에는 데이터가 감싸여 있고 그 속에는 기계 학습이 자리잡고 있는 서비스가 최신 흐름이라고 할 수 있다.

행운의 네 잎 클로버
네 잎 클로버는 행운을 상징한다. 이 책 첫머리의 "이 책을 만난 건 좋은 인연이다"라는 말처럼 파이썬 사용자로서 기계 학습을 배우려는 사람에게 이 책은 네 잎 클로버다. 파이썬의 범용성과 생태계를 활용하여 데이터를 마음대로 다룰 수 있으며 계산량이 많은 수학 계산까지 빠르게 계산할 수 있다. 파이썬 생태계에서 제공하는 다양한 패키지로 단번에 다양한 기술도 적용해볼 수 있다. 특히, 기계 학습 전반적으로 지원하는 scikit-learn은 기계 학습 사용자에게는 스타워즈에서의 광선검과도 같다. 통일된 학습기 인터페이스, 각 작업을 연결할 수 있는 태스크, 전처리와 평가를 지원하는 등 데이터를 가공해서 다양한 학습기에 여러 매개변수를 한 번에 적용해 평가를 구할 수 있는 탁월한 라이브러리다. 더불어, 이번 개정판에서는 초판에 비해 간결하게 예제를 재정리했으며, 설명도 보강했다. 부족했던 라이브러리를 소개하는 것도 잊지 않았다.
기계 학습은 여타의 기술보다 조금 더 어렵다. 각 기법을 깊이 이해하려면 확률이론이나 선형대수와 같은 수학적 지식이 필요하며, 프로그래밍 언어로 직접 학습기를 구현하거나 구현된 라이브러리에 적용해야 한다. 원시 데이터를 전처리해야 할 때도 있다. 이 책은 이러한 모든 부분을 자세히 다루지 않으며, 사실 이 모든 부분을 한 권에 책에서 다루는 것은 현실적으로 쉽지 않다. 대신, 이 책에서 사용하는 실제 데이터와 각 기법을 하나씩 천천히 살펴보는 전략도 대단히 괜찮은 방법이다. 마지막으로, 기계 학습을 배우고자 하는 분들에게 진심으로 이 책이 행운의 네 잎 클로버가 되길 바란다.

옮긴이 소개

전철욱

웹의 개방성, 파이썬의 기민성, 기계 학습의 예측성을 좋아한다. 공익을 위한 재능을 만들고자 노력 중이다. 호주에서 여우 세 마리에게 잡혀 살고 있다. 에이콘 출판사의 『Building Machine Learning Systems with Python 한국어판』(2014)과 『R을 활용한 기계 학습』(2014)을 번역했다.

목차

목차
  • 1장 기계 학습 파이썬으로 시작하기
  • 기계 학습과 파이썬: 꿈의 조합
  • 이 책이 알려주는 내용과 알려주지 않는 내용
  • 정체됐을 때 해야 할 작업
  • 시작
  • __NumPy, SciPy, matplotlib 소개
  • __파이썬 설치
  • __NumPy로 효과적으로, SciPy로 지능적으로 적용하기 쉬운 데이터 만들기
  • _NumPy 배우기_
  • ___인덱싱_
  • ___존재하지 않는 값 처리_
  • ___실행 시간 비교_
  • _SciPy 배우기_
  • 첫 번째 기계 학습 애플리케이션__
  • _데이터 읽기_
  • _데이터 정리와 전처리_
  • __적절한 모델과 학습 알고리즘 선택
  • ____모델을 만들기에 앞서
  • ____단순한 직선으로 시작하기
  • ____좀 더 복잡한 모델
  • ____일보후퇴, 이보전진: 데이터 다시 보기
  • ____훈련과 테스트
  • 최초 질문에 대답하기
  • 정리

  • 2장 실제 예제 분류하기
  • 아이리스 데이터셋
  • __첫 번째 단계, 시각화
  • __첫 번째 분류 모델 만들기
  • __평가: 홀드아웃 데이터와 교차 검증
  • 좀 더 복잡한 분류기 만들기
  • 좀 더 복잡한 데이터셋과 분류기
  • __씨앗 데이터셋의 학습
  • __속성과 속성 엔지니어링
  • __최근접 이웃 분류
  • scikit-learn으로 분류
  • __결정선 살펴보기
  • 이진 분류와 다중 범주 분류
  • 정리

  • 3장 군집화: 관련된 게시물 찾기
  • 게시물 관련도 측정
  • __하지 말아야 하는 방법
  • __어떻게 해야 하는가
  • 전처리: 공통 단어의 유사한 개수로서 측정된 유사도
  • __원시 텍스트를 단어 주머니로 변환
  • ____단어 세기
  • ____단어 카운트 벡터 정규화하기
  • ____덜 중요한 단어의 삭제
  • ____어근 추출
  • ____강화된 불용어
  • __우리의 성취와 목표
  • 군집화
  • __K평균
  • __우리의 발상을 평가하기 위한 테스트 데이터 얻기
  • __게시물 군집화
  • 초기 도전과제 해결
  • __노이즈의 또 다른 시각
  • 매개변수 변경
  • 정리

  • 4장 주제 모델링
  • 잠재 디리클레 할당
  • __주제 모델 만들기
  • 주제로 문서 비교
  • __위키피디아 전체의 모델링
  • 주제의 개수 고르기
  • 정리

  • 5장 분류: 형편없는 답변 감지
  • 큰 그림 그리기
  • 세련된 답변 구별법 학습
  • __인스턴스 개선
  • __분류기 개선
  • 데이터 가져오기
  • __데이터를 의미 있는 뭉치로 잘라내기
  • __속성의 사전 선택과 처리
  • __좋은 답변의 정의
  • 첫 번째 분류기 만들기
  • __kNN으로 시작하기
  • __속성 개선
  • __분류기 훈련
  • __분류기의 성능 측정
  • __더 많은 속성 디자인하기
  • 개선법 결정
  • __편향과 변화량의 균형
  • __고편향 고치기
  • __고변화량 고치기
  • __고편향 혹은 저편향
  • 로지스틱 회귀
  • __간단한 예제와 약간의 수학
  • __로지스틱 회귀를 게시물 분류에 적용
  • 정확도 좀 더 보기: 정밀도와 재현율
  • 분류기 군살 빼기
  • 배포
  • 정리

  • 6장 분류 II: 감성 분석
  • 큰 그림 그리기
  • 트위터 데이터 가져오기
  • 나이브 베이즈 분류기 소개
  • __베이즈 정리
  • __순박함
  • __나이브 베이즈를 사용한 분류
  • __못 보던 단어에 대한 해명과 다른 특이점
  • __산술 언더플로 설명
  • 첫 번째 분류기 만들고 조절하기
  • __쉬운 문제 먼저 해결하기
  • __모든 범주 사용하기
  • __분류기의 매개변수 조절
  • 트윗 정리
  • 단어 종류 고려
  • __단어 종류 판단
  • __SentiWordNet을 이용한 성공적인 편법
  • __첫 번째 에스터메이터
  • __모두 통합하기
  • 정리

  • 7장 회귀
  • 회귀를 이용한 주택 가격 예상
  • __다차원 회귀
  • __회귀를 위한 교차 검증
  • 벌점화 또는 정규화 회귀
  • L1벌점과 L2 벌점
  • __scikit-learn에서 라소나 일래스틱넷 사용하기
  • __라소 패스 시각화
  • __P가 N보다 큰 시나리오
  • __텍스트 기반의 예제
  • __영리하게 하이퍼 매개변수 설정
  • 정리

  • 8장 추천
  • 예측과 추천의 평점
  • __훈련과 테스트 나누기
  • __훈련 데이터 정규화
  • __추천에 대한 이웃 접근법
  • __추천에 대한 회귀 접근법
  • __여러 기법 결합
  • 장바구니 분석
  • __유용한 예측 얻기
  • __슈퍼마켓 쇼핑 장바구니 분석
  • __연관 룰 마이닝
  • __좀 더 발전된 장바구니 분석
  • 정리

  • 9장 분류: 음악 장르 분류
  • 큰 그림 그리기
  • 음악 데이터 가져오기
  • __WAV 형태로 변환
  • 음악 살펴보기
  • __음악을 사인 곡선 요소로 분해하기
  • FFT를 사용해 첫 번째 분류기 만들기
  • __실험 기민성 증대
  • __분류기 훈련
  • __다중 범주 문제의 정확도 측정을 위한 혼돈 매트릭스
  • __수용자 반응 특성을 이용한 분류기 성능 측정 대안
  • 멜 주파수 켑스트럴 계수와 분류 성능 향상
  • 정리

  • 10장 컴퓨터 비전
  • 이미지 처리 소개
  • __이미지 로딩과 출력
  • __경계 짓기
  • __가우시안 블러링
  • __중앙에 초점 맞추기
  • __기본 이미지 분류
  • __이미지로부터 속성 계산
  • __속성 작성
  • __유사한 이미지를 찾는 속성 사용하기
  • __좀 더 어려운 데이터셋의 분류
  • 지역 속성 표현
  • 정리

  • 11장 차원 수 줄이기
  • 큰 그림 그리기
  • __속성 선택
  • ____상관 관계
  • ____상호 정보
  • __래퍼를 사용해 속성에 대한 모델 묻기
  • __그 밖의 속성 선택 기법
  • 속성 추출
  • __주요 구성요소 분석
  • ____PCA 훑어보기
  • ____PCA 적용하기
  • __PCA의 한계와 LDA의 도움
  • MDS
  • 정리

  • 12장 조금 더 큰 빅데이터
  • 빅데이터 배우기
  • __파이프라인을 태스크로 나누기 위한 jug 사용
  • jug의 태스크 소개
  • __어떻게 작동하는지 살펴보기
  • __데이터 분석을 위한 jug
  • AWS 사용
  • __첫 번째 머신 만들기
  • ____아마존 리눅스에 파이썬 패키지 설치
  • ____클라우드 머신에서 jug 실행
  • __startcluster로 클러스터 생성 자동화
  • 정리

  • 부록 기계 학습에 대한 보충 자료

도서 오류 신고

도서 오류 신고

에이콘출판사에 관심을 가져 주셔서 고맙습니다. 도서의 오탈자 정보를 알려주시면 다음 개정판 인쇄 시 반영하겠습니다.

오탈자 정보는 다음과 같이 입력해 주시면 됩니다.

(예시) p.100 아래에서 3행 : '몇일'동안 -> 며칠동안

정오표

정오표

[p57: 12행]
있는자?
->
있는가?

[p.58: 아래서 3행]
표기되어 있다. 있다.
->
표기되어 있다.

[p.58: 아래서 6행]
나타내개 위해
->
나타내개 위해

[p63: 13행]
역활
->
역할

[p.69: 마지막 행]
받아드리는
->
받아들이는

[p.88: 15 행]
>>> bestdist = sys.maxint
->
>>> best
dist = sys.maxsize

[p.88: 17 행]
for i, post in enumerate(num_samples):
->
for i, post in enumerate(posts):

[p.91: 아래서 2행]
http://nltk.org/install.html
->
http://www.nltk.org/install.html

[p.93: 9행]
넣기 원하지 않는다.
->
넣길 원하지 않는다.

[p.112: 아래에서 9행]
일종의 이야기(fable)를 모델을 가지기 때문에
->
일종의 이야기(fable)를 가지기 때문에

[p.113: 7행]
주제 가중치을 기반인
->
주제 가중치에 기반한

[p117: 4행]
활당
->
할당

[p156: 첫 행]
중접
->
중첩