Search

Machine Learning For Absolute Beginners

tags
머신러닝
5 more properties
한 줄 요약: 기계 학습에 대한 전공기초같은 책이라서 이 책을 읽고 실용적인 일을 할 수는 없지만, 기계 학습에 대한 큰 지도를 얻고, 관련 용어를 배울 수 있습니다.

목차

1. Preface

동영상 튜토리얼 및 온라인 자료 : https://scatterplotpress.teachable.com/p/ml-code-exercises

2. What Is Machine Learning?

Computer Sicence > Data Science > AI > Machine Learning
데이터 마이닝은 새로운 출력을 예상하기 위해 입력을 변수를 분석하는데 초점을 두는 반면에, 기계 학습은 입력과 출력 변수 모두를 분석하는 것으로 확장된다.

3. Machine Learning Categories

지도 학습 Supervised Learning

지도 학습은 알려진 예를 통해 패턴을 추출하고 추출된 통찰을 사용하여 반복 가능한 결과를 설계하는 우리의 능력을 모방한다.
지도 학습 알고리즘에는 regression analysis(linear regression, logistic regression, non-linear regression)을 비롯해 decision trees, k-nearest neighbors, neural networks, support vector machines가 있음.

비지도 학습 Unsupervised Learning

비지도 학습의 경우 출력 변수에 레이블이 지정되지 않으며 입력 및 출력 변수의 조합은 알 수 없다. 대신 비지도 학습은 입력 변수간의 관계를 분석하고 숨겨진 패턴을 발견하고 추출해서 가능한 출력에 대해 새 레이블을 만들어내는데 중점을 둔다.
비지도 학습은 부정 행위 탐지 (fraud detection) 영역에서 특히 중요한데, 가장 위한한 공격은 아직 분류되지 않은 공격이기 때문이다.
비지도 학습 알고리즘에는 k-means clustering, social network analysis, descending dimension algorithm 등이 있다.

준지도 학습 Semi-supervised Learning

강화 학습 Reinforcement Learning

지도 학습이나 비지도 학습과 달리, 강화 학습은 무작위 시행착오로부터 피드백을 얻고 이전 반복에서 얻은 통찰을 활용해 예측 모델을 구축한다.
강화 학습 알고리즘은 이 책에서 다루지 않음.

4. The Machine Learning Toolbox

데이터 테이블에 대한 용어
테이블의 Column : feature, variable, dimension, attribute 등으로 불리우나 같은 개념
테이블의 Row : case, value
테이블의 한 Column은 vector라고도 불리고, 여러 vector는 matrix로 불림.

5. Data Scrubbing

데이터를 깨끗하게 만드는 작업을 데이터 스크러빙 data scrubbing 이라고 부름.

Feature Selection

불필요한 Feature들을 제거하는 것.
데이터 축소는 비즈니스 결정이며 편의성과 모델의 전반적 정밀도 사이의 트레이드 오프임을 기억해야 한다.

Row Compression

Row의 개수를 줄이는 것.
예) 사자와 호랑이 Row 2개를 육식동물 Row 1개로 합침

One-hot Encoding

텍스트 기반의 값을 숫자 1, 0의 이진값으로 변환하는 것
예) “Female”을 0으로 “Male”을 1로 변환

Binning

연속된 숫자 값을 범위에 따라서 여러 개의 이진 feature로 변환 (이것을 bin이나 bucket으로 부름)
예) 테니스 코드의 크기값을 대,중,소로 분류.
Bucketing으로도 불림.

Normalization

값의 범위를 미리 정해진 최소 최대값에 맞게 확대하거나 축소하는 것.

Standardization

단위 분산을 평균이 0이고 표준편차가 1인 표준 정규 분포로 변환하는 것.

Missing Data

누락된 데이터를 처리하는 것.
한 가지 접근법은 mode 값으로 대체하기. mode는 데이터셋에서 가장 일반적인 값을 의미.
두 번째 접근법은 median 값으로 근사하기. median은 데이터셋에서 가운데 위치한 값을 의미.
마지막으로 row를 삭제하기.

