책 소개
소스 파일은 아래 깃허브 페이지에서 내려 받으실 수 있습니다.
(https://github.com/AcornPublishing/scala-machine-learning)
요약
이 책은 알파고와 시리, 자율주행 자동차 등의 시스템을 구축할 때 기초가 될 수 있는 각종 데이터 처리 방법과 비감독 학습, 베이지안 분석, 회귀와 정규화, 은닉 마코프 모델, SVM, 인공 뉴럴 네트워크, 유전자 알고리즘, 강화 학습 등의 기계 학습 알고리즘의 수학적 모델을 설명하고, 스파크 등의 빅데이터 시스템에서 쓰이고 있는 스칼라 언어를 통해 구현한다. 또한 실제 미국 증시와 외환 시장에서 가져온 각종 금융 데이터에 각 기계 학습 알고리즘을 적용하면서 알고리즘들의 장단점과 한계 등을 설명한다. 독자들은 스칼라를 활용해 규모 확장성이 있는 기계 학습 시스템을 작성하고, 자신의 필요에 맞는 기계 학습 알고리즘을 평가하고 선택할 수 있는 방법을 배울 수 있다.
이 책에서 다루는 내용
■ 과학기술 계산을 위한 동적인 워크플로우를 만드는 방법
■ 오픈소스 라이브러리를 활용해 시계열 데이터에서 패턴을 추출하는 방법
■ 분류, 군집화, 진화 알고리즘을 작성하는 방법
■ 상대적인 성능 튜닝을 수행하는 방법과 스파크에 대한 평가
■ 순차적 데이터에 대한 확률 모델
■ 정규화나 커널화 등의 고급 기법을 활용한 실험
■ 스칼라 병렬 컬렉션, 아카 액터, 아파치 스파크 클러스터 등을 활용해 빅데이터 문제를 푸는 방법
■ 금융시장에 대한 기술적 분석에 핵심 기계 학습 전략 적용
이 책의 대상 독자
이 책은 어떻게 기계 학습 알고리즘을 구현하고, 검증하고, 응용할 수 있는지 배우고 싶어 하는 스칼라 프로그래밍에 경험이 있는 소프트웨어 개발자가 주 대상이다.
함수 프로그래밍에 대해 살펴보거나 스칼라를 활용해 기존 애플리케이션의 규모 확장성을 개선하고자 하는 데이터 과학자에게도 도움이 될 것이다.
이 책은 금융시장에 대한 기술 분석을 활용해 직접 짜면서 비교해볼 수 있는 연습 문제를 제공하는 자습서로 고안됐다.
이 책의 구성
1장, ‘시작하며’에서는 통계 분석, 자동 분류, 회귀분석, 예측, 클러스터링, 최적화의 기본 개념을 소개한다. 스칼라 언어 특징과 라이브러리를 간단한 애플리케이션 구현과 함께 다룬다.
2장, ‘Hello World!’에서는 전형적인 자동 분류 워크플로우를 설명하고, 편향/분산(bias/variance)의 트레이드 오프(trade-off) 관계, 스칼라 의존성 삽입을 활용한 검증 방법을 금융시장 분석에 응용해 살펴본다.
3장, ‘데이터 전처리’에서는 시계열 분석에 대해 다루며, 스칼라를 활용해 데이터 전처리를 구현하고 이동 평균과 같은 평활 기법, 이산 푸리에 변환, 그리고 칼만 재귀 필터 등을 어떻게 간편하게 구현할 수 있는지 살펴본다.
4장, ‘비감독 학습’에서는 가장 널리 활용되는 클러스터링 기법인 K-평균법, 기대값 최대화(EM, Expectation Maximization) 구현, 차원 축소 방법인 주성분 분석에 대해 주로 살펴본다.
5장, ‘나이브 베이즈 분류기’에서는 확률 그래프 모델을 소개하고, 나이브 베이즈 분류기와 다변량 베르누이 분류기를 어떻게 구현하는지 텍스트마이닝 관점에서 살펴본다.
6장, ‘회귀분석과 정규화’에서는 전형적인 선형 회귀와 최소 제곱법 회귀, 릿지 회귀와 정규화 기법에 대해 다루고, 마지막으로 로지스틱 회귀에 대해 살펴본다.
7장, ‘순차적 데이터 모델’에서는 마르코프 프로세스를 은닉 마르코프 모델 구현 전체 과정과 함께 살펴보고, 금융시장 데이터에 대한 패턴 인식 과정에 응용해본 조건부 임의 필드(conditional random field) 기법에 대해서도 살펴본다.
8장, ‘커널 모델과 서포트 벡터 머신’에서는 커널 함수의 개념과 지지 벡터 머신 분류기 및 회귀분석 구현 방법을 살펴보고, 이진 SVM 분류기를 활용한 이상 탐지 방법도 살펴본다.
9장, ‘인공 뉴럴 네트워크’에서는 앞먹임(feed-forward) 신경망과 다층 퍼셉트론(multilayer perceptron) 분류기 구현 방법을 살펴본다.
10장, ‘유전자 알고리즘’에서는 진화 컴퓨팅의 기초를 다루며, 다목적 유전자 알고리즘 구성 요소 각각의 구현에 대해서 살펴본다.
11장, ‘강화 학습’에서는 강화 학습 개념을 소개하고, Q-학습 알고리즘 구현 방법을 학습 기반 분류 시스템을 구축하기 위한 템플릿과 함께 살펴본다.
12, ‘확장 가능한 프레임워크’에서는 기계 학습에서 규모 확장성이 있는 애플리케이션을 개발하기 위한 아티팩트와 프레임워크를 다룬다. 이를 통해 스칼라 병렬 컬렉션, 아카(Akka), 아파치 스파크(Spark) 프레임워크 등을 살펴볼 것이다.
부록 A, ‘기본 개념’에서는 이 책 전체에 쓰인 스칼라 구문, 선형대수 요소에 대해 다루고, 투자와 트레이딩 전략에 대해서도 간단히 소개한다.
부록 B, ‘참고 문헌’은 각 장에서 참고했던 문헌의 목록을 제공한다.
목차
목차
- 1장. 시작하며
- 관심 있는 독자를 위한 수식 표기법
- 기계 학습이란 무엇인가
- 분류
- 예측
- 최적화
- 회귀
- 왜 스칼라인가
- 추상화
- 규모 확장성
- 설정성
- 유지 보수성(Maintainability)
- 요구불 연산
- 모델의 범주
- 기계 학습 알고리즘 분류체계
- 비감독 학습
- 군집화
- 차원 축소
- 감독 학습
- 생성 모델
- 식별 모델
- 강화 학습
- 비감독 학습
- 도구 및 프레임워크
- 자바
- 스칼라
- 아파치 커먼스 수학(Apache Commons Math)
- 설명
- 라이선스
- 설치
- JFreeChart
- 설명
- 라이선스
- 설치
- 기타 라이브러리 및 프레임워크
- 소스 코드
- 맥락과 뷰 바운드
- 코드 표시
- 기본 타입 및 암시
- 기본 타입
- 타입 변환
- 연산자
- 변경 불가능성
- 스칼라 이터레이터의 성능
- 최종 점검
- 계산 워크플로우 개요
- 간단한 워크플로우 작성
- 데이터 집합 선택
- 데이터 집합 적재
- 데이터 집합 전처리
- 모델 생성 (학습)
- 데이터 분류
- 요약
- 2장. Hello, World!
- 모델링
- 모델의 다른 이름
- 모델 vs. 설계
- 모델 특성 선택
- 특성 추출
- 워크플로우 설계
- 계산 프레임워크
- 파이프 연산자
- 모나딕 데이터 변환
- 의존관계 주입
- 워크플로우 모듈
- 워크플로우 팩토리
- 워크플로우 구성 요소 예제
- 전처리 모듈
- 군집화 모듈
- 모델 평가하기
- 검증
- 핵심 지표
- 구현
- K-폴드 교차 검증
- 편향-분산 분해
- 과적합
- 검증
- 요약
- 모델링
- 3장. 데이터 전처리
- 시계열
- 이동 평균
- 단순 이동 평균
- 가중 이동 평균
- 지수 이동 평균
- 푸리에 분석
- 이산 푸리에 변환(DFT)
- DFT 기반 필터링
- 시장 사이클 감지하기
- 칼만 필터
- 상태 공간 추정
- 천이식
- 측정식
- 재귀 알고리즘
- 예측
- 보정
- 칼만 평활화
- 실험
- 상태 공간 추정
- 다른 전처리 기법들
- 요약
- 4장. 비감독 학습
- 군집화
- K-평균 군집화
- 유사도 측정하기
- K-평균 알고리즘 개괄
- 1단계: 군집 설정
- 2단계: 군집 할당
- 3단계: 반복적인 재구축
- 차원의 저주
- 실험
- 군집의 개수 튜닝하기
- 검증
- 기대값 최대화 알고리즘
- 가우스 혼합 모델
- EM 개괄
- 구현
- 테스트
- 온라인 EM
- K-평균 군집화
- 차원 축소
- 주성분 분석(PCA)
- 알고리즘
- 구현
- 테스트 케이스
- 평가
- 다른 차원 축소 기법
- 주성분 분석(PCA)
- 성능 고려 사항
- K-평균
- EM
- PCA
- 요약
- 군집화
- 5장. 나이브 베이즈 분류기
- 확률적 그래프 모델
- 나이브 베이즈 분류기
- 다항 나이브 베이즈 소개
- 정식화
- 빈도주의자(frequentist)의 관점
- 예측 모델
- 0-빈도 문제
- 구현
- 소프트웨어 설계
- 훈련
- 분류
- 레이블 붙이기
- 결과
- 다항 나이브 베이즈 소개
- 다변량 베르누이 분류
- 모델
- 구현
- 나이브 베이즈와 텍스트 마이닝
- 정보 추출의 기본
- 구현
- 용어 추출
- 용어 점수 매기기
- 테스트
- 텍스트 정보 가져오기
- 평가
- 장점과 단점
- 요약
- 6장. 회귀분석과 정규화
- 선형 회귀
- 1-변량 선형 회귀
- 구현
- 테스트 케이스
- 일반 최소 제곱 회귀
- 설계
- 구현
- 테스트 케이스 1: 추세
- 테스트 케이스 2: 특성 선택
- 1-변량 선형 회귀
- 정규화
- Ln 거칠기 벌점
- 리지 회귀
- 구현
- 테스트 케이스
- 수치 최적화
- 로지스틱 회귀
- 로짓 함수
- 이항 분류
- 소프트웨어 설계
- 훈련 워크플로우
- 최소 제곱 최적화기 설정하기
- 자코비안 행렬 계산하기
- 종료 조건 정의하기
- 최소 제곱 문제 정의하기
- 손해 함수 최소화하기
- 테스트
- 분류
- 요약
- 선형 회귀
- 7장. 순차적 데이터 모델
- 마코프 결정 과정
- 마코프 특성
- 1차 이산 마코프 체인
- 은닉 마코프 모델(HMM)
- 표기법
- 람다 모델
- HMM 실행 상태
- 평가(CF-1)
- 알파 클래스(전방 변수)
- 베타 클래스(역방향 변수)
- 훈련(CF-2)
- 바움-웰치 추정기
- 디코딩(CF-3)
- 비터비 알고리즘
- 하나로 합치기
- 테스트 케이스
- 시계열 분석을 위한 은닉 마코프 모델
- 조건부 임의 필드
- CRF 소개
- 선형 체인 CRF
- CRF와 텍스트 분석
- 특성 함수 모델
- 소프트웨어 설계
- 구현
- 훈련 집합 만들기
- 태그 만들기
- 데이터 시퀀스 추출하기
- CRF 제어 매개변수
- 하나로 합치기
- 테스트
- 훈련 수렴 프로파일
- 훈련 집합 크기에 따른 영향
- L2 정규화 요소의 영향
- CRF와 HMM 비교
- 성능상 고려
- 요약
- 마코프 결정 과정
- 8장. 커널 모델과 서포트 벡터 머신
- 커널 함수
- 개요
- 일반적인 판별 커널
- 서포트 벡터 머신
- 선형 SVM
- 분리 가능한 경우(하드 마진)
- 분리 불가능한 경우(소프트 마진)
- 비선형 SVM
- 최대 마진 분류
- 커널 트릭
- 선형 SVM
- 서포트 벡터 분류기
- 이진 SVC
- LIBSVM
- 소프트웨어 설계
- 설정 매개변수
- SVM구현
- C-벌점과 마진
- 커널 평가
- 위험 분석에 적용하기
- 이진 SVC
- 1-분류 SVC를 사용해 변칙성 감지하기
- 서포트 벡터 회귀
- 개괄
- SVR vs. 선형 회귀
- 성능상 고려할 점
- 요약
- 커널 함수
- 9장. 인공 뉴럴 네트워크
- 앞먹임 뉴럴 네트워크
- 생물학적 배경
- 수학적 배경
- 다층 퍼셉트론
- 활성화 함수
- 네트워크 구조
- 소프트웨어 설계
- 모델 정의
- 계층
- 시냅스
- 연결
- 훈련 사이클/에포크
- 1단계: 입력 전방 전파
- 2단계: 오차 제곱 합
- 3단계: 오차 역전파
- 4단계: 시냅스/가중치 조정
- 5단계: 수렴 기준
- 설정
- 한데 모으기
- 훈련 전략과 분류
- 온라인 vs. 배치 훈련
- 정규화
- 모델 인스턴스화
- 예측
- 평가
- 학습 비율의 효과
- 모멘텀 계수의 영향
- 테스트 케이스
- 구현
- 모델 평가
- 은닉 계층구조가 끼치는 영향
- 장점과 한계
- 요약
- 앞먹임 뉴럴 네트워크
- 10장. 유전자 알고리즘
- 진화
- 기원
- NP 문제
- 진화적 계산
- 유전자 알고리즘과 기계 학습
- 유전자 알고리즘의 구성 요소
- 인코딩
- 값 인코딩
- 술어 인코딩
- 해 인코딩
- 인코딩 방식
- 유전적 연산자
- 선택
- 교차
- 변이
- 적합도 점수
- 인코딩
- 구현
- 소프트웨어 설계
- 핵심 구성 요소
- 선택
- 개체군 크기 증가 제어
- GA 설정
- 교차
- 개체군
- 염색체
- 유전자
- 변이
- 개체군
- 염색체
- 유전자
- 번식 사이클
- 매매 전략을 위한 GA
- 매매 전략 정의
- 매매 연산자
- 비용/부적합도 함수
- 거래 신호
- 매매 전략
- 신호 인코딩
- 테스트 케이스
- 데이터 추출
- 초기 개체군
- 설정
- GA 인스턴스화
- GA 실행
- 테스트
- 매매 전략 정의
- 유전자 알고리즘의 장점과 단점
- 요약
- 진화
- 11장. 강화 학습
- 소개
- 문제
- 해법: Q-학습
- 용어
- 개념
- 정책의 값
- 벨만 최적화 공식
- 모델이 없는 학습의 시간적 차이
- 동작-값 반복 갱신
- 구현
- 소프트웨어 설계
- 상태와 동작
- 검색 공간0
- 정책과 동작-값
- Q-학습 훈련
- 해결사 꼬리 재귀
- 예측
- Q-학습을 사용한 옵션 거래
- 옵션의 속성
- 옵션 모델
- 함수 근사
- 제약이 가해진 상태 천이
- 한데 모으기
- 평가
- 강화 학습의 장점과 단점
- 학습 분류 시스템
- LCS 소개
- LCS를 사용하는 이유는 무엇인가
- 용어
- 확장 학습 분류 시스템
- XCS 구성 요소들
- 포트폴리오 관리에 적용하기
- XCS 코어 데이터
- XCS 규칙
- 커버링
- 구현 예제
- 학습 분류 시스템의 장점과 한계
- 요약
- 소개
- 12장. 확장 가능한 프레임워크
- 개요
- 스칼라
- 객체 생성 제어하기
- 병렬 컬렉션
- 병렬 컬렉션 처리하기
- 벤치마크 프레임워크
- 성능 평가
- 액터로 규모 확장하기
- 액터 모델
- 파티셔닝
- 액터를 넘어서: 반응형 프로그래밍
- 아카
- 마스터-작업자
- 메시지 교환
- 작업자 액터
- 워크플로우 컨트롤러
- 마스터 액터
- 마스터에서 라우팅 사용하기
- 분산 이산 푸리에 변환
- 한계
- 퓨처
- 액터의 생명주기
- 퓨처를 기다리며 블록하기
- 퓨처 콜백 처리하기
- 한데 모으기
- 마스터-작업자
- 아파치 스파크
- 스파크를 사용해야 하는 이유는 무엇인가
- 설계 원칙
- 인메모리 영속성
- 지연 계산
- 변환과 액션
- 공유 변수
- 스파크로 실험하기
- 스파크 배치하기
- 스파크 셀 사용하기
- MLlib
- RDD 생성
- 스파크를 사용한 K-평균
- 성능 평가
- 튜닝 가능한 요소
- 테스트
- 성능 고려 사항
- 장점과 단점
- 0xdata 스파클링 워터
- 요약
- 부록A. 기본 개념
- 스칼라 프로그래밍
- 라이브러리 목록
- 코드 조각의 서식
- 캡슐화
- 클래스 생성자 템플릿
- 동반 객체 vs. 케이스 클래스
- 열거형 vs. 케이스 클래스
- 오버로딩
- 분류기를 위한 설계 템플릿
- 데이터 추출
- 데이터 소스
- 문서 추출
- 행렬 클래스
- 수학
- 선형대수
- QR 분해
- LU 인수분해
- LDL 분해
- 콜레스키 인수분해
- 특이 값 분해
- 고유값 분해
- 대수 및 수학 라이브러리
- 1차 술어 논리
- 자코비안 및 헤시안 행렬
- 최적화 기법 정리
- 기울기 하강 기법
- 쿼시-뉴튼 알고리즘
- 비선형 최소 제곱 최소화
- 라그랑주 승수
- 동적 프로그래밍 개요
- 선형대수
- 금융 개론
- 기본적 분석
- 기술적 분석
- 용어
- 매매 신호 및 전략
- 가격 패턴
- 옵션 거래
- 금융 데이터 소스
- 추천 온라인 강좌
- 참고 문헌
- 스칼라 프로그래밍
- 부록B. 참고 문헌