파이썬으로 머신러닝을 마스터하는 7단계

파이썬으로 머신러닝을 마스터하는 7단계

April 27, 2017

1 단계 : 머신러닝 기본 사항 검토 및 새로운 관점

1단계에서 검토되어야 할 단계는 다음과 같습니다.

  1. 기본적인 파이썬 스킬

  2. 기초 머신러닝 기술

  3. Scientific Python 패키지 개요

  4. 파이썬에서 머신러닝 시작하기 : 소개 및 모델 평가(model evaluation)

  5. 파이썬을 이용한 머신러닝 주제 : k-평균 군집화(k-means clustering), 결정 트리(decision trees), 선형 회귀(linear regression) 및 로지스틱 회귀(logistic regression)

  6. 파이썬을 이용한 고급 머신러닝 주제 : 서포트 벡터 머신(Support vector machines), 랜덤 포레스트(random forests),  PCA 차원축소(dimension reduction with PCA)

  7. 파이썬에서의 딥러닝

위의 준비가 되어 있지 않다면 아래의 문서를 사전에 학습하기 바랍니다.

머신러닝의 기초를 배울 수 있는 대안이나 보완적인 접근법을 찾고 있다면 Shai Ben-David의 비디오 강좌와 Shai Shalev-Shwartz가 작성한 무료 교재를 사용하면 됩니다.

소개 자료는 나머지 단계로 진행하기 전에 모두 소화해야 하는 것은 아닙니다. 머신러닝 알고리즘을 사용하여 모델을 구현하거나 적용 가능한 개념이 후속 단계에서 실제로 사용되는 경우 비디오 강의, 텍스트 및 기타 리소스를 참조 할 수 있습니다.

2 단계 : 분류(Classification) 적용

먼저 분류(classification) 노하우를 강화하고 몇 가지 추가 알고리즘을 도입하여 새로운 자료로 시작합니다. 이 단계에서는 결정 트리(Decision Trees), 서포트 벡터 머신(Support Vector Machines) 및 로지스틱 회귀(logistic regression)에 분류기 결합 랜덤 포레스트(ensemble classifier Random Forests) 뿐만 아니라 K-최근접 이웃 알고리즘(k-nearest neighbors), 나이브 베이즈 구분자(Naive Bayes classifier) 및 다층인식자(multilayer perceptron)를 혼합하여 추가합니다.

 Scikit-learn Classifiers

k-nearest neighbors(kNN, K-최근접 이웃 알고리즘)은 간단한 분류자이며 모든 학습이 분류 시간에 발생하는 지연 학습자(Lazy Learner)의 예입니다 (사전 학습 단계에서 발생하는 것과 반대). kNN은 비모수(non-parametric) 이며, 데이터 인스턴스를 분류해야 하는 방법을 결정할 때 k closest 인스턴스와 데이터 인스턴스를 비교하여 작동합니다.

나이브 베이즈(Naive Bayes)는 베이즈의 정리(Bayes’ Theorem)를 기반으로 하는 분류자(classifier) 입니다. 기능 간에는 독립성이 있으며, 한 클래스의 특정 기능의 존재 여부는 같은 클래스의 다른 기능의 존재와 관련이 없다고 가정합니다.

Multilayer perceptron(MLP, 다층인식자)는 단순한 피드포워드 신경망(Feedforward Neural Network)으로, 여러 층의 노드로 구성되어 있으며, 각 층은 이후에 오는 층과 완전히 연결됩니다. MLP는 Scikit-learn 0.18 버전에서 소개되었습니다.

먼저 Scikit-learn 문서에서 MLP 분류자(classifier)의 개요를 읽은 다음 자습서로 구현을 연습합니다.

3 단계 : 클러스터링(Clustering) 적용

이제 비지도학습의 한 형태인 클러스터링(Clustering)으로 넘어갑니다. DBSCAN 및 EM(Expectation-maximization)을 소개합니다.

 

첫째, 이 소개 글을 읽으십시오. 첫번째는 k-means와 EM 클러스터링(EM clustering) 기법의 빠른 비교, 새로운 형태의 클러스터링에 대한 좋은 예이며 두번째는 Scikit에서 사용할 수 있는 클러스터링 기법의 개요입니다.

Expectation-maximization(EM)는 확률적 클러스터링 알고리즘이며, 따라서 인스턴스가 특정 클러스터에 속할 확률을 결정하는 것과 관련됩니다. EM은 통계 모델에서 매개 변수의 최대공산(maximum likelihood) 또는 최대 사후분포(Maximum a Posteriori) (MAP) 추정치에 접근합니다 (Han, Kamber & Pei). EM 프로세스는 k 개의 클러스터 와 관련하여 클러스터링이 최대화 될 때까지 반복되는 일련의 매개 변수로 시작 합니다.

