빅 데이터 분석-의사 결정 트리

의사 결정 트리는 분류 또는 회귀와 같은지도 학습 문제에 사용되는 알고리즘입니다. 의사 결정 트리 또는 분류 트리는 각 내부 (비 리프) 노드가 입력 기능으로 레이블이 지정된 트리입니다. 피쳐로 레이블이 지정된 노드에서 나오는 호에는 피쳐의 가능한 각 값으로 레이블이 지정됩니다. 트리의 각 잎은 클래스 또는 클래스에 대한 확률 분포로 레이블이 지정됩니다.

속성 값 테스트를 기반으로 소스 세트를 서브 세트로 분할하여 트리를 "학습"할 수 있습니다. 이 프로세스는 파생 된 각 하위 집합에서 호출되는 재귀 방식으로 반복됩니다.recursive partitioning. 재귀는 노드의 하위 집합이 모두 동일한 대상 변수 값을 갖거나 분할이 더 이상 예측에 값을 추가하지 않을 때 완료됩니다. 의사 결정 트리의 하향식 유도 프로세스는 탐욕스러운 알고리즘의 예이며 의사 결정 트리를 학습하는 가장 일반적인 전략입니다.

데이터 마이닝에 사용되는 의사 결정 트리는 두 가지 주요 유형입니다.

  • Classification tree − 응답이 명목 변수 인 경우 (예 : 이메일이 스팸인지 여부).

  • Regression tree − 예측 된 결과가 실수로 간주 될 수있는 경우 (예 : 근로자의 급여).

의사 결정 트리는 간단한 방법이므로 몇 가지 문제가 있습니다. 이 문제 중 하나는 의사 결정 트리가 생성하는 결과 모델의 높은 분산입니다. 이 문제를 완화하기 위해 의사 결정 트리의 앙상블 방법이 개발되었습니다. 현재 광범위하게 사용되는 두 그룹의 앙상블 방법이 있습니다.

  • Bagging decision trees−이 트리는 훈련 데이터를 반복적으로 리샘플링하여 교체하고 합의 예측을 위해 트리에 투표하여 여러 의사 결정 트리를 구축하는 데 사용됩니다. 이 알고리즘을 랜덤 포레스트라고합니다.

  • Boosting decision trees− 그라디언트 부스팅은 약한 학습자를 결합합니다. 이 경우 의사 결정 트리를 반복적 인 방식으로 강력한 단일 학습자로 전환합니다. 약한 트리를 데이터에 맞추고 이전 모델의 오류를 수정하기 위해 반복적으로 약한 학습자를 계속 맞 춥니 다.

# Install the party package
# install.packages('party') 
library(party) 
library(ggplot2)  

head(diamonds) 
# We will predict the cut of diamonds using the features available in the 
diamonds dataset. 
ct = ctree(cut ~ ., data = diamonds) 

# plot(ct, main="Conditional Inference Tree") 
# Example output 
# Response:  cut  
# Inputs:  carat, color, clarity, depth, table, price, x, y, z  

# Number of observations:  53940  
#  
# 1) table <= 57; criterion = 1, statistic = 10131.878 
#   2) depth <= 63; criterion = 1, statistic = 8377.279 
#     3) table <= 56.4; criterion = 1, statistic = 226.423 
#       4) z <= 2.64; criterion = 1, statistic = 70.393 
#         5) clarity <= VS1; criterion = 0.989, statistic = 10.48 
#           6) color <= E; criterion = 0.997, statistic = 12.829 
#             7)*  weights = 82  
#           6) color > E  

#Table of prediction errors 
table(predict(ct), diamonds$cut) 
#            Fair  Good Very Good Premium Ideal 
# Fair       1388   171        17       0    14 
# Good        102  2912       499      26    27 
# Very Good    54   998      3334     249   355 
# Premium      44   711      5054   11915  1167 
# Ideal        22   114      3178    1601 19988 
# Estimated class probabilities 
probs = predict(ct, newdata = diamonds, type = "prob") 
probs = do.call(rbind, probs) 
head(probs)