빅 데이터 분석-의사 결정 트리
의사 결정 트리는 분류 또는 회귀와 같은지도 학습 문제에 사용되는 알고리즘입니다. 의사 결정 트리 또는 분류 트리는 각 내부 (비 리프) 노드가 입력 기능으로 레이블이 지정된 트리입니다. 피쳐로 레이블이 지정된 노드에서 나오는 호에는 피쳐의 가능한 각 값으로 레이블이 지정됩니다. 트리의 각 잎은 클래스 또는 클래스에 대한 확률 분포로 레이블이 지정됩니다.
속성 값 테스트를 기반으로 소스 세트를 서브 세트로 분할하여 트리를 "학습"할 수 있습니다. 이 프로세스는 파생 된 각 하위 집합에서 호출되는 재귀 방식으로 반복됩니다.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)