6. Setting Up Your Data

데이터셋을 정리한 후에 다음으로 할 일은 데이터를 훈련용과 테스트용의 2 개의 세그먼트로 나누는 것이며, 이를 split validation이라 한다. 나누는 비유은 보통 70/30 혹은 80/20이다.
나누기 전에 row를 임의의 순서로 섞는 것이 필수다.
그 다음 단계는 모델이 잘 동작하는지 측정하는 것이다. 다양한 성능 지표가 있으며 올바른 방법을 선택하는 것은 모델의 적용방법에 따라 달라진다.
Area under the curve (AUC) - Receiver Operating Characteristic (ROC), confusion matrix, recall, and accuracy가 이메일 스팸 검출 시스템 같은 분류 작업에 사용되는 성능 지표의 4가지 예이다. 반면, mean absoute error와 root mean square error (RMSE)는 주택의 가격을 예상하는 것과 같은 숫자 출력을 제공하는 모델의 평가에 일반적으로 사용된다.

Cross Validation

작은 데이터를 2개의 세그먼트로 나누는 것은 나중에 실 데이터를 올바르게 예측하지 못할 수 있다. 2개로 나누는 대신에 cross validation을 통해서 문제를 해결할 수 있다.
첫번째 방법은 exhaustive cross validation으로 원본 데이터를 훈련용 세트와 테스트 세트로 나누는 모든 가능한 조합을 찾고 테스트한다.
또 다른 그리고 일반적인 방법은 non-exhaustive cross validation으로 k-fold validation으로 알려져있다. 데이터를 k개의 버킷으로 나누고 그 중 하나의 버킷을 각 회차의 테스트용으로 남겨둔다. 이 방식으로 k회차 (fold) cross validation techique을 반복한다.

How Much Data Do I Need?

절대적인 최소값으로, 기본적은 기계 학습 모델은 모든 features 개수의 10배 이상의 데이타 포인트를 포함해야한다. 5개의 feature를 갖는 작은 모델이라면 이상적으로는 적어도 50 row를 가져야한다.
더 많은 정보에 대해서는, Scikit-learn에 상이한 데이타 세트에 맞는 알고리즘에 대한 cheat sheet가 있다.
이 책에서 언급한 알고리즘을 사용해 파이썬으로 모델을 코딩하는 방법에 대한 동영상 튜토리얼은 아래 페이지에서 찾을 수 있다.

7. 선형 회귀 Linear Regression

regression line에 대한 기술적인 용어는 hyperplane이다. 선형 회귀의 목적은 hyperplane과 관찰된 값 사이의 거리를 최소화하는 방향으로 데이터를 나누는 것이다.

The Slope

선형회귀에서 중요한 부분이 slope인데, hyperplane을 참조하여 편리하게 계산할 수 있다.

Linear Regression Formula

선형 회귀의 공식은 y = bx + a다.
y는 의존 변수를, x는 독립 변수를 나타낸다.
a는 hyperplane과 y 축이 만나는 지접으로 y-intercept 혹은 x = 0일 때의 y값이라고 알려져있다.
b는 slope의 경사도를 나타낸다.

Calculation Example

Multiple Linear

Discrete Variables

Variable Selection

두 개의 독립 변수 사이에 강한 선형 상관관계가 존재한다면, multi-collinearity라고 하는 문제로 이어질 수 있다.
multi-collinearity를 피하려면, scatterplot, pairplot, correlation score 등을 사용해 독립 변수들의 각 조합 사이의 관계를 확인할 필요가 있다.
요약하자면, multiple linear regression의 목적은 모든 독립 변수들이 의존 변수들과 연관성을 가지면서 서로간에는 연관성을 갖지 않는 것이다.

8. 로지스틱 회귀 Logistic Regression

