저자 서문
데이터, 데이터, 데이터. 뉴스에서도, 보고서나 백서에서도, 심지어 텔레비전에서도 빅데이터와 데이터 과학을 이야기한다. 소셜 미디어, 전화기, 사물인터넷 기기, 센서, 그외 무엇이든 데이터 를 만드는 것이라면 거기서 나오는 데이터를 모두 수집하고 연구하여 뭔가 의미 있는 작업을 해야 한다고 압박한다. 영업 전략에서 중요한 것은 데이터의 양과 속도다. 홍수처럼 밀려오는 데이터를 경험해 본 사람들 은 데이터를 빠르게 처리할 수 없다고 말하며 데이터 관련 서비스를 계속 이용하라고 말한다. 이 말에도 일리가 있겠지만, 그대로 따르기 전에 잠시 이 문제를 생각해보자. 데이터 마이닝과 머신 러닝은 수 년 전부터 우리 주위에 있었다. 최근 빅데이터를 둘러싼 대형 매 체는 데이터의 양에 집중하고 있다. 자세히 들여다보면 적용하는 머신 러닝 알고리즘이 수 년 전 과 비교해서 변한 게 없다. 달라진 것은 적용되는 규모다. 데이터를 만드는 여러 조직을 보면 (개인적인 생각이지만) 정말 미미하다. 구글, 페이스북, 트위 터, 넷플릭스 그리고 몇몇 기업이 알고리즘 학습과 도구로 가득한 뉴스 헤드라인 대부분을 독차지 한다. 여기서 여러분이 가진 진짜 문제는 이것이다. “나는 데이터를 어떻게 적용해야 하는가?” 이 책에서도 머신 러닝의 빅데이터 측면을 살펴본다(무시할 수 없는 주제다). 그러나 데이터에서 통찰력을 얻는 큰 그림의 작은 요소에 불과하다. 여러 가지 도구를 배우면서 자신의 작업에 맞는 도구를 찾는 과정임을 기억하라. 출판사에서는 하 둡을 가르쳐주었으면 하겠지만, 하둡이 모든 작업에 항상 적절한 도구는 아니다.
이 책의 목적 이 책은 머신 러닝을 다룬다(빅데이터가 아니다). 이 책은 데이터에서 통찰력을 얻는 여러 가지 방 법을 다룬다. 책의 마지막 페이지까지 여러 가지 머신 러닝 방법을 살펴보고, 실무에 사용할 수 있 는 코드를 설명한다. 자신의 문제에 알맞게 머신 러닝 기술을 적용하는 방법을 배우기를 바란다. 003
����.indd 3
2016-04-18 �� 5:49:50
이 책을 활용하는 데 있어 옳고 그른 방법은 없다. 처음부터 차근차근 시작하여 끝까지 읽어도 좋 고, 필요할 때 알고 싶은 부분만 찾아서 읽어도 좋다.
‘실습(Hands-On)’은 실습이다 내가 읽었던 많은 머신 러닝 책은 모두 심오한 이론을 다루었다. 그게 나쁘다는 것은 아니다. 복잡 한 수식이 가득한 심도 있는 이론을 찾고 있다면 그 열정을 칭찬하고 싶다. 나는 실습을 통해 학습 하거나 프로젝트에 접근하고자 한다. 나의 철학은 단순하다. ●●
질문에서 시작하라
●●
배워야 하는 이론을 찾아라
●●
배우기 쉬운 예제를 많이 찾아라
●●
예제를 프로젝트에 적용하라
나는 소프트웨어 개발자로서 많은 예제를 살펴보기 좋아한다. 또한, 직접 개발하는 시간뿐만 아니 라, 선생님으로서 학생들에게 간단한 메시지를 주는 것도 좋아한다. 키보드 위에서 바쁘게 움직이 는 손가락, IDE에서 코딩하며 보내는 시간, 멋지게 일이 처리되는 모습 등을 이 책에서 전달하고 싶다. 모든 사람에게는 자신만의 학습 스타일이 있다. 이 책은 가장 일반적인 방법을 다루고 있으므로 모든 사람에게 도움이 되리라 믿는다.
“수학을 먼저 배울까요?” 좋아하는 축구팀이 다른 팀보다 낫다, 지미 페이지가 제프 백보다 훌륭한 기타리스트다(나는 제프 백을 더 좋아한다) 같이 영원한 논쟁거리가 몇 가지 있다. 머신 러닝을 시작하기 전에 수학을 얼마 나 알아야 하는가 역시 또 하나의 논쟁거리다.
004
����.indd 4
2016-04-18 �� 5:49:50
머신 러닝을 직접 하는 것과 머신 러닝 이론을 배우는 것은 전혀 별개의 문제다. 이론을 배우려면 수학적인 배경이 필요하다. 그러나 이 책은 실습을 통해 머신 러닝에 접근한다. 지금 당장 개발자 가 이용할 수 있는 수많은 머신 러닝 도구를 손에 쥐고, 이 도구들이 어떤 원리로 움직이는지는 굳 이 알 필요 없다. 배워야 하는 것은 도구를 어떻게 활용할 것인가다. 어떻게든 노력하여 어려운 작 업을 마무리한다면 당연히 칭찬 받고 격려 받을 만하다.
“그래도 박사학위는 필요하다” 이 말은 여러분을 멈칫하게 만들 것이다. 데이터 분석을 시작하기도 전에 또는 여러분이 데이터 과학자라고 말하기도 전에 필요한 지식 수준에 대한 긴 논쟁을 하는 데 화가 날 것이다. 개인적으로 몇 년을 투자해 석사나 박사학위를 취득한다면 이 길을 좀 더 거리낌 없이 갈 수 있다. 학위 취득은 실용적이며 책을 읽고 직접 실행해보는 것이 좋다. 학구적인 것은 중요하다. 수학, 통계, 데이터 마이닝에 관한 수많은 온라인 강좌, 논문, 웹사이트, 서적은 마음속 열망을 채우기에 충분하다. 나도 이런 리소스를 많이 이용한다. 그러나 나는 직접 데이터를 다루고, 메서드를 시험해보고, 결과를 살펴보는 것을 가장 좋아한다. 여러분이 선형회귀 이론을 다시 공부해야 한다면 다른 읽을 거리도 많고, 이 책에서도 물론 다룰 것이므로 안심하라. 누구나 데이터 과학자가 될 수 있을까? 머신 러닝팀은 다양한 재능을 가진 사람들로 구성하는 것 이 더 현실적이다. 이는 2장에서 더 자세히 이야기하겠다. 그러므로 다른 사람들이 프로젝트에 박사 인력을 들여올지 말지 논의하는 동안 여러분은 의사결 정트리를 만들어 가능 여부를 확인해보라.
이 책으로 무엇을 배울 것인가? 처음부터 끝까지 이 책을 모두 읽는다면 머신 러닝의 일반적인 활용, 처리하는 다양한 방법, 실시 간 처리와 배치 처리를 배울 수 있다. 005
����.indd 5
2016-04-18 �� 5:49:50
물론 원하는 부분만 참조하는 것도 괜찮다. 각 장과 예제는 다른 장을 참조하지 않아도 학습할 수 있도록 작성했다. 이 책의 목적은 실습으로 일반적인 머신 러닝 개념을 다루는 것이다. 무료 도구와 라이브러리를 사용하여 여러분이 가진 데이터에서 통찰력을 얻기에 부족하지 않을 것이다.
이론과 실무 균형 맞추기 머신 러닝과 데이터 마이닝에 관한 책은 많지만, 이론과 실무적인 예제 사이에서 균형을 맞춘 책 은 많지 않다. 이 책을 기획할 때 실무와 사용하기 쉬운 예제의 중요성을 강조하고 단계별로 설명 하고자 했다. 이론은 중요하지 않다는 말이 아니다. 무엇을 배우고 싶은지, 어떻게 배울 것인지가 이 책을 읽는 방법을 결정한다. 처음 두 장은 여러 도구와 실제 결과를 사용하여 머신 러닝을 계획하면서 머신 러닝과 데이터 마 이닝을 정의한다. 주요 장(3장부터 8장)에서는 학습하고 확인하고 기억할 수 있도록 만든 실무적 인 가이드와 설명을 곁들인 부분 코드, 기타 유용한 정보 등을 이용하여 머신 러닝의 여러 가지 이 론을 살펴본다. 마지막으로 실시간 처리, 배치 처리 방법, 각각을 어떻게 통합하는가를 배운다. 그리고 아파치 스 파크와 통계학에 뿌리를 둔 R을 알아본다.
각 장의 개요 1장은 “머신 러닝이란 무엇인가?”라는 질문과 머신 러닝의 정의, 어디에서 사용되는가, 접하게 될 알고리즘의 종류가 무엇인지를 다룬다. 또한, 머신 러닝의 인간적인 측면과 앞으로 여러분의 모델 과 작업이 경쟁력을 가지려면 무엇이 필요한지 이야기한다.
006
����.indd 6
2016-04-18 �� 5:49:50
실제 코딩에 앞서 계획이 필요하다. 2장에서는 머신 러닝을 계획하는 데 집중한다. 계획에는 데이 터 과학팀과의 관계, 가공, 필요한 스토리지 정의, 사생활 보호, 데이터 정리, 만병통치약 같은 하 나의 솔루션이 없다는 사실을 이해하는 것이 포함된다. 2장에서는 처리에 앞서 데이터를 관리하 는 데 도움이 되는 몇 가지 편리한 리눅스 명령으로 작업한다. 의사결정트리는 일반적인 머신 러닝 방법이다. 결과나 모델 속에 관측된 움직임과 여러 입력 자료 (시그널과 특성)를 사용하여 새로운 데이터가 들어올 때 결과를 예측한다. 3장에서는 데이터와 웨 카를 사용한 예제 코딩으로 의사결정트리 디자인을 살펴본다. 베이지안 네트워크는 랜덤 변수 집합의 조건부 의존성을 나타낸다. 4장에서는 간단한 예제를 통 해 어떻게 베이지안 네트워크가 작동하는지 알아보고 거기에 사용하는 코드를 살펴본다. 중추 신경계에서 영감을 얻은 신경망 모델은 딥러닝 시스템에서 여전히 사용되고 있다. 5장에서 는 머신 러닝의 한 분류인 신경망 모델이 어떻게 작동하는지 보여주고 네트워크로 입력 정보를 전 달하는 예제를 선보인다. 장바구니 분석에 관심이 있다면 6장을 주목하자. 6장에서는 연관 규칙 학습을 배우고, 대형 데이 터 내에서 관계를 찾아본다. Apriori 알고리즘이 오늘날 대형 소매 유통 산업에서 어떻게 사용되 는지 면밀히 살펴볼 것이다. 서포트 벡터 머신은 지도 학습 모델로서 데이터를 분석하여 패턴을 인지하는 방법이다. 7장에서 텍스트 분류와 기타 예제를 살펴본다. 8장에서는 클러스터링을 다룬다(개체를 그룹 짓는 방법이다). 클러스터링은 마케팅의 세그먼트 분석 같은 것에 가장 적합하다. 최초 학습 단계에서 시행착오법을 시도하려는 경우 최고의 머신 러닝 방법이다. 9장과 10장은 튜토리얼이다. 9장의 예제는 실시간 처리에 관한 것이다. 스프링 XD(데이터 소화 엔진)를 사용하고 스트리밍 트위터 API를 사용하여 트윗이 생길 때마다 수집한다. 10장에서는 배치 처리로서 머신 러닝을 다룬다. 9장에서 모은 데이터로 하둡 클러스터를 만들고 여러 가지 작업을 수행해본다. 또한, 스쿱으로 데이터베이스에서 데이터를 얻고, 머하웃으로 고객 에게 추천하고, 하둡과 피그로 고객 데이터를 분석하는 일반적인 이슈를 다룬다.
007
����.indd 7
2016-04-18 �� 5:49:50
11장에서는 머신 러닝 영역에 새로 들어온 도구를 다룬다. 아파치 스파크를 살펴보고, 스칼라 언 어를 소개한다. 스칼라는 인메모리 데이터를 대상으로 SQL 같은 쿼리를 수행한다. R은 전 세계 통계학자들이 오랫동안 사용해온 언어다. 12장에서는 R 언어를 살펴보면서 이전 장 에서 다룬 머신 러닝 알고리즘을 수행한다.
책의 소스 코드 책에서 소개한 코드는 깃허브에서 내려받을 수 있다. 주소는 https://github.com/jasebell/ mlbook이다. 또한 와일리 출판사의 웹사이트인 http://as.wiley.com/WileyCDA/WileyTitle/ productCd-1118889061.html에서도 내려받을 수 있다.
Note
길벗출판사 깃허브에서도 내려받을 수 있다.
• https://github.com/gilbutITbook/006789
예제는 모두 자바로 작성되어 있다. 다른 언어로 지식을 확장하고 싶다면 깃허브에서 검색해보라. 흥미로운 예제를 찾을 수 있다. 코드는 각 장별로 구분되어 리포지토리 폴더에 저장되어 있다. 추가 라이브러리가 필요하다면 README파일을 참고하라.
Git 사용하기 Git은 버전 관리 시스템으로 업계와 오픈 소스 커뮤니티에서 널리 사용된다. 팀으로 작업한다면 작업할 코드베이스 브랜치(branch)를 만들고 나중에 변경된 걸 병합할 수 있으므로 유용하다. 이 책에서는 Git을 제한적으로 사용한다. 예제를 사용하려면 저장소의 “cloning”을 사용한다. 이 책의 예제를 복제하려면 다음 명령을 사용한다. 008
����.indd 8
2016-04-18 �� 5:49:51
$mkdir mlbookexamples $cd mlbookexamples $git clone https://github.com/jasebell/mlbook.git
명령 후에 복제가 진행되는 것이 보일 것이다. 복제가 끝나고 디렉터리를 새로 내려 받을 폴더로 변경하면 코드 예제를 볼 수 있다.
009
����.indd 9
2016-04-18 �� 5:49:51
목 차
1장 머신 러닝이란 무엇인가?
025
1.1 머신 러닝의 역사 026 앨런 튜링 026 아서 사무엘 027 톰 미첼 027 요약 028
1.2 머신 러닝 알고리즘의 종류 028 지도 학습 028 비지도 학습 029
1.3 인간의 개입 029 1.4 머신 러닝의 활용 030 소프트웨어 030 주식 매매 031 로보틱스 032 의학과 헬스 케어 032 광고 033 소매업과 전자 상거래 033 게임 분석 034 사물인터넷 035
1.5 머신 러닝을 위한 프로그래밍 언어 036 파이썬 036 R 037 매트랩 037 스칼라 037 클로저 037 루비 038
1.6 이 책에서 사용한 소프트웨어 038 자바 버전 확인하기 038 웨카 툴킷 039 머하웃 039 스프링 XD 040 하둡 040
����.indd 13
2016-04-18 �� 5:49:51
통합개발환경(IDE) 사용하기 041
1.7 데이터 저장소 042 UC 어바인 머신 러닝 저장소 042 인포침스 042 캐글 043
1.8 요약 043
2장 머신 러닝 계획하기
045
2.1 머신 러닝 순환 주기 046 2.2 모든 것은 질문으로 시작된다 047 2.3 데이터가 없어요! 047 지역 사회에서 시작하기 048 경진대회 048
2.4 하나로 모두 해결한다? 049 2.5 프로세스 정의하기 050 계획 050 개발 051 테스팅 051 보고 051 개선 051 프로덕션 052
2.6 데이터 팀 구성하기 052 수학과 통계 052 프로그래밍 053 그래픽 디자인 053 전문 지식 053
2.7 데이터 처리 054 내 컴퓨터 사용하기 054 컴퓨터 클러스터 054 클라우드 기반 서비스 055
����.indd 14
2016-04-18 �� 5:49:51
2.8 데이터 스토리지 055 물리 디스크 055 클라우드 기반 스토리지 055
2.9 사생활 데이터 보안 056 문화 규범 056 세대적인 기대 057 사용자 데이터의 익명성 057 ‘오싹한 선’을 넘지 마라 058
2.10 데이터 품질과 정리 059 입력 여부 확인 059 타입 확인 060 길이 확인 060 범위 확인 061 포맷 확인 061 브리트니 딜레마 062 국가 이름에는 어떤 것들이 있나? 065 날짜와 시간 067 데이터 정리에 관한 마지막 생각 067
2.11 입력 데이터에 대해 생각해보기 068 원시 텍스트 068 CSV 068 JSON 070 YAML 071 XML 071 스프레드시트 073 데이터베이스 073
2.12 결과 데이터에 대해 생각해보기 074 2.13 실험을 두려워하지 마라 075 2.14 요약 075
����.indd 15
2016-04-18 �� 5:49:51
3장 의사결정트리로 작업하기
077
3.1 의사결정트리의 기본 078 의사결정트리의 사용 078 의사결정트리의 장점 079 의사결정트리의 한계 079 여러 가지 알고리즘 079 의사결정트리는 어떻게 작동하는가? 081
3.2 웨카의 의사결정트리 086 필요 사항 086 훈련용 데이터 087 웨카를 사용하여 의사결정트리 만들기 089 분류에서 자바 코드 만들기 094 분류기 코드 테스트하기 099 미래의 반복적인 작업 생각해보기 101
3.3 요약 102
4장 베이지안 네트워크
103
4.1 조종사부터 클리피까지 104 4.2 약간의 그래프 이론 105 4.3 약간의 확률 이론 106 동전 던지기 107 조건부 확률 107 복권 당첨 108
4.4 베이즈 이론 109 4.5 베이지안 네트워크는 어떻게 작동하는가? 110 확률 부여하기 111 결과 계산하기 113
4.6 노드의 개수 114
����.indd 16
2016-04-18 �� 5:49:51
4.7 전문가의 도움 115 4.8 베이지안 네트워크 안내 115 베이지안 네트워크를 위한 자바 API 116 네트워크 계획하기 116 네트워크 코딩하기 118
4.9 요약 128
5장 인공 신경망
129
5.1 신경망이란 무엇인가? 130 5.2 인공 신경망 활용 131 고빈도 매매 131 신용 대출 132 데이터 센터 관리 132 로봇 공학 132 의료 모니터링 133
5.3 인공 신경망 뜯어보기 133 퍼셉트론 133 활성화 함수 135 다층 퍼셉트론 136 역전파 138
5.4 인공 신경망을 위한 데이터 준비 139 5.5 웨카를 사용한 인공 신경망 140 데이터 세트 만들기 140 웨카로 데이터 읽어 들이기 142 다층 퍼셉트론 조정하기 143 네트워크 훈련시키기 145 네트워크 변경하기 148 테스트 데이터 크기 늘리기 149
5.6 자바에서 신경망 구현하기 149 프로젝트 만들기 150
����.indd 17
2016-04-18 �� 5:49:51
코드 152 CSV를 Arff로 변환하기 154 신경망 실행하기 155
5.7 요약 156
6장 연관 규칙 학습
157
6.1 연관 규칙 학습은 어느 분야에서 사용되는가? 158 웹 사용 로그 마이닝 159 맥주와 기저귀 159
6.2 연관 규칙 학습은 어떻게 이루어지는가? 160 지지도 162 신뢰도 162 향상도 163 확신도 163 프로세스 정의하기 163
6.3 알고리즘 164 Apriori 164 FP-Growth 165
6.4 장바구니 마이닝 166 원시 데이터 다운로드 166 이클립스에서 프로젝트 설정하기 167 아이템 데이터 파일 설정하기 168 데이터 설정하기 171 머하웃 실행시키기 173 결과 검사하기 175 모두 합치기 178 추후 개발 178
6.5 요약 179
����.indd 18
2016-04-18 �� 5:49:51
7장 서포트 벡터 머신
181
7.1 SVM이란 무엇인가? 182 7.2 SVM은 어디에 사용되는가? 182 7.3 기본 분류 원칙 183 이진 분류와 다중 클래스 분류 183 선형 분류기 185 신뢰성 186 함숫값 최대화와 최소화 187
7.4 SVM으로 분류하는 방법 187 선형 분류 사용하기 187 비선형 분류 사용하기 190
7.5 웨카에서 SVM 사용하기 191 LibSVM 설치하기 191 분류 실습 192 자바와 함께 LibSVM 사용하기 199
7.6 요약 205
8장 클러스터링
207
8.1 클러스터링이란 무엇인가? 208 8.2 클러스터링은 어디에 사용되는가? 209 인터넷 209 비즈니스와 소매업 209 법 집행 210 컴퓨터 작업 210
8.3 클러스터링 모델 210 k-means는 어떻게 작동하는가? 211 클러스터 개수 계산하기 213
8.4 웨카를 사용한 k-means 클러스터링 215
����.indd 19
2016-04-18 �� 5:49:51
데이터 준비하기 216 워크벤치를 이용한 방법 217 명령줄을 사용한 방법 222 코드를 사용한 방법 226
8.5 요약 235
9장 스프링 XD로 하는 실시간 머신 러닝
237
9.1 데이터 파이어호스 잡기 238 실시간 데이터 사용 시 고려 사항 238 실시간 시스템의 활용 가능성 239
9.2 스프링 XD 사용하기 240 스프링 XD 스트림 240 입력 소스, 싱크, 프로세서 241
9.3 트위터 데이터로부터 배우기 244 개발 계획 244 트위터 API 개발자의 애플리케이션 설정하기 245
9.4 스프링 XD 설정하기 248 스프링 XD 서버 시작하기 249 샘플 데이터 만들기 250 스프링 XD 셸 250 스트림 101 251
9.5 스프링 XD와 트위터 254 트위터 자격 인증 설정하기 255 첫 트위터 스트림 만들기 256 다음에 할 것은? 259
9.6 프로세서 소개 259 어떻게 스트림 내 프로세서 작업이 이루어지는가? 259 나만의 프로세서 만들기 260
9.7 실시간 감성 분석 269 기본적인 분석이 이루어지는 방법 269
����.indd 20
2016-04-18 �� 5:49:51
감성 프로세서 만들기 270 스프링 XD Taps 275
9.8 요약 276
10장 배치 처리로 하는 머신 러닝
277
10.1 빅데이터인가? 278 10.2 배치 처리할 데이터의 고려 사항 279 크기와 빈도 279 데이터가 많은가? 280 처리 방법은? 280
10.3 배치 처리의 실전 예제 281 하둡 281 스쿱 281 피그 282 머하웃 282 클라우드 기반 맵리듀스 282 실습 시 주의사항 282
10.4 하둡 프레임워크 사용하기 283 하둡 아키텍처 283 싱글노드 클러스터 설정하기 285
10.5 맵리듀스 작업 방법 290 10.6 해시태그 마이닝 291 스프링 XD의 하둡 지원 291 이 예제의 목표 292 해시태그란 무엇인가? 292 맵리듀스 클래스 만들기 293 기존 데이터에 ETL 수행하기 305 머하웃으로 제품 추천하기 308
10.7 판매 데이터 마이닝 316 제 커피숍에 오신 걸 환영합니다! 316
����.indd 21
2016-04-18 �� 5:49:51
작은 규모로 시작하기 317 Core 메서드 작성하기 317 하둡과 맵리듀스 사용하기 320 피그를 사용하여 매출 데이터 마이닝하기 323
10.8 배치 작업 일정 333 10.9 요약 334
11장 아파치 스파크
337
11.1 스파크는 하둡의 대안인가? 338 11.2 자바, 스칼라 또는 파이썬? 339 11.3 스칼라 단기 속성 코스 339 스칼라 설치하기 339 패키지 340 데이터 타입 340 클래스 341 함수 호출하기 342 연산자 342 흐름 제어 342
11.4 스파크 다운로드와 설치 343 11.5 스파크 간단 입문 344 셸 시작하기 344 데이터 소스 346 스파크 테스트 346 스파크 모니터 348
11.6 스파크와 하둡 맵리듀스 비교 349 11.7 스파크로 독립 실행형 프로그램 만들기 352 스칼라에서 스파크 프로그램 352 스칼라 빌드 도구 설치하기 352 자바에서 스파크 프로그램 355 스파크 프로그램 요약 359
����.indd 22
2016-04-18 �� 5:49:51
11.8 스파크 SQL 359 기본 개념 360 RDD에서 SparkSQL 사용하기 361
11.9 스파크 스트리밍 370 기본 개념 371 스칼라로 첫 스트림 만들기 371 자바로 첫 스트림 만들기 374
11.10 MLib: 머신 러닝 라이브러리 377 디펜던시 377 의사결정트리 378 클러스터링 378
11.11 요약 379
12장 R로 하는 머신 러닝
381
12.1 R 설치하기 382 OS X 382 윈도 382 리눅스 383
12.2 첫 실행 383 12.3 R-Studio 설치하기 384 12.4 R의 기본 385 변수와 벡터 385 행렬 386 리스트 387 데이터 프레임 388 패키지 설치하기 389 데이터를 로드하기 390 데이터 그리기 393
12.5 간단한 통계 396 12.6 단순 선형회귀 397
����.indd 23
2016-04-18 �� 5:49:52
데이터 만들기 398 초기 그래프 398 선형 모델 회귀 분석 398 예측하기 400
12.7 기본적인 감성 분석 400 단어 목록을 로드하는 함수 400 감성 지수를 채점하는 함수 작성하기 401 함수 테스트하기 402
12.8 Apriori 연관 규칙 403 arules 패키지 설치하기 403 훈련용 데이터 403 거래 데이터 가져오기 404 Apriori 알고리즘 실행하기 405 결과 검사하기 406
12.9 자바에서 R로 접근하기 406 rJava 패키지 설치하기 406 R에서의 첫 자바 코드 407 자바 프로그램에서 R 호출하기 408 이클립스 프로젝트 설정하기 408 자바/R 클래스 만들기 409 예제 실행하기 410 R 작업 확장하기 412
12.10 R과 하둡 413 RHadoop 프로젝트 413 RHadoop에서 간단한 맵리듀스 작업 414 R에서 소셜 미디어 연결하기 416
12.11 요약 421
부록 A 스프링 XD 빨리 시작하기 423 부록 B Hadoop 1.x 빨리 시작하기 427 부록 C 유용한 유닉스 명령어 431 부록 D 추가 읽을거리 445 찾아보기 454
����.indd 24
2016-04-18 �� 5:49:52
1
장
머신 러닝이란 무엇인가?
1.1 머신 러닝의 역사 1.2 머신 러닝 알고리즘의 종류 1.3 인간의 개입 1.4 머신 러닝의 활용 1.5 머신 러닝을 위한 프로그래밍 언어 1.6 이 책에서 사용한 소프트웨어 1.7 데이터 저장소 1.8 요약
����.indd 25
2016-04-18 �� 5:49:52
머신 러닝이란 무엇인지 살펴보면서 시작해보자. 그리고 머신 러닝의 역사와 머신 러닝이 산업 내 어디에서 사용되는지도 함께 알아보자. 또한, 이 장에서는 이 책 전반에 걸쳐 사용될 몇몇 소프트 웨어를 소개한다. 소프트웨어들을 설치하고 실무에서 사용할 수 있도록 준비해보자.
1.1
M a c h i n e
L e a r n i n g
머신 러닝의 역사
머신 러닝이란 무엇인가? 지난 60여 년 동안 업계의 선구자들은 우리를 올바른 방향으로 이끌어 왔다.
앨런 튜링1 앨런 튜링(Alan Turing)은 1950년에 발표한 논문 『계산 기계와 지능』(Computing Machinery and Intelligence)에서
“기계가 생각할 수 있을까?”라는 질문을 던졌다(전문은 www.csee.umbc.edu/
courses/471/papers/turing.pdf에서 볼 수 있다). 논문에서 서술하고 있는 ‘이미테이션 게임 (Imitation Game)’에는
참가자가 세 명 나온다. 심판(judge) 역할을 맡은 인간, 또 다른 인간, 마지막으
로 자신이 인간이라고 심판을 설득하려는 컴퓨터다. 심판은 터미널 프로그램을 통해 다른 두 참가 자에게 말을 건다. 인간과 컴퓨터가 대답을 하면 심판은 어느 쪽이 컴퓨터의 응답인지 판단한다. 심판이 인간과 컴퓨터의 반응을 보며 일관되게 구별해내지 못한다면 컴퓨터가 이긴다. 이 실험은 현재 뢰브너상(Loebner Prize, 매년 개최되는 인공 지능 대회)에서 이어지고 있다. 목표 는 간단하다. 심판이 채팅 로봇이 아닌 인간과 대화하고 있다고 확신하게 만들어라.
1 역주 한국일보에 앨런 튜링과 그의 인공 지능 테스트에 대한 기사(앨런 튜링, 생각할 수 있는 기계 판별하는 ‘모방 게임’ 제안, 이재현 문화평
론가, 2016년 3월 20일)가 실렸다. 한국일보(http://www.hankookilbo.com)에서 기사의 제목으로 검색하거나 역자가 만든 단축 URL인 http://goo.gl/Lmr2h4에서 기사를 찾아볼 수 있다.
026
����.indd 26
2016-04-18 �� 5:49:52
1
아서 사무엘
머신 러닝이란 무엇인가?
1959년 아서 사무엘(Arthur Samuel)은 머신 러닝을 “명시적으로 프로그래밍되지 않고도 컴퓨터에 학습 능력을 부여하는 학문”이라고 정의하였다. 사무엘은 IBM에서 스스로 학습하는 프로그램을 만든 것으로 유명하다. 그는 컴퓨터에서 무언가를 배울 수 있는 방법으로 게임을 사용했다. 사무엘이 선택한 게임은 체커(checkers)로, 단순하지만 컴퓨터가 전략을 배워야 하는 게임이다. 스 스로 학습하는 프로그램은 알파 -베타 가지치기(alpha-beta evaluation pruning, 의사결정에 필요 없는 노드를 제거하는 방식)와 minmax(최악의 경우 손실을 최소화하는 방식) 전략을 사용하여 움 직임을 줄이고 메모리 성능을 향상시켰다. 사무엘은 이 작품으로 인공 지능 분야에서 널리 알려졌지만, 해시 테이블(hash table)을 처음 사용한 것으로도 유명하다. 물론 IBM에도 크게 공헌했다.
톰 미첼 톰 미첼(Tom M. Mitchell)은 카네기멜론대학교(Carnegie Mellon University) 머신 러닝 학과의 학과장이 다. 『머신 러닝』(Machine Learning)(McGraw-Hill, 1997)의 저자로 머신 러닝에 대한 그의 정의는 자 주 인용되곤 한다. 작업 T에 대한 성능을 P로 측정할 수 있고, 성능 P가 경험 E로 개선된다면 프로그램은 E, T, P로 부터 배웠다고 할 수 있다. (A computer program is said to learn from experience E with respect to some class of tasks T and performance measure P, if its performance at tasks in T, as measured by P, improves with experience E.)
위의 복잡한 정의를 요약하면, 컴퓨터 프로그램이 어떤 것을 학습한 후에 최초 학습에 들인 시간 과 노력보다 더 빠르고 수월하게 배운 것을 해낼 수 있다면 머신 러닝이라고 할 수 있다. 여기서 중요한 것은 이제 머신 러닝을 정의할 일련의 개체가 생겼다는 것이다. ●●
하나 또는 그 이상의 작업(T)
●●
경험(E)
●●
성능(P)
027
����.indd 27
2016-04-18 �� 5:49:52
일련의 작업을 수행하는 컴퓨터를 사용하여 경험은 성능 향상으로 이어져야 한다.
요약 머신 러닝(machine learning)은 인공 지능의 한 분야다. 우리는 컴퓨팅을 사용해서 데이터로부터 학습
하는 시스템을 숙련된 방식으로 디자인할 수 있다. 이 시스템은 경험을 통해 배우고 발전하여 시 간이 지나면 이전 학습을 바탕으로 결과를 예측할 수 있는 모델로 다듬어질 것이다.
1.2
M a c h i n e
L e a r n i n g
머신 러닝 알고리즘의 종류
머신 러닝에 사용할 수 있는 알고리즘은 수없이 많다. 어떤 결과물을 원하느냐에 따라 어느 것을 사용할지 결정하면 된다. 앞으로 실무에 사용할 여러 가지 알고리즘을 만나게 될 것이다. 머신 러 닝의 학습 방법은 두 가지, 즉 지도 학습과 비지도 학습으로 분류할 수 있다.
지도 학습 지도 학습(supervised learning)은 훈련용 데이터로 작업한다. 모든 훈련용 데이터에는 입력(문제)과 출
력(해답, 결과물) 데이터 개체가 있다. 예를 하나 들어보면, 트위터 데이터를 분류하는 것이다(트 위터 데이터는 이 책 후반부에 많이 사용된다). 트위터에서 다음과 같은 데이터를 얻었다고 가정 해보자. 다음은 입력 데이터 개체다. Really loving the new St Vincent album! #fashion I'm selling my Louboutins! Who's interested? #louboutins I've got my Hadoop cluster working on a load of data. #data
지도 학습 분류기가 각 트윗의 결과를 배울 수 있도록 손으로 직접 해답을 입력해야 한다. 명확히 하기 위해 각 줄 첫 부분에 의도한 해답을 추가하였다.
028
����.indd 28
2016-04-18 �� 5:49:52
music
#fashion I'm selling my Louboutins! Who's interested? #louboutins
머신 러닝이란 무엇인가?
bigdata
1
Really loving the new St Vincent album!
clothing
I've got my Hadoop cluster working on a load of data. #data
제대로 동작한다면 지도 학습 분류기가 데이터를 더 분명하게 인식할 수 있도록 더 많은 데이터를 손수 작업해야 한다. 하지만 이 데이터는 나중에 데이터를 분류하기 위한 훈련용 데이터 세트다. 지도 학습에는 고려해야 할 사항이 있다. 그중 하나가 편향-분산 딜레마(bias-variance dilemma)다. 즉, 머신 러닝 모델이 어떻게 여러 다른 훈련용 데이터 세트를 사용하여 정확하게 학습을 수행할 것인 가다. 고편향 모델은 잘못된 가정으로 제한된 수의 학습데이터 세트로 얻은 특징과 결과 간의 관 계를 놓치는(과소적합) 반면, 고분산 모델은 학습데이터 세트의 작은 변동으로 노이즈(noise)가 섞 인 복잡한 데이터 세트를 포함한다(과적합). 두 모델의 관계는 서로 상충된다. 핵심은 언제 어떤 종류의 모델을 사용하는가와 두 모델을 모두 사용하여 서로의 단점을 보완하고 장점을 부각하는 적절한 지점(둘 모두를 사용하여 최대의 효과를 얻을 수 있는 지점)을 찾아내는가다.
비지도 학습 비지도 학습(unsupervised learning)은 알고리즘으로 데이터에 숨겨진 패턴을 찾는다. 비지도 학습에 는 정답도 오답도 없다. 그저 머신 러닝 알고리즘을 실행하고, 어떤 패턴과 결과가 나오는지 지켜 본다. 비지도 학습은 실제 머신 러닝보다는 데이터 마이닝의 사례에 가깝다. 만일 클러스터링 데이터를 분석한다면 사전에 훈련된 인공신경망보다 비지도 학습에 많은 시간을 보낼 가능성이 높다.
1.3
M a c h i n e
L e a r n i n g
인간의 개입
결과도 변하고, 데이터도 변하고, 요구 사항도 변한다. 머신 러닝은 한 번 만들고 끝내는 솔루션이 아니다. 또한, 알고리즘을 작성하는 데는 인간의 수고와 직관이 필요하다. 아서 사무엘의 체커 프 로그램은 인간이 이미 가르친 것을 스스로 개선시켰다. 즉, 컴퓨터는 인간이 없으면 시작할 수 없 으며, 기본적인 지식을 기반으로 만들어진다. 바로 그 점을 기억하라. 029
����.indd 29
2016-04-18 �� 5:49:52
나는 이 책을 통해 “질문을 갖는 것이 중요하다.”라고 여러분에게 말하고 싶다. 질문은 데이터 프 로젝트의 초석으로, 열린 토론을 하고, 계획을 세우는 것으로 시작된다(2장 “머신 러닝 계획하기” 에서 더 자세히 설명하겠다). 머신 러닝에 데이터를 던져 놓고, 바로 직관을 얻는 일은 거의 없다.
1.4
M a c h i n e
L e a r n i n g
머신 러닝의 활용
머신 러닝으로 무엇을 할 수 있을까? 정말로 많은 것을 할 수 있다. 이 절에서는 머신 러닝이 어떻 게 사용되는지 세부적으로 나눠 설명하겠다.
소프트웨어 많은 소프트웨어가 머신 러닝을 이용하여 사용자에게 개선된 경험을 제공한다. 소프트웨어는 사 용자가 처음 사용한 이후 사용자의 행동을 배운다. 그리고 소프트웨어를 일정 기간 사용한 다음에 는 사용자가 원하는 것을 예측하기 시작한다.
스팸 탐지 스팸 메일 탐지는 베이지안 분류 필터(Bayesian classification filter)를 사용하는 좋은 예다. 구글 메일의 스팸어쌔신(SpamAssassin) 이후 메일이 스팸인지 아닌지를 알아내는 학습 형식이 몇 가지 생겨났다. 스팸 탐지는 머신 러닝의 고전적인 용도 중 하나로 시간이 지나면서 알고리즘이 더욱 개선되고 있 다. 현재 사용하는 이메일 프로그램을 생각해보라. 이메일 프로그램은 수신한 메일이 쓰레기라고 판단되면 진짜 쓰레기인지 아닌지 사용자에게 확인한다. 사용자가 스팸으로 지정하면 시스템은 그 메일 메시지와 경험으로부터 학습한다. 그리고 이후의 메시지는 보다 정확하게 처리된다.
030
����.indd 30
2016-04-18 �� 5:49:52
1
음성 인식
머신 러닝이란 무엇인가?
많은 iOS 기기에 탑재된 애플의 시리(Siri) 서비스는 머신 러닝의 또 다른 예다. 사용자가 시리에게 무언가를 부탁하면 시리는 사용자가 원하는 대로 작업을 수행한다. 예를 들면, 트윗 메시지나 문 자 메시지를 보내거나 일정을 설정한다. 무엇을 원하는지 잘 모를 때는 사용자가 말한 문구를 구 글에서 검색한다. 시리는 기기와 클라우드 기반의 통계 모델로 사용자의 말과 명령을 분석하여 기기가 수행할 수 있 는 동작으로 응답하는 매력적인 서비스다.
주식 매매 더 나은 주식 매매를 지원하는 플랫폼이 많이 있다. 이런 플랫폼은 많은 분석과 계산을 수행하여 매매를 추천한다. 머신 러닝의 관점으로 현재 가격에서 매수할 것인지 혹은 매도할 것인지를 결정 한다. 플랫폼은 과거 일자별 시가와 종가, 매수 매도 거래량을 고려하여 판단한다. 머신 러닝 알고리즘은 네 가지 정보(저가, 고가, 일자별 시가, 종가)를 통해 주가의 추세를 학습할 수 있다. 이를 포트폴리오 내 모든 주식에 적용하면 매수 혹은 매도 결정을 도울 시스템이 된다. 비트코인(Bitcoin) 거래는 알고리즘 트레이딩의 좋은 예다. 가상 화폐는 시장이 기꺼이 지불하려는 가격과 기존 비트코인 보유자가 팔려는 가격을 기준으로 거래된다. 한편 미디어는 여러 가지 초고속 알고리즘 매매에 관심을 갖고 있다. 알고리즘 예측에 기반하여 초당 수천 건의 매매를 처리할 수 있다는 것은 매우 매력적인 이야기다. 이런 시스템을 주요 주식 거래소 근처에 두기 위해 어마어마한 돈을 쏟아 붓고 있다. 1/1000초라도 네트워크 속도가 지연 되어 주문이 제때 접수되지 못하면 매매에서 수백만 달러의 손실이 생길 수도 있기 때문이다. 주식 매매의 약 70%가 사람이 아닌 기계를 통해 이루어진다. 모든 상황이 정상적인 경우 기계는 잘 작동한다. 그러나 문제가 생기면 결함을 발견할 때까지 수 분이 걸릴 수 있다. 그리고 그 수 분 사이에 많은 거래가 일어난다. 2010년 5월 다우존스 산업지수(Dow Jones industrial average)가 600포 인트나 급락한 플래시 크래시(flash crash) 사건이 좋은 예다.
031
����.indd 31
2016-04-18 �� 5:49:52
로보틱스 로봇은 머신 러닝을 사용하여 기술을 획득하거나 작업 환경에 적응할 수 있다. 자동화된 학습 또 는 인간이 개입된 학습을 통해 물건을 배치하거나, 잡거나, 이동하는 기술을 습득한다. 로봇에 장착하는 센서를 늘리는 동시에 기타 알고리즘을 로봇 내에서 처리하지 않고 외부에서 처 리하면 더 많은 분석을 할 수 있다.
의학과 헬스 케어 머신 러닝을 통해 건강을 관리하는 시스템이 경쟁적으로 개발되고 있다. 수많은 스타트업이 빅테 이터와 머신 러닝을 긍정적으로 사용하려고 한다. 이를 통해 헬스 케어 전문가들은 좋은 데이터를 바탕으로 더 나은 의사결정을 할 수 있다. 유명한 IBM의 왓슨(Watson)2 슈퍼컴퓨터는 한때 TV 퀴즈쇼 제퍼디(Jeopardy)에 출연하여 인간 경쟁 자 두 명을 제치고 우승했다. 지금은 의사들을 돕기 위해 사용되고 있다. 의사들은 이제 클라우드 서비스인 왓슨을 사용하여 수백만 페이지의 의학 보고서와 수십 억 건의 의학적 근거에 관한 정보 에 접근할 수 있다. 폭넓은 건강 정보(체중, 심박수, 맥박, 걸음수, 혈압, 심지어 혈당 수준까지)를 수집하는 스마트폰 과 관련 기기를 사용하는 수많은 소비자 덕분에 이제 정기적으로 건강 상태를 추적하고 시시각각 패턴을 보는 것이 가능해졌다. 머신 러닝 시스템은 기기를 통해 사용자의 건강을 위한 더 나은 대 안을 추천할 수 있다. 데이터 분석이 쉬워졌다고 해도 건강 정보와 같은 프라이버시를 보호하는 것은 다른 얘기다. 분 명 어떤 사람은 자신의 데이터를 어떻게 사용하는지 걱정하고, 특히 정보가 제 3자에게 넘어가 악 용되지 않을까 더더욱 우려한다. 헬스 케어와 의학 분야에서는 데이터의 양이 매일매일 증가하고, 분석량과 종류도 비례적으로 점증한다. 사생활 논쟁은 이후 알고리즘이 궁극적으로 어떻게 사용 되어야 할지를 결정하는 요소가 될 것이다.
2 참고자료: IBM 왓슨, 어떻게 의료플랫폼이 되는가(http://hrmac.tistory.com/1558)
032
����.indd 32
2016-04-18 �� 5:49:52
1
광고
머신 러닝이란 무엇인가?
회사는 제품을 생산하고 서비스를 제공하면서 소비자가 자신의 제품을 구매하도록 유도해왔다. 마케팅 부서는 1995년 이후 인터넷을 통해 TV나 대형 전단지 없이 소비자에게 직접 광고할 수 있게 되었다. 사용자를 추적하기 위해 컴퓨터에 숨겨진 쿠키를 기억하는가? 브라우저에서 쿠키를 차단하는 것이 한때 큰 뉴스거리였다. 로그 파일 분석(log file analysis)은 광고 회사가 소비자의 관심을 알아보기 위해 사용하는 또 다른 무
기다. 로그 파일 분석은 결과를 모으고, 특정 제품의 관심도에 따라 사용자 그룹을 나눌 수 있다. 로그 파일 분석, 모바일 위치, 여러분을 하나의 그룹으로 묶어 겨냥한 광고를 해오고 있다. 이런 종류의 광고가 사생활 침해로 여겨진 시기도 있었다. 그러나 점차 그런 생각이 무뎌져 이제 어떤 사람들은 오히려 어느 장소에 체크인하고 자신의 도착을 알리는 것을 즐기기까지 한다. 그러 나 나의 활동을 친구들만 안다고 생각한다면 다시 생각해보라. 사실 많은 회사가 나의 활동을 관 찰하고 있다. 광고업자는 소비자를 관찰하고 분석하여 특정 날짜에 어디에 있을 것인지 알아내고, 가는 길에 광고 전단지를 뿌린다.
소매업과 전자 상거래 머신 러닝은 소매업 분야인 전자 상거래와 전통 소매업에서 널리 사용되고 있다. 대표적인 사례가 회원 카드다. 회원 카드를 발급한 소매업자는 카드로부터 나오는 데이터를 이해하려고 애를 쓴다. 예전에 이를 분석하려는 회사와 일을 한 적이 있어서 슈퍼마켓이 겪는 어려움을 알고 있다. 영국의 대형 슈퍼마켓인 테스코(Tesco)는 고객 회원 프로그램에 관해서는 선두 주자다. 테스코 회 원 카드는 널리 애용되어 고객의 구매 결정에 관한 넓은 시야를 테스코에 제공한다. 데이터를 포 스(POS) 단말에서 취합하여 데이터 웨어하우스로 보낸다. 고객 회원 프로그램을 운영하던 초창기 에는 데이터가 너무 많아서 신속히 처리할 수 없었다. 시간이 흘러 처리 기술이 개선되었고, 테스 코와 마케팅 회사인 던 험비(Dunn Humby)는 고객의 행위와 구매 습관을 이해하고, 평소 사용하던 것과 유사한 제품을 사도록 판촉하는 좋은 전략을 개발해왔다. 미국의 타깃(Target)이라는 회사는 메일링, 웹사이트 방문, 심지어 매장 내 동선을 포함하여 모든 고객의 브랜드 관여도를 추적할 수 있는 회원 프로그램을 운영하고 있다. 타깃은 데이터 웨어하우 스에서 고객과의 소통 방법을 올바르게 맞춤 조정할 수 있다. 예를 들어 브랜드를 노출할 때는 구
033
����.indd 33
2016-04-18 �� 5:49:52
매 의사를 가진 적합한 고객에게 보여주는 식이다. 타깃은 모든 고객이 이메일이나 문자 메시지를 원하는 것은 아니라는 것도 안다. 어떤 사람은 아직도 우편 서비스를 선호한다. 소매업에서는 분명 머신 러닝을 사용하고 있다. 장바구니를 분석하고 고객을 세분화하는 것은 고 객과 제대로 된 메시지로 소통하기 위한 중요한 과정이다. 반면, 너무 정확하여 골치를 썩일 수도 있다. 빅데이터에 내재된 사생활 침해 문제로 언론에 널리 알려진 타깃의 ‘베이비 클럽(baby club)’ 사건은 인간이 습관의 동물이고, 습관이 바뀌면 머신 러닝이 알아낸다는 것을 보여준다.
Note
타깃의 사생활 침해 문제
타깃에서 일하던 통계학자 앤드류 폴(Andrew Pole)은 장바구니 데이터를 분석하여 고객의 임신 여부를 알 수 있는 지 확인했다. 타깃은 관련 제품을 선택하고 분석에 사용하여 임신 예측 점수를 개발했다. 새롭게 마련된 분석 점수에 따라 임신했으리라 예측한 고객에게 베이비 쿠폰을 보냈다. 아무런 문제가 없었다. 한 아버지가 십대인 딸에게 베이비 쿠폰을 보낸 것을 항의하기 전까지는 말이다. 임신한 딸이 아버지에게 임신 사실을 털어놓기도 전에 타깃은 소녀의 임 신을 예측했다는 게 밝혀진 셈이다.
머신 러닝의 긍정적인 활용 사례는 도시전설처럼(사실이 아닌 이야기가 사실인 것처럼) 좋은 활용 사례가 구전되고 있다. 예를 들어, 월마트와 다른 대형 소매점과 관련하여 ‘맥주와 기저귀’ 이야기 를 들어보았을 것이다. 금요일에는 맥주와 기저귀의 판매가 둘 다 증가하는데, 이것은 엄마는 외 출하고 아빠는 맥주와 기저귀를 쌓아놓고 있음을 의미한다. 이 이야기는 지어낸 것이다. 그러나 마케팅 회사는 여전히 데이터를 통해 뭔가 알고 싶어 하는 회사들에게 이 도시전설(사실이라고 믿 도록 하면서)을 계속 들려주고 있다. 또 헤비메탈 밴드 ‘아이언 메이든(Iron Maiden)’이 비트 토런트(bit-torrent) 데이터를 분석하여 어느 나 라에서 자신들의 음악을 불법으로 다운로드했는지 알아내 그곳으로 날아가 콘서트를 연다는 이야 기도 있다. 마케터와 언론은 이 이야기를 듣고 빅데이터와 머신 러닝에 열광하였다. 그러나 슬프 게도 지어낸 이야기다. 앞으로 이런 일이 일어나지 않을 것이라고 장담할 순 없다. 아직 일어나지 않았을 뿐이다.
게임 분석 앞서 체커가 머신 러닝의 좋은 후보라는 것을 보았다. 이 오래된 컴퓨터 게임을 기억하는가? 사람 이 말을 움직이면 컴퓨터도 말을 이동시킨다. 이것이 머신 러닝 계획 알고리즘의 사례다. 수십 년 을 빠르게 감아서 현재로 돌아오면 여러분이 좋아하는 게임을 할 때마다 콘솔 게임 시장은 분석 데이터를 쏟아낸다. 034
����.indd 34
2016-04-18 �� 5:49:52
1
마이크로소프트(Microsoft)는 헤일로 3(Halo 3)에서 얻은 데이터를 분석하여 플레이어가 어떤 레벨
머신 러닝이란 무엇인가?
에서 어떻게 플레이하고 언제 치트(cheats)를 사용하는지 알아냈다. 마이크로소프트는 콘솔에서 얻 은 데이터의 분석을 기반으로 수정판을 만들어 배포했다. 마이크로소프트는 또한 드라이바타(Drivatar)에서도 같은 작업을 했다. 이 게임 구성 요소는 드라이 빙 게임인 ‘포르자 모터스포츠(Forza Motorsport)’에 포함되어 있다. 플레이어가 처음 게임을 시작할 때 시스템은 플레이어의 운전 습관에 대해 아무것도 모른다. 몇 번의 시험 운전 후 시스템은 운전 스타일, 일관성, 코너링 스피드, 트랙에서의 위치 선정 등을 학습한다. 샘플링은 세 바퀴 동안 이 루어진다. 이 시간은 플레이어의 프로필을 알기에 충분한 시간이다. 샘플링을 하는 동안 시스템은 계속 운전 패턴을 학습한다. 세 바퀴 뒤 운전 스타일을 학습하면 게임은 새로운 레벨을 열어 플레 이어가 다른 운전자와 경쟁을 벌이도록 한다. 만약 아이가 있다면 닌텐독스로 화면의 애완동물을 돌보며 좋아하는 아이의 모습을 지켜볼지도 모른다(타마고치(Tamagotchi)의 대형 버전이라고 생각하면 된다). 알고리즘은 반려동물이 언제 놀 고 싶어 하고, 주인에게 어떻게 반응하고, 얼마나 배고픈지를 알려준다. 게임 회사에서 더 훌륭한 게임을 만드는 기반으로 머신 러닝을 생각하는 수준은 아직 초기 단계 다. iOS나 안드로이드와 같은 작은 기기용 게임이 많아짐에 따라 실제 학습은 어떻게 해야 플레이 어가 게임으로 되돌아와 더 오래 게임을 할 것인가에 집중되어 있다. 즉, 게임에 몰입시키기 위해 분석한다. 플레이어가 다시 게임으로 돌아오는가? 아니면 다른 게임에 빠져 그만두는가? 특히 작 은 기기일수록 머신 러닝과 게임 성능은 서로 상반된다. 높은 수준의 머신 러닝은 기기에서 메모 리를 더 많이 사용한다. 때때로 게임 내에서 학습할 수 있는 내용의 한계를 고려해야 한다.
사물인터넷 온갖 종류의 데이터를 수집할 수 있는 네트워크에 연결된 기기가 도처에 널려 있다. 장치 간 통신 이 새로운 것은 아니지만 최근까지 대중의 관심을 얻지는 못했다. 제조와 유통의 문턱이 낮아진 덕분에 산업 현장뿐만 아니라 집에서도 사용된다. 사물인터넷(Internet of Things)은 홈 오토메이션, 쇼핑, 에너지 소비량 계측 등에 이용된다. 이런 활 용은 초기 단계다. 그리고 모바일 기기의 위치 정보와 마찬가지로 보안 측면에서 아직 많은 우려 가 있다. 기업은 고유 ID로 기기를 정확히 집어내어 사용자와 연결할 수 있다.
035
����.indd 35
2016-04-18 �� 5:49:52
기기의 센서에서 나오는 데이터가 결과물이다. 데이터가 충분해서 머신 러닝하기에는 좋은 기회 다. 집이 주변 온도를 감지하도록 만드는 것만큼 간단하다. 예를 들어 너무 더운가 아니면 너무 추 운가? 지금은 사물인터넷의 초기 단계다. 그럼에도 불구하고 흥미로운 결과물로 이어진 많은 기저 작업 (groundwork)이
있다. 아두이노(Arduino)와 라즈베리파이(Raspberry Pi) 컴퓨터로 움직임, 온도, 소리
같은 것을 감지하고 분석용 데이터를 뽑아내는 일은 상대적으로 저렴한 비용으로 시작할 수 있다.
1.5
M a c h i n e
L e a r n i n g
머신 러닝을 위한 프로그래밍 언어
이 책의 실습 예제는 자바(Java)를 사용한다. 이유는 단순하다. 널리 사용되고 라이브러리를 잘 지 원하기 때문이다. 머신 러닝에 자바만 사용되는 것은 아니다. 오히려 자바는 머신 러닝과는 거리 가 있다. 회사에 속해 일한다면 선택의 폭이 제한될 수도 있을 것이다. 대부분의 언어에는 기능적으로 겹치는 부분이 많다. 자바가상머신(JVM)에 접근하는 언어를 사용 하면 자바 기반 라이브러리에 접근할 수 있다. 특정 프로그래밍 언어가 다른 언어보다 좋다는 것 은 아니다. 작업에 맞는 도구를 선택하면 된다. 이 절에서는 머신 러닝에 사용할 수 있는 몇 가지 프로그래밍 언어를 소개한다.
파이썬 파이썬(Python)은 배우기 쉽고, 이해하기 쉬워 사용자가 많이 늘고 있다. 파이썬에는 scikit-learn, PyML, pybrain 같은 훌륭한 머신 러닝 라이브러리가 있다. Jython은 JVM을 위한 파이썬으로 공 부할 만한 가치가 있다.
036
����.indd 36
2016-04-18 �� 5:49:52
1
R
머신 러닝이란 무엇인가?
R은 오픈 소스 통계 프로그래밍 언어다. 문법이 배우기 쉬운 건 아니지만 한 번 살펴보기를 바란 다. R에는 머신 러닝과 시각화를 위한 도구가 많이 있다. rJava 프로젝트를 사용하면 자바 코드에 서 R의 함수를 사용할 수 있다. R에 대한 기본적인 개요는 12장에 설명하겠다.
매트랩 매트랩(Matlab)은 기술 컴퓨팅과 알고리즘 개발을 위해 학계에서 널리 사용되고 있다. R과 마찬가 지로 그래프를 작성하고 시각화하기에 편리하다.
스칼라 자바의 런타임 환경을 이용한 새로운 언어들이 떠오르고 있는데, 이 언어들은 플랫폼의 스레딩 아 키텍처에 기반하여 성능을 높였다. 스칼라(Scala, Scalable Language의 약자)도 이 중 하나로 많은 스타트업에서 사용된다. ScalaNLP와 같은 머신 러닝 라이브러리가 있으며, 자바의 jar 파일에 접근할 수 있다. 물론 Classifier4J와 머하웃(Mahout)도 실행할 수 있다. 스칼라는 11장에 나오는 아파치 스파크(Apache Spark)
프로젝트의 핵심이다.
클로저 클로저(Clojure)는 또 다른 JVM 기반 언어로, 리스프(Lisp) 프로그래밍 언어의 일종이다. 클로저는 동시성(concurrency)을 위해 디자인된 언어로 대량의 데이터를 머신 러닝에 적용하기에 좋다.
037
����.indd 37
2016-04-18 �� 5:49:52
루비 많은 사람이 웹 개발 프레임워크로 루비 온 레일즈(Ruby On Rails)의 루비(Ruby)를 떠올린다. 그러나 루비는 단독으로 사용하는 언어다. 머신 러닝과 루비를 통합하는 좋은 방법은 JRuby다. JRuby는 JVM을 기반으로 하는 여러 언어 중 하나며, 자바 머신 러닝 라이브러리에 접근할 수 있다.
1.6
M a c h i n e
L e a r n i n g
이 책에서 사용한 소프트웨어
이 책의 실습 예제에서는 알고리즘과 머신 러닝을 위해 많은 소프트웨어와 패키지를 사용한다. 접근하기 쉬운 폴더를 하나 만들고 거기에 모든 패키지를 설치하라. 나는 ‘mlbook’이라는 폴더를 사용할 것이다. $mkdir ~/mlbook $cd ~/mlbook
자바 버전 확인하기 이 책의 프로그램은 자바를 사용하므로 자바의 버전을 확인해야 한다. 프로그램은 자바 1.6 이상 의 버전이 필요하다. 버전을 확인하려면 터미널(명령 프롬프트)을 열고 다음을 실행한다. $ java -version java version "1.7.0_40" Java(TM) SE Runtime Environment (build 1.7.0_40-b43) Java HotSpot(TM) 64-Bit Server VM (build 24.0-b56, mixed mode)
1.6 이전 버전을 사용하고 있다면 버전을 업그레이드하라. 다음 사이트에서 현재 버전을 다운로 드할 수 있다. ●●
www.oracle.com/technetwork/java/javase/downloads/index.html
038
����.indd 38
2016-04-18 �� 5:49:52
1
웨카 툴킷
머신 러닝이란 무엇인가?
웨카(Weka, Waikato Environment for Knowledge Acquisition)는 뉴질랜드의 와이카토대학교(University of Waikato)에서
자바로 만든 머신 러닝과 데이터 마이닝 툴킷이다. 워크벤치(workbench) 프로그램이나
명령줄 도구를 이용하여 학습과 시각화 도구를 제공한다. 웨카는 JDBC 드라이버로 기존 데이터 소스에서 데이터를 가져올 수 있다. 웨카를 통해 다음과 같은 작업을 할 수 있다. ●●
데이터 전처리(Preprocessing data)
●●
클러스터링(Clustering)
●●
분류(Classification)
●●
회귀 분석(Regression)
●●
연관 규칙(Association rules)
웨카 툴킷은 널리 사용되며, 현재는 하둡과 연결하여 빅데이터에 접근하는 것을 지원한다. 하둡 은 데이터 마이닝(클러스터링)을 하는 분산 처리 시스템이다. 웨카는 와이카토대학교의 웨카사이 트(www.cs.waikato.ac.nz/ml/weka/downloading.html)에서 다운로드할 수 있으며, 리눅스, Mac OS X, 윈도 버전을 이용할 수 있다. 리눅스에서 웨카를 설치하려면 디렉터리에서 받은 zip 파일 을 풀어야 한다. Mac OS X과 윈도에서는 설치 프로그램이 제공되어 필요한 모든 프로그램의 압 축을 풀어줄 것이다.
머하웃 머하웃 머신 러닝 라이브러리는 아파치 프로젝트의 일환인 오픈 소스 프로젝트다. 머하웃의 핵심 기능은 확장성(scalability)이다. 머하웃은 단독으로 또는 클러스터(많은 기계를 클러스터링해둔)상에 서 작동한다. 머하웃은 하둡맵/리듀스와 통합하여 대규모로 처리가 가능하다. 머하웃은 다음과 같이 많은 알고리즘을 제공한다. ●●
나이브베이즈 분류기(Naive Bayes Classifier)
●●
K Means 클러스터링(K Means Clustering)
●●
추천 엔진(Recommendation Engines)
●●
랜덤 포레스트 의사결정트리(Random Forest Decision Tree)
●●
로지스틱 회귀 분류기(Logistic Regression Classifier) 039
����.indd 39
2016-04-18 �� 5:49:52
머하웃은 웨카와 달리 별다른 워크벤치 프로그램을 제공하지 않는다. 그러나 프로젝트에 머신 러 닝 라이브러리 코드를 통합할 수 있다. 기존 데이터에 적용할 수 있는 수많은 예제가 있으며, 많은 프로그램을 바로 사용할 수 있다. 머하웃은 다음 사이트에서 다운로드할 수 있다. 독립 플랫폼이므로 운영체제별로 제공하지 않고 다운로드 하나만 제공한다. 머하웃을 설치하려면 디렉터리에 압축을 풀고 해당 디렉터리를 경로 에 추가하여 실행한다. ●●
www.apache.org/dyn/closer.cgi/mahout
스프링 XD 웨카와 머하웃은 알고리즘과 알고 싶어 하는 지식을 만들어내는 데 집중되어 있는데, 데이터를 얻 고 처리하는 것에 대해서도 생각해봐야 한다. 스프링 XD(Spring XD)는 가공되지 않는 데이터를 읽고, 처리하고, 저장하는 ‘데이터 처리 엔진’이 다. 프로세싱 유닛을 만들 수 있어 상당한 수준까지 커스터마이징할 수 있다. 또한, 앞서 말한 모 든 도구와 통합이 가능하다. 스프링 XD는 최근에 나왔지만 확실히 유용하다. 스프링 XD는 인터넷 기반의 데이터와 잘 맞을 뿐만 아니라 클러스터링된 컴퓨터 사이에 네트워크와 시스템 메시지를 소화할 수 있다. 스프링 XD 배포본은 다음 사이트의 ‘Quick Start’ 섹션에서 zip 파일로 다운로드하면 된다. zip 파 일을 다운로드하면 디렉터리에 압축을 푼다. 스프링 XD의 사용법은 9장 “스프링 XD로 하는 실 시간 머신 러닝”에서 자세하게 설명하겠다. ●●
http://projects.spring.io/spring-xd/
하둡 전기도 없고 인터넷도 연결되지 않는 곳에 사는 것이 아니라면 빅데이터의 구세주인 하둡(Hadoop) 을 들어보았을 것이다. 하둡은 빅데이터를 처리하는 데 매우 좋지만 반드시 필요한 도구는 아니 다. 이 책에서는 10장 “배치 처리로 하는 머신 러닝”에서 하둡을 살펴보겠다.
040
����.indd 40
2016-04-18 �� 5:49:53
9
장
스프링 XD로 하는 실시간 머신 러닝
9.1 데이터 파이어호스 잡기 9.2 스프링 XD 사용하기 9.3 트위터 데이터로부터 배우기 9.4 스프링 XD 설정하기 9.5 스프링 XD와 트위터 9.6 프로세서 소개하기 9.7 실시간 감성 분석 9.8 요약
����.indd 237
2016-04-18 �� 5:50:14
이 글을 읽고 있는 지금 얼마나 많은 데이터가 만들어지고 있을지 생각해보라. 앞으로도 많은 데 이터가 통찰력과 유용성을 얻기 위해 생성되고, 처리되고, 저장될 것이다. 예를 들어 가정에서 사 용하는 온도 측정기는 끊임없이 업데이트되거나 여러 소셜 미디어 플랫폼에서 데이터를 받는다. 실시간으로 생산되는 데이터에는 많은 잠재력이 있다. 실시간으로 데이터를 수집하고, 처리하고, 저장하여 학습하기는 어려운 일이지만, 최근 인기를 얻고 있는 도구를 사용하면 좀 더 쉽게 해결 할 수 있다. 이 장에서는 트위터의 스트리밍 애플리케이션 프로그래밍 인터페이스(Application Programming Interface, API)를
사용하여 실시간으로 데이터를 처리하는 스프링 XD를 다뤄볼 것이다. 예제를 통
해 트위터의 유입 데이터(tweets)를 실시간으로 분석하는 스프링 XD 프로세서를 만들어보겠다.
9.1
M a c h i n e
L e a r n i n g
데이터 파이어호스 잡기
스트리밍 데이터를 끊임없이 제공하는 기업들은 스트리밍 데이터를 종종 ‘파이어호스(the firehose)’ 라고 부른다. 데이터는 물처럼 흘러나오며, 원하는 데이터를 잡아 처리하는 것은 수신하는 사람의 몫이다. 데이터를 사용하려는 사람은 사용하기 전에 데이터 공급자의 이용 약관에 동의해야 할 때 도 있다.
실시간 데이터 사용 시 고려 사항 당장 책상으로 달려가 트위터 전체의 파이어호스를 수집하는 실시간 애플리케이션을 만들기 전에 실시간이 원활한지 고려해야 한다. 실시간으로 이용 가능하다는 사실이 항상 사용할 수 있음을 의 미하지는 않기 때문이다. 금융 서비스 회사는 고객이 주식을 매매할지 매매하지 않을지 결정하도록 도움을 주는 데 실시간 데이터를 사용한다. 매수 또는 매도는 천분의 1초(millisecond) 안에 결정해야 한다. 다른 주식 트레 이더가 얼마나 많은 거래를 일으켰을지 생각해보면 10초, 20초 이상 지난 경우는 처리할 가치가 없다. 그동안 가격은 수없이 바뀌었을 것이다.
238
����.indd 238
2016-04-18 �� 5:50:14
전자 상거래 사이트는 고객 추천 서비스에 머신 러닝을 이용하여 3, 6, 12시간 심지어 24시간 간 격으로 매매 내역을 배치 처리한다. 많은 거래를 배치 처리하면 몇 가지 장점이 있는데, 이는 10 장에서 상세히 다루겠다. 인메모리(in-memory) 프로세싱은 기존의 느린 2차 데이터 저장도 필요 없고, SQL 기반의 정보 산 업 시스템에서 흔히 사용되는 추출-변환-로드(Extra-Transform-Load, ETL)라는 전통적인 프로세스를 벗어난 새로운 처리 시스템이다. 또 다른 고려 사항은 스토리지 크기다. 모든 데이터를 저장해야 하는가? 가공된 데이터를 저장하 는 게 목적에 부합하는가? 나중을 위해 원본 데이터를 저장할 필요가 있는가? 스토리지 비용이
9 스프링 XD로 하는 실시간 머신 러닝
감소하는 것(무어의 법칙)은 사실이지만, 여전히 고려해야 할 주요 요소는 비용이다. 데이터를 어 떻게 저장할 것인가? 어디에 저장할 것인가? 데이터를 클라우드(예를 들어, Amazon S3 버킷)에 저장한다면 외부 노출 문제는 없을까? 데이터의 안정성(백업과 복원 서비스 수준)과 데이터 보안 을 고려해보았는가? 컴퓨팅 속도의 발전, 저장 비용의 감소, 다양해진 고성능-저비용 데이터베이스 시스템 덕분에 미 래를 대비한 저장소를 여럿 사용하지 않을 이유가 없게 되었다. MySQL과 같은 전통적인 관계형 데이터베이스나 HBASE, Neo4j, 아파치 지래프(Apache Giraph)를 고려해볼 수 있다. 데이터의 수명 주기, 사용 사례, SQL과 NoSQL 시스템(http://martinfowler.com/books/nosql.html)의 장 점과 목적 등을 생각해보자.
실시간 시스템의 활용 가능성 실시간 데이터 시스템의 응용 분야는 매우 광범위하다. 소셜 미디어와 모바일 데이터가 증가하면 서 실시간 시스템이 제공하는 즉시 연결성, 추천 서비스 등이 점점 중요해지고 있다. 위치 기반의 타깃 광고는 실시간 분석의 좋은 사례다. 위치 기반 타깃 광고는 소비자의 위치에 따라 실시간 상 황(예를 들어, 날씨, 교통, 시간, 일자, 현지 속보)을 찾아 제공하는 시스템이다. 금융 거래도 실시간 처리를 사용하기에 좋은 분야임을 앞에서 설명했다. 기업은 알고리즘 트레이 딩을 사용하여 극한의 속도로 매매할 수 있는 실시간 알고리즘 개발에 어마어마한 투자를 하고 있 으며, 그 결과 초당 수천 건의 매매를 계산하고 실행한다. 여기에 사용할 수 있는 알고리즘은 꽤 많 다. 어떤 시스템은 뉴스 머리기사와 트위터 글을 고려하여 내용의 감성에 따라 매매하기도 한다. 이러한 시스템들은 성공의 정도가 각각 다르다. 결제와 사기 탐지 알고리즘은 실시간으로 금융 거 래를 분석하여 문제가 있는 거래가 발생할 때마다 알려준다. 처리 능력이 증가함에 따라 기업은 이 전의 거래 내역, 위치, 구매 행위와 같은 더 많은 변수를 실시간으로 수용할 수 있게 되었다. 239
����.indd 239
2016-04-18 �� 5:50:14
최종 사용자나 시스템에 대화형 응답이 필요한 경우 실시간 시스템을 고려하면 좋다. 데이터를 메 모리에 단독으로 저장하면 속도가 더 빨라진다. 2차 스토리지는 빠르게 복구해야 하는 경우, 메모 리 시스템을 다시 시작해야 하는 경우, 훈련보다 더 큰 데이터에 대해 심도 깊은 훈련이 필요한 경 우에만 사용되어야 한다.
9.2
M a c h i n e
L e a r n i n g
스프링 XD 사용하기
이 장에서는 실시간 처리를 위해 만들어진 스프링 XD 프레임워크를 사용한다. 스프링 XD의 목 표는 데이터 수집, 가공, 내보내기를 간단하게 처리하는 것이다.
Note
데이터 수집은 다양한 데이터 소스를 참조하는 것을 가리키므로 로그 데이터, 트위터 스트림, RSS 피드
등을 한번에 처리하는 데 문제는 없다.
스프링 XD는 단일 서버 또는 분산 환경의 클러스터에서 실행된다. 이 장의 예제는 단일 서버를 사용한다. 스프링 XD는 아파치 2 라이선스(Apache 2 License)가 적용된 완전한 오픈 소스이므로 자 유롭게 다운로드하여 제한 없이 사용할 수 있다. 스프링은 기본 배포본만으로 일반적인 활용을 포 함한 대부분의 작업을 훌륭히 처리한다. 기본 배포본은 최소한의 노력으로 신속하게 실시간 분석 을 구축하는 방법을 보여주는 좋은 출발점이다. 유닉스의 pipe 명령이 어떻게 작동하는지 알고 있다면 스프링 XD의 작동 방식도 이해하기 쉬울 것이다. 유닉스 pipe 명령에 익숙하지 않다면 이후 내용을 계속 읽어보라. 유닉스와 스프링 XD에 서 기본적인 파이프라인 명령과 데이터 스트리밍이 어떻게 작동하는지 설명할 것이다.
스프링 XD 스트림 스프링 XD 시스템은 유닉스 파이프라인과 비슷하다. 끝없는 텍스트 스트림을 필터링한 뒤 여러 가지 방식으로 조작하여 다음 명령에 스트림을 전달한다. 예를 들어 유닉스에서 하나 이상의 텍스
240
����.indd 240
2016-04-18 �� 5:50:14
트 파일 내 문자, 단어, 문장의 빈도수를 계산하려면 cat(concatenate and print) 명령을 실행하고, 그 스트림을 파이프라인으로 wc(word count) 명령에 전달한다. cat *.txt ┃ wc
이런 개념에서 한 단계 더 나아가 결과에 레이블을 붙일 수 있다. cat *.txt ┃ wc ┃ sed 's/^/(lines, words, characters) =/'
스프링 XD 스트림은 유닉스 파이프라인 명령과 비슷한 방식으로 스트리밍한다. 서버는 입력 데
9
이터를 읽고 단계별로 처리한 뒤 그 결과를 특정 목적지로 보낸다. 처리 단계는 선택 사항이지만,
스프링 XD로 하는 실시간 머신 러닝
머신 러닝 작업의 데이터 프로세싱에 매우 유용하다. 스트림 하나에 프로세싱 한 단계로 제한되지 는 않는다. 프로세싱은 데이지 체인1 방식으로 스트림에 연결된다. 이 장 후반부에서는 스트림을 설정하고 처리하는 방법을 연습해볼 것이다. 우선 파이프라인 스트 림의 핵심 요소와 이를 스프링 XD가 어떻게 사용하는지 알아보자.
입력 소스, 싱크, 프로세서 스프링 XD 스트림의 주요 구성 요소는 세 가지, 즉 입력 소스, ‘싱크(sink)’라고 부르는 출력, 선택 적인 프로세서다.
입력 소스 XD 시스템은 스프링 통합 어댑터(Spring Integration Adaptor)를 사용하여 다양한 입력 소스를 제공한 다. 이 입력 소스는 인터넷 기반 프로토콜, 내부 로그 출력 도구, 파일 처리 명령에 활용할 수 있 다. 표 9-1은 여러 종류의 입력 소스를 요약한 것이다.
1 역주 데이지 체인(daisy chain): 데이지 체인이란 연속하여 연결되어 있는 하드웨어 장치의 구성을 말한다. 어떤 장치 A가 B라는 장치에 연결
되어 있고, B라는 장치는 다시 C라는 장치에 연속하여 연결되어 있는 버스 결선 방식이다(SCSI 인터페이스는 최대 일곱 개의 장치까지 데이지 체인 형식을 지원한다). 이때 가장 마지막에 있는 장치는 대개 저항 장치 또는 단말 장치와 접속한다. 모든 장치는 같은 신호를 수신할 수도 있 지만, 단순한 버스와는 다르게 체인에 속한 각 장치가 하나 이상의 신호를 다른 장치에 전달하기 전에 내용을 수정하는 경우도 있다.
241
����.indd 241
2016-04-18 �� 5:50:14
표 9-1 스프링 XD의 입력 소스 유형 입력
설명
HTTP
HTTP 요청 시 입력된 데이터를 읽는다(예를 들어, 웹 페이지, RSS 피드, REST API 호출).
TCP
TCP 소켓의 출력을 처리한다.
IMAP 서버에서 수신한 메일을 읽는다.
JMS
Java Message Service에서 들어오는 메시지를 수신한다.
RabbitMQ
가입하고 RabbitMQ 서버에서 들어오는 메시지를 수신한다.
Twitter Stream
Twitter streaming API를 사용하여 각 트윗의 JSON 페이로드(payload)에 로드한다.
Twitter Search
Twitter Search API를 사용하여 각 트윗의 JSON 페이로드에 로드한다.
File
파일에서 스트림을 읽는다.
Tail
지정한 파일에서 tail 출력 스트림을 가져온다.
MQTT
MQTT(Message Queue Telemetry Transport) 서버에 연결하여 원격 측정(telemetry) 메시 지를 수신한다.
Time
스프링 XD가 실행 중인 심장 박동 시스템에서 현재 시간을 정기적으로 심장 박동의 타임 스탬프 문 자열에 출력한다.
Gemfire
Gemfire 서버의 지역 이벤트나 연속 쿼리 중 하나를 듣는다.
입력 소스마다 스트림을 정의하는 데 필요한 설정 항목이 여러 개 있으며, 필수 항목도 있다. 이 장 후반부에서는 몇몇 입력 소스와 설정 방법을 다룰 것이다.
싱크 어떤 형태의 출력이나 싱크를 만들어내는 시스템은 유용하다. 가장 흔한 출력 싱크는 로그 파일 이나 데이터베이스 테이블이다. 스프링 XD도 로그 파일이나 데이터베이스 테이블을 지원하지만, 다른 옵션도 사용할 수 있다. 표 9-2는 출력 싱크 목록이다. 표 9-2 스프링 XD의 출력 싱크 출력
설명
File
파일 시스템의 출력 파일
Log
내부 로깅 함수를 사용한 Log4J 방식의 INFO/WARN/ERROR 출력 메시지
JDBC
관계형 데이터베이스에 출력 데이터를 저장한다. JDBC 드라이버를 사용하는 모든 데이터베이 스를 사용할 수 있다. 기본 데이터베이스는 메모리 HSQL이다.
242
����.indd 242
2016-04-18 �� 5:50:14
출력
설명
SMTP 메일 서버로 보내는 메일
TCP
TCP 소켓으로 출력(예를 들어 출력은 유닉스 명령인 netcat으로 라우팅될 수 있다.)
HDFS
하둡 분산 파일 시스템(Hadoop Distributed File System, HDFS)에 출력 데이터를 저장한 다. 10장에서 자세히 다룬다.
RabbitMQ
보내는 메시지는 RabbitMQ 교환기로 전송된다.
Splunk Server
스프링 XD는 SplunkEvent로 출력을 변환하여 TCP를 통해 Splunk 서버로 전송한다.
Gemfire Server
데이터는 실행 중인 Gemfire Cache 서버에 기록된다. Gemfire Cache 서버는 일반 서버
9
또는 JSON 서버가 될 수 있다.
스프링 XD로 하는 실시간 머신 러닝
MQTT
출력 원격 측정 데이터가 MQTT 서버로 전송된다.
스프링 통합 프로젝트에서 지원한다면 다른 싱크 출력 채널도 만들 수 있다.
프로세서 지금까지 입력과 출력의 데이터 유형을 다루었다. 스프링 XD 스트림을 쉽게 만들어 입력 소스를 읽고 파이프를 통해 출력 소스로 데이터를 내보낼 수 있다. 프로세서(processor)는 입력과 출력 소스 사이에 자리잡고 앉아 추가적인 처리, 파싱, 분석이 자신을 거치도록 한다. 스프링 XD에는 바로 사용할 수 있는 여러 프로세서가 있다(표 9-3). 프로세서는 기본적인 필터 링, 데이터 추출, 문자열 조작 기능을 제공한다. 표 9-3 스프링 XD 내장 프로세서 프로세서
설명
Filters
스트림에 대해 grep과 같은 표현식 필터링을 수행한다. 필터는 스프링 표현 언어(SpEL) 또는 Groovy 스크립트다.
JSON Field Value
JSON 필드값과 맞는 메시지를 전달한다.
JSON Field Extractor
JSON 필드값을 추출하여 스트림을 출력한다.
Transform
입력 소스의 메시지 내용을 변환하여 출력으로 보낸다.
Split
표현식에 따라 메시지를 여러 개로 나눈다.
Aggregator
메시지 페이로드(message payload)를 합쳐 통합 메시지 하나로 만든다.
243
����.indd 243
2016-04-18 �� 5:50:14