01 분류분석 (Classification)
01 분류분석 (Classification)
y가 수치형인지, 범주형인지에 따라 분석방법이 달라진다.
y가 수치형인 경우 회귀분석, 범주형인 경우 분류분석을 수행한다.
[ 의사결정나무 ]
- 단 한 개의 트리 구조를 사용하여 Y를 분류하는 모델링 기법
- 비통계 모델(통계적 가정이 필요 없음)
장점)
- 간편, 쉽고 빠름 -> 해석이 용이
- 과적합이 되기 쉬움
단점)
- 과적합 되기 쉬움
- 평가척도를 통게적, 확률적으로 해석 불가
학습과정)
1. 성장
- 불순도 감소량을 기준으로 최족의 분리 기준을 찾아서 가지를 형성함
- 리프노드로 갈수록 불순도가 낮아지도록 성장
2. 정지규칙
- 더 이상 분할을 하지 않는 규칙(현재 노드가 마지막 노드가 되도록 하는 기준)
1) maxdepth : 트리의 높이를 직접적으로 제한
2) minbucket : 최소가지치기기준 (오분류개수 기준) - defalut : 7 (오분류개수가 7개 이상이면 추가 분리 진행)
# minbucket 이 작아지면 최소기준점을 낮게 만들기 때문에 추가 분리가 된다. depth가 큰 tree가 형성되며 복잡도가 증가한다.
# minbucket 이 작아지면 최소기준점을 높게 만들기 때문에 분리가 적게 진행된다. depth가 작은 tree가 형성되며 복잡도가 감소한다.
3. 가지치기
- 트리 depth 조절
- cp table을 사용하여 적절한 가지의 수준 결정
- 복잡도 제어 목적 사용 -> 일반화 성능 향상 목적
[ 예제 - 의사결정나무를 사용한 분류분석 (iris) ]
목표 : iris의 speices(y)를 정확하게 예측하는 분류모형 생성
1. 데이터 탐색
1) 기술통계량
> summary(iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100 setosa :50
1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300 versicolor:50
Median :5.800 Median :3.000 Median :4.350 Median :1.300 virginica :50
Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
2) 시각화
2-1) 교차산점도 : 상관관계, y분류의 직접적인 변수 확인
plot(iris[,-5], col = iris$Species)

2-2) 이상치
boxplot(iris[,-5])

2. 데이터 처리
변수 변환, 변수 선택, 스케일링, ...
tree 기반 모델의 장점은 스케일링을 고려하지 않아도 됨
3. 모델링
1) 훈련 / 평가 데이터 분리 (7:3)
sample(1:45, 6)
sample(1:45, 6, replace = T) # 같은 숫자가 여러번 나와도 될 때
set.seed(0)
rn <- sample(1:nrow(iris), nrow(iris) * 0.7)
iris_train <- iris[rn, ]
iris_test <-iris[-rn, ]
2) 학습
install.packages('rpart')
library(rpart)
rpart(formula = , # y ~ x
data = , # 데이터 이름
control = ) # 매개변수 (하이퍼파라미터 전달)
m1 <- rpart(Species ~ .,iris_train)
m1
node), split, n, loss, yval, (yprob)
* denotes terminal node
노드번호), 분리기준, 총개수, 오분류개수, y 대표값, (각 클래스별 확률)
* 마지막 노드
1) root 105 67 setosa (0.36190476 0.33333333 0.30476190)
# 1번 노드) 루트노드, 105개(train), setosa 비율, versicolor 비율, virginica 비율
# setosa 비율이 가장 높기 때문에 집단의 이름이 setosa가 됨
2) Petal.Length< 2.35 38 0 setosa (1.00000000 0.00000000 0.00000000) *
# 2번 노드) (질문) Petal.Length가 2.35보다 작은 쪽
# 38개가 옴. (1번노드의 105개 중 38개의 Petal.Length가 2.35보다 작음)
# 오분류율 0, setosa만 있기 때문에 집단의 이름은 setosa가 되며 불순도가 0이기 때문에 종료.
3) Petal.Length>=2.35 67 32 versicolor (0.00000000 0.52238806 0.47761194)
6) Petal.Width< 1.75 37 3 versicolor (0.00000000 0.91891892 0.08108108) *
7) Petal.Width>=1.75 30 1 virginica (0.00000000 0.03333333 0.96666667) *
# 3) 모델결과 시각화
plot(m1)
text(m1, cex = 0.7)
install.packages('rpart.plot')
library(rpart.plot)
prp(m1, # 모델이름
type = 4, # 트리스타일
extra = 3) # 2: 정분류개수, 3: 오분류개수

'아이티윌_데이터 분석 55기 > 강의내용 필기_통계 및 분석' 카테고리의 다른 글
| #12 12일차_교차검증, 분류모형, 군집분석 (0) | 2026.04.28 |
|---|---|
| #11 11일차_분석 과정, 앙상블 모형, 랜덤포레스트 (0) | 2026.04.27 |
| #9 9일차_교차분석, 변수 선택 (0) | 2026.04.23 |
| #8 8일차_가설검정 절차, 문제풀이 (0) | 2026.04.22 |
| #7 7일차_카이제곱검정, F분포, ANOVA (0) | 2026.04.21 |