변수 간의 선형적인 관계를 수량화하는 대신에, 로지스틱 회귀와 같은 분류 기법을 쓸 필요가 있다.
로지스틱 회귀는 여전히 지도 학습 기법이지만 양적인 예측보다는 질적인 예측을 생성한다. 이 알고리즘은 임신 여부와 같이 두 가지 중 하나의 종류를 예측하는데 흔히 사용한다.
시그모이드 sigmoid 함수를 사용해, 로지스틱 회귀는 독립 변수 (X)가 스팸이냐 아니냐와 같은 이산 의존 변수 (Y)를 생성할 확률을 찾는다.
로지스틱 회귀는 선형 회귀와 비슷하게 생겼지만, 로지스틱 hyperplane은 예측 경향선이 아닌 분류/결정을 나타낸다. Hyperplane은 수치 예측값을 만들기 위해서가 아니라 데이터셋을 클래스로 나누기 위해 사용된다.
2개 이상의 이산 결과를 갖는 분류 시나리오에서는 multinomial 로지스틱 회귀가 사용될 수 있다.
그렇지만, 로지스틱 회귀의 핵심 강점은 이진 예측에 있다는 것을 명심하라. Decision trees나 support vector machines와 같은 다른 분류 알고리즘에 다중 클래스 문제를 해결하는데 더 나은 옵션일 수 있다.
일반적으로, 로지스틱 회귀는 큰 데이터셋에는 잘 동작하지 않는다. 특히 아웃라이어를 포함한 지저분한 데이터나 복잡한 관계 그리고 누락된 값을 포함하고 있다면.
더 알고 싶다면 Brandon Foltz의 유튜브에서 Staticstics 101: Logistic Regression 시리즈를 확인하라.

9. k-Nearest Neighbors

기계 학습에서 또 다른 유명한 분류 기법은 k-nearest neighbors (k-NN)이다. 지도 학습 알고리즘으로서, k-NN은 가까운 데이터 포인트에 대한 위치를 기반으로 새로운 데이터 포인트들을 분류한다.
k를 너무 낮게 하면 편향이 늘고 오분류되기 쉽고, k를 너무 높게 하면 계산이 비싸진다. k를 홀수로 정하면 통계적 교착상태 (statistical stalemate) 및 잘못된 결과의 가능성을 제거하는데 도움이 된다.
(중략) 이런 이유로, k-NN은 일반적으로 큰 데이터셋을 분석하는데 추천하지 않는다.
또 다른 단점은 많은 features를 가진 높은 차원의 데이터에 k-NN을 적용하기 힘들다는 점이다. 높은 차원의 공간에서 데이터 포인트 간의 여러 거리를 측정하는 것은 컴퓨팅 리소스에 부담이 되고 정확한 분류를 수행하기가 더 어려워 진다.

10. k-Means Clustering

다음의 분석 방법은 비지도 학습을 사용해 비슷한 속성을 공유하는 데이터 포인트를 그루핑하거나 클러스터링한다.
유명한 클러스터링 기법중 하나는 k-means 클러스터링이다. k-means 클러스터링는 먼저 데이터를 k 개의 클러스터로 나누는 것으로 시작하며, k는 생성하려는 클러스터의 개수를 나타낸다.
k-means 클러스터링은 어떻게 데이터 포인트를 분류할까? 첫 번째 단계는 클러스터링 되지 않은 데이터를 조사하고 수동으로 각 클러스터의 centroid를 선택한다.
(중략) 다시 말해, 각 클러스터의 centroid가 위치할 것이라고 생각하는 곳을 추측하는 것으로 시작하라.

k 정하기

k를 최적화히기 위해, 가이드로서 scree plot을 사용할 수 있다. scree plot는 클러스터의 전체 개수그 증가함에 따라 하나의 클러스터 안의 흩어진 정도(분산)를 차트로 보여준다. Scree plot은 전체 클러스터의 각 분산에 대해 Sum of Squared Error (SSE)를 비교한다.
(중략) 예를 들어, 그림 35에서, 4개 이상의 클라스터의 경우에 SSE의 변화가 거의 없다. 이 scree plot에서, 둘 혹은 세 개의 클러스터가 이상적인 해결책으로 보인다.
클러스터 해법에서 개수를 정하는 또 다른 유용한 기법은 데이터 포인트의 전체 개수(n)을 2로 나누어 제곱근을 구하는 것이다. 200개의 데이터 포인트가 있다면, 추천하는 클러스터의 개수는 10개인 반면, 18개의 데이터 포인트에서, 제안하는 클러스터의 숫자는 3개다.
k를 정하는 보다 단순하고 비수학적인 접근은 도메인 지식을 적용하는 것이다.

