머신 러닝, 자바와 다양한 도구로 실습하면서 이해한다!
자바와 다양한 도구로 실습해보면서 머신 러닝의 개념과 도구 사용법을 배운다. 머신 러닝의 정의, 머신 러닝을 계획하는 방법부터 시작하여 의사결정트리, 베이지안 네트워크, 인공 신경망, 연관 규칙 학습, 서포트 벡터 머신, 클러스터링이 무엇이고, 어디에 활용되는지 배운다. 각 알고리즘에 어떤 도구를 사용해야 하는지 자바를 포함하여 머신 러닝에서 사용되는 다양한 도구(머하웃, 스프링 XD, 하둡, 스쿱, 피그, 맵리듀스, 스칼라, 스파크, R, Rjava)를 설치하고 사용해본다. 머신 러닝 알고리즘과 도구 전반을 책 한 권으로 살펴보면서 각 기법과 도구의 특징을 배울 수 있다.
저자 소개
저자 제이슨 벨은 25년 이상 소프트웨어 개발을 해왔으며 2002년부터 POS(point-of-sale)와 고객 데이터를 다루었다. 영국에서 Datasentiment라는 회사를 설립하여 전 세계 많은 회사의 데이터 수집, 처리, 이해를 돕?고 있다.
목 차
목차
1장 머신 러닝이란 무엇인가?
__1.1 머신 러닝의 역사
____앨런 튜링
____아서 사무엘
____톰 미첼
____요약
__1.2 머신 러닝 알고리즘의 종류
____지도 학습
____비지도 학습
__1.3 인간의 개입
__1.4 머신 러닝의 활용
____소프트웨어
____주식 매매
____로보틱스
____의학과 헬스 케어
____광고
____소매업과 전자 상거래
____게임 분석
____사물인터넷
__1.5 머신 러닝을 위한 프로그래밍 언어
____파이썬
____R
____매트랩
____스칼라
____클로저
____루비
__1.6 이 책에서 사용한 소프트웨어
____자바 버전 확인하기
____웨카 툴킷
____머하웃
____스프링 XD
____하둡
____통합개발환경(IDE) 사용하기
__1.7 데이터 저장소
____UC 어바인 머신 러닝 저장소
____인포침스
____캐글
__1.8 요약
2장 머신 러닝 계획하기
__2.1 머신 러닝 순환 주기
__2.2 모든 것은 질문으로 시작된다
__2.3 데이터가 없어요!
____지역 사회에서 시작하기
____경진대회
__2.4 하나로 모두 해결한다?
__2.5 프로세스 정의하기
____계획
____개발
____테스팅
____보고
____개선
____프로덕션
__2.6 데이터 팀 구성하기
____수학과 통계
____프로그래밍
____그래픽 디자인
____전문 지식
__2.7 데이터 처리
____내 컴퓨터 사용하기
____컴퓨터 클러스터
____클라우드 기반 서비스
__2.8 데이터 스토리지
____물리 디스크
____클라우드 기반 스토리지
__2.9 사생활 데이터 보안
____문화 규범
____세대적인 기대
____사용자 데이터의 익명성
____‘오싹한 선’을 넘지 마라
__2.10 데이터 품질과 정리
____입력 여부 확인
____타입 확인
____길이 확인
____범위 확인
____포맷 확인
____브리트니 딜레마
____국가 이름에는 어떤 것들이 있나?
____날짜와 시간
____데이터 정리에 관한 마지막 생각
__2.11 입력 데이터에 대해 생각해보기
____원시 텍스트
____CSV
____JSON
____YAML
____XML
____스프레드시트
____데이터베이스
__2.12 결과 데이터에 대해 생각해보기
__2.13 실험을 두려워하지 마라
__2.14 요약
3장 의사결정트리로 작업하기
__3.1 의사결정트리의 기본
____의사결정트리의 사용
____의사결정트리의 장점
____의사결정트리의 한계
____여러 가지 알고리즘
____의사결정트리는 어떻게 작동하는가?
__3.2 웨카의 의사결정트리
____필요 사항
____훈련용 데이터
____웨카를 사용하여 의사결정트리 만들기
____분류에서 자바 코드 만들기
____분류기 코드 테스트하기
____미래의 반복적인 작업 생각해보기
__3.3 요약
4장 베이지안 네트워크
__4.1 조종사부터 클리피까지
__4.2 약간의 그래프 이론
__4.3 약간의 확률 이론
____동전 던지기
____조건부 확률
____복권 당첨
__4.4 베이즈 이론
__4.5 베이지안 네트워크는 어떻게 작동하는가?
____확률 부여하기
____결과 계산하기
__4.6 노드의 개수
__4.7 전문가의 도움
__4.8 베이지안 네트워크 안내
____베이지안 네트워크를 위한 자바 API
____네트워크 계획하기
____네트워크 코딩하기
__4.9 요약
5장 인공 신경망
__5.1 신경망이란 무엇인가?
__5.2 인공 신경망 활용
____고빈도 매매
____신용 대출
____데이터 센터 관리
____로봇 공학
____의료 모니터링
__5.3 인공 신경망 뜯어보기
____퍼셉트론
____활성화 함수
____다층 퍼셉트론
____역전파
__5.4 인공 신경망을 위한 데이터 준비
__5.5 웨카를 사용한 인공 신경망
____데이터 세트 만들기
___웨카로 데이터 읽어 들이기
____다층 퍼셉트론 조정하기
____네트워크 훈련시키기
____네트워크 변경하기
____테스트 데이터 크기 늘리기
__5.6 자바에서 신경망 구현하기
____프로젝트 만들기
____코드
____CSV를 Arff로 변환하기
____신경망 실행하기
__5.7 요약
6장 연관 규칙 학습
__6.1 연관 규칙 학습은 어느 분야에서 사용되는가?
____웹 사용 로그 마이닝
____맥주와 기저귀
__6.2 연관 규칙 학습은 어떻게 이루어지는가?
____지지도
____신뢰도
____향상도
____확신도
____프로세스 정의하기
__6.3 알고리즘
____Apriori
____FP-Growth
__6.4 장바구니 마이닝
____원시 데이터 다운로드
____이클립스에서 프로젝트 설정하기
____아이템 데이터 파일 설정하기
____데이터 설정하기
____머하웃 실행시키기
____결과 검사하기
____모두 합치기
____추후 개발
__6.5 요약
7장 서포트 벡터 머신
__7.1 SVM이란 무엇인가?
__7.2 SVM은 어디에 사용되는가?
__7.3 기본 분류 원칙
____이진 분류와 다중 클래스 분류
____선형 분류기
____신뢰성
____함숫값 최대화와 최소화
__7.4 SVM으로 분류하는 방법
____선형 분류 사용하기
____비선형 분류 사용하기
__7.5 웨카에서 SVM 사용하기
____LibSVM 설치하기
____분류 실습
____자바와 함께 LibSVM 사용하기
__7.6 요약
8장 클러스터링
__8.1 클러스터링이란 무엇인가?
__8.2 클러스터링은 어디에 사용되는가?
____인터넷
____비즈니스와 소매업
____법 집행
____컴퓨터 작업
__8.3 클러스터링 모델
____k-means는 어떻게 작동하는가?
____클러스터 개수 계산하기
__8.4 웨카를 사용한 k-means 클러스터링
____데이터 준비하기
____워크벤치를 이용한 방법
____명령줄을 사용한 방법
____코드를 사용한 방법
__8.5 요약
9장 스프링 XD로 하는 실시간 머신 러닝
__9.1 데이터 파이어호스 잡기
____실시간 데이터 사용 시 고려 사항
____실시간 시스템의 활용 가능성
__9.2 스프링 XD 사용하기
____스프링 XD 스트림
____입력 소스, 싱크, 프로세서
__9.3 트위터 데이터로부터 배우기
____개발 계획
____트위터 API 개발자의 애플리케이션 설정하기
__9.4 스프링 XD 설정하기
____스프링 XD 서버 시작하기
____샘플 데이터 만들기
____스프링 XD 셸
____스트림 101
__9.5 스프링 XD와 트위터
____트위터 자격 인증 설정하기
____첫 트위터 스트림 만들기
____다음에 할 것은?
__9.6 프로세서 소개
____어떻게 스트림 내 프로세서 작업이 이루어지는가?
____나만의 프로세서 만들기
__9.7 실시간 감성 분석
____기본적인 분석이 이루어지는 방법
____감성 프로세서 만들기
____스프링 XD Taps
__9.8 요약
10장 배치 처리로 하는 머신 러닝
__10.1 빅데이터인가?
__10.2 배치 처리할 데이터의 고려 사항
____크기와 빈도
____데이터가 많은가?
____처리 방법은?
__10.3 배치 처리의 실전 예제
____하둡
____스쿱
____피그
____머하웃
____클라우드 기반 맵리듀스
____실습 시 주의사항
__10.4 하둡 프레임워크 사용
출판사 서평
출판사 서평
머신 러닝, 어떻게 사용할 것인가?
당신이 궁금해하는 그 질문을 컴퓨터에게 던져라!
매장 어디에 상품을 두면 더 잘 팔릴까? - 각 매대의 판매량을 분석하자
요즘 유행하는 건 뭐지? - 해시태그를 모아 트렌드를 알아보자
사람들은 이 문제를 어떻게 생각할까? - 트위터의 글을 수집해 긍정적인지 부정적인지 살펴보자
이 모든 질문의 대답을 컴퓨터가 대신 답하도록 만들어라.
자바로 배운다!
주 도구로 웨카와 이클립스를 사용하여 머신 러닝을 학습한다. 웨카에서 제공하는 데이터 분석 알고리즘인 의사결정트리, 베이지안 ...
머신 러닝, 어떻게 사용할 것인가?
당신이 궁금해하는 그 질문을 컴퓨터에게 던져라!
매장 어디에 상품을 두면 더 잘 팔릴까? -> 각 매대의 판매량을 분석하자
요즘 유행하는 건 뭐지? -> 해시태그를 모아 트렌드를 알아보자
사람들은 이 문제를 어떻게 생각할까? -> 트위터의 글을 수집해 긍정적인지 부정적인지 살펴보자
이 모든 질문의 대답을 컴퓨터가 대신 답하도록 만들어라.
자바로 배운다!
주 도구로 웨카와 이클립스를 사용하여 머신 러닝을 학습한다. 웨카에서 제공하는 데이터 분석 알고리즘인 의사결정트리, 베이지안 네트워크, 서포트 벡터 머신, 클러스터링을 실습한다. 또한, 웨카가 만들어 내는 자바 코드를 분석하고 활용 방법을 배운다.
다양한 도구로 머신 러닝의 전체 상을 살펴본다!
머신 러닝으로 결과를 얻으려면 데이터를 수집하고 변환한 다음, 데이터 분석 알고리즘을 사용하여 모은 데이터를 처리해야 한다. 전체 과정을 도구 하나로 모두 처리할 수는 없다. 데이터의 성격에 따라 선택하는 도구도 달라진다. 머하웃, 스프링 XD, 하둡, 스쿱, 피그, 맵리듀스, 스칼라, 스파크, R, rJava를 설치하고 사용해보면서 각 도구의 특징을 알고 적재적소에 사용하자.
[지은이 서문]
데이터, 데이터, 데이터. 뉴스에서도, 보고서나 백서에서도, 심지어 텔레비전에서도 빅데이터와 데이터 과학을 이야기한다. 소셜 미디어, 전화기, 사물인터넷 기기, 센서, 그외 무엇이든 데이터를 만드는 것이라면 거기서 나오는 데이터를 모두 수집하고 연구하여 뭔가 의미 있는 작업을 해야 한다고 압박한다.
영업 전략에서 중요한 것은 데이터의 양과 속도다. 홍수처럼 밀려오는 데이터를 경험해 본 사람들은 데이터를 빠르게 처리할 수 없다고 말하며 데이터 관련 서비스를 계속 이용하라고 말한다. 이 말에도 일리가 있겠지만, 그대로 따르기 전에 잠시 이 문제를 생각해보자.
데이터 마이닝과 머신 러닝은 수 년 전부터 우리 주위에 있었다. 최근 빅데이터를 둘러싼 대형 매체는 데이터의 양에 집중하고 있다. 자세히 들여다보면 적용하는 머신 러닝 알고리즘은 수 년 전과 변한 게 없다. 달라진 것은 적용되는 규모다.
데이터를 만드는 여러 조직을 보면 (개인적인 생각이지만) 정말 미미하다. 구글, 페이스북, 트위터, 넷플릭스 그리고 몇몇 기업이 알고리즘 학습과 도구로 가득한 뉴스 헤드라인 대부분을 독차지한다.
여기서 여러분이 가진 진짜 문제는 이것이다.
"나는 데이터를 어떻게 적용해야 하는가?"
이 책에서도 머신 러닝의 빅데이터 측면을 살펴본다(무시할 수 없는 주제다). 그러나 데이터에서 통찰력을 얻는 큰 그림의 작은 요소에 불과하다.
여러 가지 도구를 배우면서 자신의 작업에 맞는 도구를 찾는 과정임을 기억하라. 출판사에서는 하둡을 가르쳐주었으면 하겠지만, 하둡이 모든 작업에 항상 적절한 도구는 아니다.
이 책의 목적
이 책은 머신 러닝을 다룬다(빅데이터가 아니다). 이 책은 데이터에서 통찰력을 얻는 여러 가지 방법을 다룬다. 책의 마지막 페이지까지 여러 가지 머신 러닝 방법을 살펴보고, 실무에 사용할 수 있는 코드를 설명한다. 자신의 문제에 알맞게 머신 러닝 기술을 적용하는 방법을 배우기를 바란다.
이 책을 활용하는 데 있어 옳고 그른 방법은 없다. 처음부터 차근차근 시작하여 끝까지 읽어도 좋고, 필요할 때 알고 싶은 부분만 찾아서 읽어도 좋다.
‘실습(Hands-On)’은 실습이다
내가 읽었던 많은 머신 러닝 책은 모두 심오한 이을 다루었다. 그게 나쁘다는 것은 아니다. 복잡한 수식이 가득한 심도 있는 이론을 찾고 있다면 그 열정을 칭찬하고 싶다. 나는 실습을 통해 학습하거나 프로젝트에 접근하고자 한다. 나의 철학은 단순하다.
ㆍ질문에서 시작하라
ㆍ배워야 하는 이론을 찾아라
ㆍ배우기 쉬운 예제를 많이 찾아라
ㆍ예제를 프로젝트에 적용하라
나는 소프트웨어 개발자로서 많은 예제를 살펴보기 좋아한다. 또한, 직접 개발하는 시간뿐만 아니라, 선생님으로서 학생들에게 간단한 메시지를 주는 것도 좋아한다. 키보드 위에서 바쁘게 움직이는 손가락, IDE에서 코딩하며 보내는 시간, 멋지게 일이 처리되는 모습 등을 이 책에서 전달하고 싶다.
모든 사람에게는 자신만의 학습 스타일이 있다. 이 책은 가장 일반적인 방법을 다루고 있으므로 모든 사람에게 도움이 되리라 믿는다.
“수학을 먼저 배울까요?”
좋아하는 축구팀이 다른 팀보다 낫다, 지미 페이지가 제프 백보다 훌륭한 기타리스트다(나는 제프 백을 더 좋아한다) 같이 영원한 논쟁거리가 몇 가지 있다. 머신 러닝을 시작하기 전에 수학을 얼마나 알아야 하는가 역시 또 하나의 논쟁거리다.
머신 러닝을 직접 하는 것과 머신 러닝 이론을 배우는 것은 전혀 별개의 문제다. 이론을 배우려면 수학적인 배경이 필요하다. 그러나 이 책은 실습을 통해 머신 러닝에 접근한다. 지금 당장 개발자가 이용할 수 있는 수많은 머신 러닝 도구를 손에 쥐고, 이 도구들이 어떤 원리로 움직이는지는 굳이 알 필요 없다. 배워야 하는 것은 도구를 어떻게 활용할 것인가다. 어떻게든 노력하여 어려운 작업을 마무리한다면 당연히 칭찬 받고 격려 받을 만하다.
"그래도 박사학위는 필요하다"
이 말은 여러분을 멈칫하게 만들 것이다. 데이터 분석을 시작하기도 전에 또는 여러분이 데이터 과학자라고 말하기도 전에 필요한 지식 수준에 대한 긴 논쟁을 하는 데 화가 날 것이다.
개인적으로 몇 년을 투자해 석사나 박사학위를 취득한다면 이 길을 좀 더 거리낌 없이 갈 수 있다. 학위 취득은 실용적이며 책을 읽고 직접 실행해보는 것이 좋다.
학구적인 것은 중요하다. 수학, 통계, 데이터 마이닝에 관한 수많은 온라인 강좌, 논문, 웹사이트, 서적은 마음속 열망을 채우기에 충분하다. 나도 이런 리소스를 많이 이용한다.
그러나 나는 직접 데이터를 다루고, 메서드를 시험해보고, 결과를 살펴보는 것을 가장 좋아한다. 여러분이 선형회귀 이론을 다시 공부해야 한다면 다른 읽을 거리도 많고, 이 책에서도 물론 다룰 것이므로 안심하라.
누구나 데이터 과학자가 될 수 있을까? 머신 러닝팀은 다양한 재능을 가진 사람들로 구성하는 것이 더 현실적이다. 이는 2장에서 더 자세히 이야기하겠다.
그러므로 다른 사람들이 프로젝트에 박사 인력을 들여올지 말지 논의하는 동안 여러분은 의사결정트리를 만들어 가능 여부를 확인해보라.
이 책으로 무엇을 배울 것인가?
처음부터 끝까지 이 책을 모두 읽는다면 머신 러닝의 일반적인 활용, 처리하는 다양한 방법, 실시간 처리와 배치 처리를 배울 수 있다.
물론 원하는 부분만 참조하는 것도 괜찮다. 각 장과 예제는 다른 장을 참조하지 않아도 학습할 수 있도록 작성했다.
이 책의 목적은 실습으로 일반적인 머신 러닝 개념을 다루는 것이다. 무료 도구와 라이브러리를 사용하여 여러분이 가진 데이터에서 통찰력을 얻기에 부족하지 않을 것이다.
이론과 실무 균형 맞추기
머신 러닝과 데이터 마이닝에 관한 책은 많지만, 이론과 실무적인 예제 사이에서 균형을 맞춘 책은 많지 않다. 이 책을 기획할 때 실무와 사용하기 쉬운 예제의 중요성을 강조하고 단계별로 설명하고자 했다.
이론은 중요하지 않다는 말이 아니다. 무엇을 배우고 싶은지, 어떻게 배울 것인지가 이 책을 읽는 방법을 결정한다.
처음 두 장은 여러 도구와 실제 결과를 사용하여 머신 러닝을 계획하면서 머신 러닝과 데이터 마이닝을 정의한다. 주요 장(3장부터 8장)에서는 학습하고 확인하고 기억할 수 있도록 만든