EM 알고리즘에 대한 튜토리얼을 먼저 읽으십시오. 다음으로 관련 Scikit-learn 문서를 살펴보십시오. 마지막으로 튜토리얼을 따라 EM 클러스터링을 Python으로 구현하십시오.

” Gaussian mixture models(가우스 혼합 모델)”이 언뜻보기에 혼란스럽다면, Scikit-learn 문서의 관련 섹션에서 불필요한 걱정을 덜어 줄 수 있습니다.

이 GaussianMixture 객체는 Gaussian models에 대한 expectation-maximization(기대 최대화, EM) 알고리즘을 구현합니다.

Density-based spatial clustering of applications with noise (DBSCAN)는 밀도가 높은 데이터 포인트를 그룹화하고 저밀도 데이터 포인트를 아웃 라이어로 지정하여 작동합니다.

먼저 Scikit-learn의 문서에서 DBSCAN을 읽고 구현 한 다음 간결한 튜토리얼을 따르십시오.

4 단계 : Ensemble Methods(앙상블 방법) 적용

앞에서는 랜덤포레스트 (Random Forests, RF)라는 단일 ensemble method 만 처리했습니다. RF는 지난 수년 동안 실적이 우수한 분류 기준으로 많은 성공을 거두었지만 실제로는 유일하게 사용할 수 있는 ensemble classifier는  아닙니다. 우리는 Bagging, Boosting, Voting을 살펴볼 것입니다.

 

 

먼저 Ensemble Learners의 개요를 읽으십시오. 첫번째는 일반적 내용이며 두번째는 Scikit-learn과 관련됩니다.

그런 다음 새로운 Ensemble Method로 이동하기 전에 여기에서 새로운 튜토리얼을 통해 Random Forests의 속도를 높이십시오.

bagging, boosting, voting은 모두 Ensemble Classifiers의 다른 형태입니다. 모두 여러 모델을 작성해야 합니다. 그러나 모델이 구축한 알고리즘 , 모델이 사용 하는 데이터 및 결과가 궁극적으로 결합되는 방식은 스키마간에 다릅니다.

  • Bagging은 트레이닝 세트에서 데이터의 다른(독립) 샘플을 사용하는 동안, 같은 분류 알고리즘에서 여러 모델을 만듭니다 – Scikit Learn이 BaggingClassifier를 구현

  • Boosting은 후속 모델의 학습을 향상시키기 위해 동일한 분류 알고리즘에서 여러 모델을 만들고 체인 모델을 차례로 추가합니다. – Scikit-Learn이 AdaBoost를 구현

  • Voting은 서로 다른 분류 알고리즘에서 여러 모델을 만들고, 모델을 가장 잘 결합하는 방법을 결정하는 기준으로 사용됩니다. Scikit-Learn이 VotingClassifier를 구현

그렇다면 왜 모델을 결합할까요? 이 질문에 하나의 특정 각도에서 접근하기 위해 Scikit-learn 문서에서 bias-variance trade-off 에 대한 개괄적인 설명이 있습니다.

이제 Ensemble Learner에 대한 입문 자료를 읽었고 몇 가지 특정 Ensemble Classifiers에 대한 기본적인 이해를 얻었으므로, Machine Learning Mastery의 Scikit-learn을 사용하여 파이썬에서 Ensemble Classifiers를 구현하는 방법을 소개합니다.

5 단계 : Gradient Boosting(경사도 증폭)

5 단계 : Gradient Boosting(경사도 증폭)

다음 단계는 가장 인기있는 현대 머신러닝 알고리즘 중 하나에 초점을 맞춘 ensemble classifiers(분류기 결합)의 영역에 집중합니다. Gradient Boosting은 Kaggle 경진대회에서 가장 잘 활용되고 성공적인 알고리즘 중 하나가 되어 최근 머신러닝에 눈에 띄는 영향을 주었습니다.

 

 

먼저 Gradient Boosting이 무엇인지에 대한 개요를 읽으십시오.

다음으로 Gradient Boosting이 왜 Kaggle 경진대회에서 “가장 성공한” 접근 방식인지 읽어보십시오..

Scikit-learn은 독자적인 Gradient Boosting 구현을 가지고 있지만, 우리는 좀 더 빠른 구현으로 알려진 XGBoost 라이브러리를 사용할 것입니다.