11 Bias & Variance

기계학습에 항상 존재하는 도전은 과소적합 underfitting과 과적합 overfillting 사이의 균형점을 찾는 것으로, 데이터의 실제 패턴에 얼마나 가깝게 따르는지를 설명한다. 과소적합과 과적합을 이해하려면 편향 bias과 분산 variance을 이해해야 한다.
높은 편향은 예측값이 실제 값에서 특정 방향으로 치우칠 가능성이 높다. 편차는 예측값이 서로에 대해 얼마나 흩어져 있는지를 설명한다.
정확도를 높이려고 모델에 복잡도를 추가하려는 자연스러운 욕구는 과적합으로 이어질 수 있다. 과적합된 모델은 훈련 데이터를 사용하여 정확한 예측을 생성하지만 테스트 데이터를 사용하여 예측을 수행하는데는 덜 정확하다.
과소적합의 일반적 원인에는 모든 가능한 조합을 적절하게 포함하기에는 불충분한 훈련 데이터, 그리고 훈련과 테스트 데이터가 적절하게 섞이지 않은 상황이 있습니다.
과적합을 방지하기 위한 고급 전략에는 정규화를 도입하는 것으로, 모델이 더 단순해지게 제한함으로서 과적합의 위험을 줄인다.

12 Support Vector Machine

오늘날 SVM은 대부분 분류 결과를 예측하기 위한 분류 기법으로 사용된다.
로지스틱 회귀와 유사하게 데이터 포인트를 두 개의 클래스로 나누지만, SVM 경계선은 데이터 포인트의 두 클래스와 자기자신 사이의 거리가 최대가 되도록 나눈다.
Margin을 의미하는 회색 영역이 보이는데, 결정 경계선과 가장 가까운 데이터 사이의 거리를 2로 곱한 거리다. 이 margin이 SVM의 핵심적인 부분이며 결정 경계를 침해하는 새로운 데이터 포인터를 다룰 수 있는 추가적인 지원을 제공하기 때문에 중요하다.
(로지스틱 회귀가 예외적인 데이터에 민감하다는 내용이 나옴)
반면에 SVM은 그런 데이터 포인트에 덜 민감하며 경계선의 최종 위치에 주는 영향을 실제로 최소화한다. SVM은 이와같이 변화량이 큰 데이터를 관리하는 방법으로 사용될 수 있다.
SVM 경계는 C라고 불리는 하이퍼파라메터를 사용해 훈련데이터의 오분류 사례를 무시하도록 변경될 수 있다.
그래서 SVM에는 넓은 마진/많은 실수좁은 마진/적은 실수 사이의 트레이드 오프가 존재한다. 모델의 더 높은 목표는”너무 엄격하지 않음”과 “너무 느슨하지 않음” 사이의 균형을 맞추는 것이고, C 하이퍼파라메터를 수정함으로써 어느 정도의 오분류 사례를 무시할지 통제할 수 있다.
최적의 C 값을 찾는 것은 일반적으로 시행착오를 기반으로 실험적으로 선택되는데, grid search라고 하는 기법을 사용해 자동화될 수 있다.
SVM의 진짜 강점은 높은 차원의 데이터와 복수의 features를 다루는데 있다. Kernel 트릭은 높은 차원의 선형 분류를 사용해서 비선형 성격의 데이터 포인트를 분류할 수 있게 한다.
Standardization은 StandardScaler를 사용한 Scikit-learn에서 구현된다. StdandardScaler 문서는 http://bit.ly/378pf9Q에 있다.
마지막으로, 모델을 훈련시키는 처리 시간은 로지스틱 회귀나 다른 분류 알고리즘에 상대적으로 SVM에 단점이 될 수 있다. 그러나, SVM은 중소 규모의 데이터셋에서 아웃라이어의 엉킴을 풀고 높은 차원의 데이터를 관리하는데 탁월하다.

