Real World Machine Learning
1장 머신러닝이란 무엇인가?Permalink
- 머신러닝의 다섯 가지 이점
- 정확성
- 자동화
- 신속성
- 맞춤화
- 확장성
- 모델 성능 최적화
- 모델 매개변수 조정 (Tuning the model parameters)
- 특성의 부차 집합을 선택 (Selecting a subset of features)
- 데이터 전처리 (Preprocessing the data)
2장 실무현장 데이터Permalink
- Github Notebook
- 데이터 수집시 고려해야 하는 사항들
- 어떤 특성을 포함해야 하는가?
- 목표 변수에 대한 실측 자료를 어떻게 얻을 수 있는가?
- 얼마나 많은 훈련 데이터가 필요한가?
- 훈련 집합이 충분히 대표성을 띄는가?
- 데이터 전처리 방법
- 범주형 특성 고려
- 결측 자료 다루기
- 간단한 특성 추출
- 데이터 정규화
- 특성 정규화 수식
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
def normalize_feature(data, f_min=-1.0, f_max=1.0): d_min, d_max = min(data), max(data) factor = (f_max - f_min) / (d_max - d_min) normalized = f_min + (data - d_min)*factor return normalized, factor
3장 모델링과 예측Permalink
- Github Notebook
-
- : 예측
- : 추정
- : 신규
- 지도 학습
- 분류 : 목표가 범주형일 때
- 회귀 : 목표가 수치형일 때
- 비지도 학습
- 선형 vs. 비선형
4장 모델 평가와 최적화Permalink
- Github Notebook
- 커널 스무딩 (Kernel Smoothing)
- 대역폭 매개변수 (Bandwidth Parameter)
- 작으면 : 과적합
- 크면 : 과소적합
- 신규 데이터의 예측 정확도 평가
- 평균 제곱 오차 (Mean Squared Error)
- 교차 검증 (Cross Validation)
- 홀드아웃 메소드 (Holdout Method)
- k겹 교차 검증 (k-fold Cross Validation)
- 분류 모델 평가
- 정확도 (Accuracy)
- 혼동 행렬 (Confusion Matrix)
- 참 양성률 (민감도, Sensitivity) : 진짜True, 예측True
- 참 음성률 (특이도, Specificity) : 진짜False, 예측False
- 거짓 양성률 (폴아웃, Fall-Out) : 진짜False, 예측True
- 거짓 음성률 (결측률, Miss Rate) :진짜True, 예측False
- 수신자 조작 특성 (Receiver Operating Characteristics, ROC)
- ROC 곡선 아래 영역 (Area Under Curve, AUC)
- 회귀 모델 평가
- 제곱근 평균 제곱 오차 (Root-Mean-Square Error, RMSE)
- 잔차 (Residual) 검사
- 매개변수 조율을 통한 모델 최적화
- 로지스틱 회귀 : 없음
- K 최근접 이웃 : 평균에 가장 가까운 이웃의 수
- 의사결정트리 : 분할기준, 최대 깊이 트리, 분할에 필요한 최소 표본
- 커널 서포트 벡터 머신 : 핵 유형, 계수, 벌점 매개변수 신청
- 랜덤 포레스트 : 트리의 수, 특성의 수, 분할 기준, 최소 표본
- 부스팅 : 트리의 수, 학습 속도, 트리의 최대 깊이, 최소 표본
- 그리드 탐색
5장 특성 추출의 기본Permalink
- 특성 추출을 해야 하는 다섯 가지 이유
- 데이터를 변형해 목표와 관련 짓기 (Ex. 잔고 대비 대출 비율 등)
- 외부 데이터 가져오기
- 비정형 데이터 자료 사용
- 해석하기 쉬운 특성 만들기
- 많은 특성 집합을 사용해 창조성 향상
- 특성 추출 과정
- 날짜 및 시간 특성 : 시간, 요일, 월 정보 등을 카테고리 특성으로 변경 (Ex. 00~23시, 1월~12월 등)
- 텍스트 특성 : 단어 주머니 (Bag of Words), 정지어 (Stop Words)
- 특성 선택
- 특성 중요도
- 전진 선택 : 최상의 특성 집합이 선택될 때까지 특성을 반복해서 추가
- 후진 제거 : 최악인 모델 특성을 집합에서 반복해서 제거
- 차원 감소
6장 예제: 뉴욕 시 택시 데이터Permalink
- Github Notebook
- 데이터
- 데이터 시각화
- 머신러닝 작업에서의 두 가지 함정
- 믿기지 않는 시나리오 (Too-Good-To-Be-True Scenario)
- 섣부른 가정 (Premature Assumptions)
- 모델링
- 선형 모델
- 비선형 분류기 (Ex. 랜덤 포레스트 등)
7장 고급 특성 추출 기법Permalink
- Github Notebook
- 고급 텍스트 특성
- 단어 주머니 모델
- 토큰화 : 텍스트를 조각들로 분해하는 일
- n-gram : n개 글자로 구성된 문서
- unigram, bigram, trigram…
- 변형 : fox vs. Fox
- 어간 추출 : jump, jumping, jumps, …
- 벡터화 (Vectorization)
- 정지어 (Stop Words)
- 토큰화 : 텍스트를 조각들로 분해하는 일
- 주제 모델링
- 용어 빈도-역문서 빈도 (Term Frequency-Inverse Document Frequency, TF-IDF)
- 잠재 의미 분석 (Latent Sementic Analysis, LSA)
- T : 용어(개집, 짖는 소리)-개념(개) 행렬
- D : 개념-문서 행렬
- S : 특이값 행렬
- 확률론적 방법 (Latent Dirichlet Analysis, LDA)
- 용어 빈도-역문서 빈도 (Term Frequency-Inverse Document Frequency, TF-IDF)
- 내용 확장
- 링크
- 지식베이스 확장
- 텍스트 메타 특성
- 단어 주머니 모델
- 이미지 특성
- 간단한 이미지 특성
- 색상
- 메타데이터
- 물체와 형태 추출
- 윤곽선 검출 (Edge Detection)
- 고급 형태 특성 (HOG)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
pip install scikit-image # Edge Detection import skimage image = skimage.data.camera() edges = skimage.filter.sobel(image) # HOG (Histogram of Oriented Gradient) image = skimage.color.rgb2gray(skimage.data.astronaut()) skimage.feature.hog(image, orientations=9, pixels_per_cell=(8, 8), cells_per_block=(3, 3), visualise=True) - 차원 감소 (PCA, Diffusion Map)
- 자동 특성 추출 (DNN, DBN)
- 윤곽선 검출 (Edge Detection)
- 간단한 이미지 특성
- 시계열 특성
- 시계열 데이터의 유형
- 고전적 시계열 : 시간의 흐름에 맞춰 수치를 측정한 값으로 구성
- 점 과정 (Point Processes) : 시간이 지나면서 때때로 발생하는 사건을 모은 것
- 시계열 데이터를 바탕으로 한 예측
- 시계열 예측 : 단일 시계열 대상
- 시계열 분류 or 시계열 회귀 : 다수의 시계열 대상
- 고전적 시계열 특성
- 간단한 시계열 특성 : 평균, 확산(표준편차), 이상점(Outliers), 분포
- 고급 시계열 특성
- 자기상관 (Autocorrelation) : 자신과 시차가 이쓴 버전의 통계적 상관관계 측정
- 푸리에 분석 : 시계열을 데이터 집합에서 발생하는 주파수 범위 내 Sin, Cos 함수의 합계로 분해
- 이산 푸리에 변환 : 시계열의 스펙트럼 밀도를 주파수 함수로 계산
- 주기도 : 주기를 나타낸 그림
- 시계열 모델 예
- 자기회귀
- 자기회귀 이동 평균
- 가치 모델
- 은닉 마르코프 모델
- 시계열 데이터의 유형
8장 고급 자연 언어 처리 예제: 영화 감상평 평점Permalink
- Github Notebook
- 데이터 및 사용사례 탐구
- 사용사례의 목적
- 목표 변수를 변환하는 방법 (Ex. 2진 분류, 다중 분류, 실제값 등)
- 최적화할 평가 기준
- 고려할 학습 알고리즘
- 데이터 입력 사용 가능 여부
- 사용사례 고려사항
- 사용사례가 가치 있는 이유는?
- 어떤 훈련 데이터가 필요한가?
- 적절한 머신러닝 모델링 전략은?
- 예측에 어떤 평가 측정을 사용해야 하는가?
- 가지고 있는 데이터가 이 사용사례를 해결하기에 충분한가?
- 사용사례의 목적
- 기초 자연 언어 처리 특성 추출 및 초기 모델 구축
- 나이브 베이즈 알고리즘
~
~
~
~
~
~
~
- 는 데이터를 통해 알수 있고, 는 예측하고자 하는 사례의 특성을 나타냄, 는 좋은 문서 또는 나쁜 문서에서 단어가 출연하는 비율을 의미
- 초기 모델 평가하기
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
from sklearn.metrics import accuracy_score, roc_auc_score, classification_report, roc_curve def performance(y_true, pred, color="g", ann=True): acc = accuracy_score(y_true, pred[:,1] > 0.5) auc = roc_auc_score(y_true, pred[:,1]) fpr, tpr, thr = roc_curve(y_true, pred[:,1]) plot(fpr, tpr, color, linewidth="3") xlabel("False positive rate") ylabel("True positive rate") if ann: annotate("Acc: %0.2f" % acc, (0.1,0.8), size=14) annotate("AUC: %0.2f" % auc, (0.1,0.7), size=14)
- tf-idf 알고리즘으로 단어 주머니의 특성들을 정규화하기
- Scikit-learn의 TfidfVectorizer 활용
- 모델 매개변수 최적화
- 나이브 베이즈 알고리즘
- 고급 알고리즘과 모델 배치 고려사항
- word2vec 특성
- Gensim 라이브러리의 word2vec 활용
- 랜덤 포레스트 모델
- RandomForestClassifier 활용
- word2vec 특성
9장 머신러닝 작업 흐름 확장Permalink
- Github Notebook
- 확장하기 전에
- 중요 차원 식별 : 자원 제약이 모델 훈련과 예측에 미치는 영향
- 훈련 데이터 Subsampling 하기
- 특성 선택 : N-그램, Lasso 등
- 사례 군집화 : 계층적 병합 군집화 등
- 확장 가능한 데이터 관리 시스템
- 수평 확장 : 새로운 노트 추가 및 노드간 고르게 데이터 분포
- 수직 확장 : 메모리, CPU 코어 추가 등
- Hadoop Distributed File System (HDFS) : MapReduce 알고리즘 사용
- 데이터 집약성 (Data Locality)
- 머아웃 (Mahout) : HDFS와 함께 작동하는 머신러닝 알고리즘
- 아파치 스파크 : 하둡 기반 AI 플랫폼
- MLlib : 머신러닝 알고리즘 및 도구
- 머신러닝 모델링 파이프라인 확장
- 학습 알고리즘 확장
- 다항식 특성 : 특성1*특성2, 특성1의 제곱 등
- 데이터와 알고리즘 근사 : 히스토그램 근사
- 심층 신경망 : 딥러닝과 같은 블랙박스 모델
- 학습 알고리즘 확장
- 예측 확장
- 예측량 높이기
- 예측속도 높이기
10장 예제: 디지털 디스플레이 광고Permalink
- Github Notebook
- 특성 추출과 모델링 전략
- 고차원 공간으로 인한 차원의 저주 (The Curse of Dimensionality)
- 데이터의 크기와 모양
- Cardinality : 집합의 크기 또는 사상 개수
- 특잇값 분해
- Singular Value Decomposition (SVD)
왼쪽 특이 벡터, 오른쪽 특이 벡터
특잇값 : 해당 특성 벡터가 어느정도 독립적인지 확인 가능
- Singular Value Decomposition (SVD)
- 자원 추정 및 최적화
- 병렬 처리를 통한 데이터 수집 시간 단축
- k 최근접 이웃
- 훈련 공간에서 가장 가까운 관측값에 대한 예측이 목적
- 유클리드 거리 사용
- 랜덤 포레스트
- 다중 결정 트리 분류기나 회귀기를 훈련 데이터와 특성 부분집합에 맞추고 결합된 모델을 토대로 예측할 수 있는 앙상블 학습방법
- Bootstrap Aggregating
- Bagging (집어넣기) : 랜덤 포레스트와 다른 알고리즘에 사용되는 복원 표집 반복 과정
- Stacking (쌓기) : 최종 합의된 예측을 도출하기 위해 로지스틱 회귀 같은 다른 알고리즘 예측을 결합하는 방법
부록. 인기 있는 머신러닝 알고리즘Permalink
- Linear Regression (선형 회귀)
- Logistic Regression (로지스틱 회귀)
- Support Vector Machine (서포트 벡터 머신)
- SVM with Kernel (커널을 가진 서포트 벡터 머신)
- k-nearest neighbors (k 최근접 이웃)
- Decision Trees (결정 트리)
- Random Forest (랜덤 포레스트)
- Boosting (부스팅)
- Naive Bayes (나이브 베이즈)
- Neural Network (신경망)
- Vowpal Wabbit (보우팰 웨빗)
- XGBoost (엑스지부스트)
Comments