다음 링크는 XGBoost 라이브러리에 대한 추가 정보와 Gradient Boosting (필요에 따라)을 제공합니다.

이 튜토리얼을 따라 가면 다음과 같이 됩니다.

보강을 위해 다음보다 간결한 예제를 따를 수도 있습니다.

6 단계 : Dimensionality Reduction 적용

Dimensionality reduction(차원축소)는 일련의 주요 변수를 얻는 프로세스를 활용하여 모델 구축에 사용 된 변수를 초기 수에서 감소 된 수로 줄이는 행위 입니다.

차원 감소의 주요한 두 가지 형태가 있습니다 :

  1. 특성 선택 – 관련 특성의 서브 세트 선택

  2. 특성 추출 – 파생 값 특성의 유익하고 비중복 세트 구축

다음은 일반적인 특성 추출 방법의 한 쌍에 대한 것입니다.

 

 

주성분 분석(PCA) 은 직교 변환(orthogonal transformation)을 사용하여 상관 관계가 있는 변수의 관측치 집합을 주성분(principal components)이라는 선형적으로 상관없는 변수 집합으로 변환하는 통계적 절차입니다. 주 구성 요소의 수는 원래 변수의 수보다 작거나 같습니다. 이 변환은 첫 번째 주성분이 가능한 가장 큰 분산을 가지도록 (즉, 가능한 한 많은 데이터의 가변성을 설명하는 방식으로) 정의됩니다.

위의 정의는 PCA Wikipedia 항목에서 가져온 것입니다. 관심이 있다면 더 읽을 수 있습니다. 그러나 다음 개요로도 충분합니다.

선형 판별 분석(Linear Discriminant Aanalysis, LDA)은 Fisher’s linear discriminant의 일반화된 형태이며, 통계, 패턴 인식 및 머신러닝에서 사용되는 방법으로 두 개 이상의 클래스 개체 또는 이벤트를 특성화하거나 구분하는 선형 특성 조합을 찾습니다. 결과 조합은 선형 분류자(linear classifier)로 사용될 수 있으며 나중에 분류하기 전에 차원 감소를 위해 더 일반적으로 사용될 수 있습니다.

LDA는 Analysis of Aariance(분산분석, ANOVA) 및 regression analysis(회귀 분석)과 밀접한 관련이 있으며, 하나의 종속 변수를 다른 특성 또는 측정의 선형 조합으로 표현하려고 시도합니다. 그러나 ANOVA는 카테고리 독립 변수와 연속 종속 변수를 사용하는 반면 discriminant analysis(판별 분석)은 연속 독립 변수와 범주 종속 변수 (즉, 클래스 레이블)를 사용합니다.

위의 정의는 Wikipedia에서 가져온 것입니다. 그리고 다음을 참조하십시오.

차원 감소를위한 PCA와 LDA의 실질적인 차이점이 어렵습니까? Sebastian Raschka는 다음과 같이 설명합니다 .

Linear Discriminant Analysis(선형 판별 분석, LDA)과 Principal Component Analysis(주성분 분석, PCA)은 차원 변환에 일반적으로 사용되는 선형 변환 기법입니다.  PCA는 클래스 레이블을 “무시”하기 때문에 “비지도학습”알고리즘이라고 할 수 있으며 그 목표는 데이터 집합의 분산을 최대화하는 방향 (소위 주 구성 요소)을 찾는 것입니다. PCA와 달리 LDA는 “지도학습”으로 여러 클래스 간의 분리를 최대화하는 축을 나타내는 방향 ( “선형 판별”)을 계산합니다.

이에 대한 간결한 설명을 위해 다음을 읽어보십시오.

7 단계 : 딥러닝 적용

원래의 7 단계는 신경망과 딥러닝의 시작점을 제공했습니다. 지금까지 신경망에 대한 이해를 높이고 몇가지 일반적인 신경망 모델을 구현하는 연습을 하는데 문제가 없다면 아래의 사항을 계속 진행할 수 있습니다.

먼저 몇 가지 기초 학습 자료를 살펴보십시오.

다음으로, Google의 “머신 인텔리전스용 오픈소스 소프트웨어 라이브러리인 TensorFlow에 대한 소개-자습서를 사용하여 효과적인 딥러닝 프레임워크와 거의 사실상 현대적으로 진행중인 신경망 도구를 사용해보십시오.

마지막으로 가장 인기 있고 일반적인 신경 네트워크 모델을 구현하는 TensorFlow 사이트에서 직접 자습서를 보십시오.

출처 : http://www.kdnuggets.com/2017/03/seven-more-steps-machine-learning-python.html