13 Artificial Neural Networks

신경망의 각 에지에는 경험에 기반해 수정될 수 있는 가중치가 있다. 연결된 에지의 함이 정해진 임계치를 만족하면 (activation function이라고 알려진), 다음 레이어의 뉴런을 활성화한다.
훈련의 목적은 모델의 예측이 정확한 출력과 거의 일치할 때까지 비용값을 줄이는 것이다. 이는 가능한 낮은 비용값이 얻어질 때까지 신경망의 가중치를 점진적으로 조정함으로써 달성된다. 신경망을 훈련하는 이런 과정은 역전파 back-propagation라고 불린다. 신경망에 데이터가 제공되는 방향인 왼쪽에서 오른쪽으로 탐색하는 대신에, 역전파는 오른쪽의 출력 레이어에서 왼쪽의 입력 레이어로 역전된다.

The Black-box Dilemma

(신경망이 블랙 박스 기법이라고 할 때) 이는 언제 신경망을 사용해야 할지 의문을 불러일으킨다. 이 질문에 답하자면, 신경망은 일반적으로 많은 수의 입력 features와 복잡한 패턴을 가진 예측 작업, 그리고 특히 컴퓨터가 해독하기는 어렵지만 사람에게는 단순하고 거의 사소한 문제에 잘 맞는다.

Building a Neural Network

이것이 레이어 수가 많은 모델을 그들의 더 깊고 우수한 처리 능력을 구별하기 위해서 딥 러닝이라고 부르는 이유다. 신경망의 노드를 조립하는 많은 기법이 있지만, 가장 단순한 방법은 신호가 한 방향으로만 흐르고 신경망 내에 루프가 없는 feed-forward network이다. feed-forward 신경망의 가장 기본적인 현태는 perceptron이며, 1950년대에 Frank Rosenblatt 교슈에 의해 고안되었다.
perceptron의 대안중 하나는 sigmoid neuron이다. Sigmoid neuron은 perceptron과 유사하지만 이진 필터 대신에 sigmoid 함수가 존재하여 0에서 1사이의 어떤 값이라도 받을 수 있게된다.
perceptron보다 유연하지만, sigmoid neuron은 음수를 생성할 수 없다. 따라서 세 번째 옵션은 hyperbolic tangent function이다.

Multilayer Perceptrons

다중 레이어 perceptron은 다중 모델을 통합된 예측 모델로 결합할 수 있어서 강력하다.

Deep Learning

딥러닝을 “딥"하게 만드는 것은 적어도 5~10 노드 레이어를 쌓는 것이다.
자율 주행 자동차가 보행자나 다른 차량과 같은 물체를 인식하는데 사용하는 것과 같은, 물체 인식은 150개 이상의 레이어를 사용하며 딥러닝의 인기있는 응용방법이다.
Convolution network이 틀림없이 가장 유명하고 강력한 딥러닝 기법이지만, 새로운 방법과 변형이 계속해서 진화하고 있다.

14 Decision Trees

신경망을 사용해 모든 기계 학습 문제를 해결하려는 어떤 시도의 첫번째 부정적인 면은 신경망 훈련에는 거대한 양의 입력 데이터와 계산 비용이 필요하다는 것이다.
신경망의 또 다른 주요 단점은 블랙박스 딜레마로, 이는 모델의 결정 구조를 감춘다. 반면에, 결정 트리는 이해하기 쉽고 투명하다.
결정 트리는 주로 분류 문제를 푸는데 사용되지만 숫자 결과값을 예측하는 회귀 모델로써도 사용된다.
결정 트리의 매력중 하나는 그래픽적으로 표시할 수 있고 비전문가에게 설명하기 쉽다는 점이다.

Building a Decision Tree

Calculating Entropy

Overfitting

대신에, 트리의 꼭대기에서 덜 효율적으로 나누는 것이 보다 정확한 모델을 생산할 수도 있다. 이와같이, 결정 트리가 매우 시각적이고 하나의 데이터셋을 분류하는데 효과적일지라도, 과적합에는 취약하고 유연하지 못하다. 특히 패턴의 변화가 큰 데이터셋에 대해서는.

Bagging

재귀적인 파티셔닝의 각 라운드에서 가장 효과적인 분할을 목표로 하는 대신, 또 다른 기법으로 다중의 트리를 만들고 그들의 예측값을 결합하는 방법이 있다.

Random Forests

Boosting

이는 학교의 선생님의 가장 최근의 시험에서 성적이 좋지 않은 학생들을 추가적으로 지도함으로써 반의 성적을 개선하는 것과 유사하다.

15 Ensemble Modeling

중요한 결정을 할 때 여러 사람의 의견을 종합해보는 것처럼, 데이터에 맞는 최고의 모델을 찾기 위해 하나 이상의 알고리즘을 시도해보는 것이 좋다. 앙상블 모델링이라는 방법을 사용해서 알고리즘이나 모델을 합치는 것이 유리할 수 있다. 같은 에러를 잘못 다루는 것을 방지하기 위해서 앙상블 모델에 어느 정도의 변형을 표시하는 것이 중요하다.
적절한 앙상블 모델링 기법을 선택하는 4개의 주요 방법이 있다. bagging, boosting, a bucket of models, stacking
다른 종류로 이루어진 heterogenous 앙상블 테크닉으로서, bucket of models는 다중의 알고리즘 모델을 동일한 훈련 데이터로 훈련하고 테스트 데이터에 가장 성능이 좋은 것을 것을 고른다.
Bagging은 같은 종류의 homogenous 앙상블을 사용해 평균화 하는 병렬 모델의 예로, 무작위로 추출된 데이터를 사용하고 예측값을 결합하여 통합된 모델을 설계합니다.
Boosting은 인기있는 대안 기법으로 여전히 같은 종류의 homogenous 앙상블이며 연속적인 모델의 생성하기 위해 이전 반복에서 오분류된 데이터와 에러를 해결한다. Gradient boosting과 AdaBoosting이 boosting 알고리즘의 예.
Stacking은 같은 데이터에 여러 모델을 동시에 실행하고 최종 모델을 생성하기 위해 그 결과를 합친다. Boosting이나 bagging과는 다르게, stacking은 같은 알고리즘 (homogenous)의 하이퍼파라메터를 수정하는 대신에, 보통 다른 알고리즘 (heterogenous)의 결과를 합친다.

16 Development Environment

Jupyter Notebook 사용. pip를 통해 설치하거나 http://jupyter.org/install.html에 설치방법 참고.
초보자에게는 Anaconda Distribution 옵션 추천 (https://www.anaconda.com/products/individual/)
conda를 사용한다면 conda install -c conda-forge jupyterlab처럼 하면 됩니다.
터미널이나 커맨드 라인에 아래 명령어 입력하면 URL이 생성됨
jupyter notebook
Bash
생성된 URL을 웹브라우저 주소창에 복사 후에 이동. 오른쪽위의 New 단추를 눌러서 새 노트북 생성

Import Libraries

# Import library import pandas as pd
Python

Import Dataset and Preview

아래 링크에서 멜버른의 주택 데이터셋을 다운로드 가능.
압축을 풀고 Jupyter Notebook에 임포트
df = pd.read_csv('~/Downloads/Melbourne_housing_FULL.csv')
df = pd.read_csv('~/Downloads/Melbourne_housing_FULL.csv')
Python
데이터 앞쪽의 몇 줄만 보기
df.head()
Python

Find Row Item

100번째 줄 보기. 첫번째 줄의 인덱스는 0임.
df.iloc[100]
Python

Print Columns

Columns 정보 보기.
df.columns
Python

17. Building A Model In Python

gradient boosting을 사용해 주택 가격 평가 시스템을 설계해 봄. 아래의 6개의 스텝을 설명
1) 라이브러리 임포트
2) 데이터셋 임포트
3) 데이터셋 스크럽
4) 데이터를 훈련용과 테스트용으로 분리
5) 알고리즘을 선택하고 하이퍼파라메터 설정
6) 결과 평가

1) Import Library

gradient boosting (앙상블)와 mean absolute error를 포함한 Scikit-learn 및 Pandas 임포트
import pandas as pd from sklearn.model_selection import train_test_split from sklearn import ensemble from sklearn.metrics import mean_absolute_error
Python

2) Import Dataset

df = pd.read_csv('~/Downloads/Melbourne_housing_FULL.csv')
Python

3) Scrub Dataset

Scrubbing Process

사용하지 않는 Columns 제거
del df['Address'] del df['Method'] del df['SellerG'] del df['Date'] del df['Postcode'] del df['Lattitude'] del df['Longtitude'] del df['Regionname'] del df['Propertycount']
Python
(gradient boosting과 random forests를 포함한) 결정 트리 기반 모델은 많은 수의 입력 변수가 있는 많고 높은 차원의 데이터셋을 관리하는데 능숙하다.
누락된 값을 가진 rows를 제거하기
df.dropna(axis = 0, how = 'any', thresh = None, subset = None, inplace = True)
Python
one-hot encoding을 사용해 수치가 아닌 데이터를 수치로 변환하기
df = pd.get_dummies(df, columns = ['Suburb', 'CouncilArea', 'Type'])
Python
Price를 y로 X를 나머지 11 변수로 사용하여 종식 및 독립변수를 지정
X = df.drop('Price',axis=1) y = df['Price']
Python

4) Split the Dataset

표준의 70/30 비율로 분할하고 섞음
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, shuffle = True)
Python

5) Select Algorithm and Configure Hyperparameters

선택한 알고리즘 gradient boosting regressor를 지정하고 하이퍼파라메터를 설정
model = ensemble.GradientBoostingRegressor( n_estimators = 150, learning_rate = 0.1, max_depth = 30, min_samples_split = 4, min_samples_leaf = 6, max_features = 0.6, loss = 'huber' )
Python
n_estimators는 결정 트리의 개수. 트리의 개수가 많을 수록 정확도가 높지만 처리 시간이 늘어남learning_rate는 전체 예측에 영향을 주는 추가적인 결정 트리의 비율을 제어 max_depth는 결정 트리의 층(깊이)의 개수를 정의 min_sample_split은 새 이진 분할을 실행할는데 필요한 샘플의 최소 개수를 정의 min_sample_leaf 새 브랜치가 구현되기 전에 각 자식 노트(leaf)에 보여야 하는 샘플의 최소 개수를 의미 max_features 최상 분할을 셜정할 때 모델에 표현되는 features의 전체 개수 loss는 모델의 에러 비율을 계산
훈련 데이터와 학습 알고리즘을 연결하고 훈련시키기
model.fit(X_train, y_train)
Python

6) Evaluate the Results

훈련 데이터에 대해서 mean absolute error를 사용해 모델의 정확도 평가
mae_train = mean_absolute_error(y_train, model.predict(X_train)) print ("Training Set Mean Absolute Error: %.2f" % mae_train)
Python
같은 과정을 테스트 데이터를 사용해 반복
mae_test = mean_absolute_error(y_test, model.predict(X_test)) print ("Test Set Mean Absolute Error: %.2f" % mae_test)
Python
훈련 데이터와 테스트 데이터 사이의 결과 차이가 큰 것은 보통 과적합을 의미

18. Model Optimization

미래의 데이터에 대한 예측 정확도를 높이고 과적합의 영향을 줄이고 싶음. 하이퍼파레메터의 변경으로 시작하는 것이 좋음. maximum depth를 30에서 5로 변경해서 과적합의 이슈를 줄임. n_estimators를 250으로 설정하여 훈련 데이터에 대한 absoute error rate를 줄임
feature 선택은 또 다른 중요한 최적화 기법.
자동화된 모델 최적화 방법으로 grid search가 있음. 모든 조합을 시도해야 하므로 시간이 오래 걸림. 이어지는 10의 승수(예 0.01, 0.1, 10)를 사용해 큰 단위로 실행하고 나서 최적의 값 근처에서 작은 단위로 grid search를 실행하는 것 추천.
또다른 하이퍼파라메터 최적화 알고리즘은 randomized search로 Scikit-learn의 RandomizedSearchCV 사용.

Next Steps

6개의 비디오 튜토리얼

선형 회귀
로지스틱 회귀
Support vector machines
k-nearest neighbors
k-means clustering
결정 트리

파이썬으로 주택 예측 모델 만들기

다른 자료

Cousera의 무료 Andrew Ng Machine Learning 코스
OCDevel’s 팟캐스트 시리즈: Machine Learning Guide
책 Machine Learning with Python for Beginners
책 Machine Learning: Make Your Own Recommender System

고맙습니다

저자의 인스트그램 채널 machinelearning_beginners
저자의 월간 뉴스레터 http://eepurl.com/gKjQij

추가 자료

기계 학습

Machine Learning

형식: 무료 Coursera 과정
발표자: Andrew Ng
추천 대상: 초보자 (특히 MATLAB을 선호하는 사람)

Project 3: Reinforcement Learning

형식: 온라인 블로그 튜토리얼
저자: EECS Berkeley
추천 대상: 중상급에서 고급

기본 알고리즘

Machine Learning With Random Forests And Decision Trees: A Visual Guide For Beginners

형식: 전자책
저자: Scott Hartshorn
추천 대상: 초보자 Established beginners

Linear Regression And Correlation: A Beginner’s Guide

형식: 전자책
저자: Scott Hartshorn
추천 대상: 전체

AI의 미래

The Inevitable: Understanding the 12 Technological Forces That Will Shape Our Future

형식: 전자책, 책, 오디오북
저자: Kevin Kelly
추천 대상: 전체 (미래에 관심이 있는)

Homo Deus: A Brief History of Tomorrow

형식: 전자책, 책, 오디오북
저자: Yuval Noar Harari
추천 대상: 전체 (미래에 관심이 있는)

프로그래밍

Learning Python, 5th Edition

형식: 전자책, 책
저자: Mark Lutz
추천 대상: 전체 (파이썬 학습에 관심이 있는)

Hands-On Machine Learning with Scikit-Learn and TensorFlow: Concepts, Tools, and Techniques to Build Intelligent Systems

형식: 전자책, 책
저자: Aurélien Géron
추천 대상: 전체 (파이썬, Scikit-Learn, TensorFlow에 관심이 있는)

추천 시스템

The Netflix Prize and Production Machine Learning Systems: An Insider Look

형식: 블로그
저자: Mathworks
추천 대상: 전체

Recommender Systems

형식: Cousera 과정
발표자: Minnesota 대학교
비용: 7일 무료 학습 혹은 $49 USD Cousera 서브스크립션에 포함
추천 대상: 전체

딥 러닝

Deep Learning Simplified

형식: 블로그
채널: DeepLearning.TV
추천 대상: 전체

Deep Learning Specialization: Master Deep Learning, and Break into AI

형식: Cousera 과정
발표자: deeplearning.ai와 NVIDIA
비용: 7일 무료 학습 혹은 $49 USD Cousera 서브스크립션에 포함
추천 대상: 중급에서 고급 (파이썬 경험이 있는)

Deep Learning Nanodegree

형식: Udacity 과정
발표자: Udacity
비용: $599 USD
추천 대상: 초급에서 고급, 파이썬 기본 경험이 있는

미래의 경력

Will a Robot Take My Job?

형식: 온라인 기사
저자: The BBC
추천 대상: 전체

So You Wanna Be a Data Scientist? A Guide to 2015's Hottest Profession

형식: 블로그
저자: Todd Wasserman
추천 대상: 전체