Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 오라클
- 실습
- 파이썬
- 실기
- sklearn
- seaborn
- 프로그래머스
- matplotlib
- pandas
- level 2
- Numpy
- oracle
- 알고리즘
- Python
- R
- Kaggle
- level 1
- 머신러닝
- 빅데이터 분석 기사
- 코딩테스트
- 데이터 분석
- Oracel
- SQL
- python3
- 튜닝
- 카카오
- 빅분기
Archives
- Today
- Total
라일락 꽃이 피는 날
[R] Hierarchical clustering (계층적 군집화) 본문
728x90
Hierarchical clustering (계층적 군집화)
가장 가까운 데이터끼리 순차적(계층적)으로 묶어 나가는 군집화 기법
Hierarchical clustering process
1. 모든 데이터들 간의 거리 행렬(유사도 행렬) 생성
- 유클리드 거리 / 맨하탄 거리 / Correlation
2. 군집을 구성할 방법 선택
- 최단거리법 (single) / 최장거리법 (complete) / 평균기준법 (average) / 중앙중심법 (median) / Ward’s method
3. 군집화
데이터 확인
df <- USArrests
head(df)

결측치 확인
colSums(is.na(df))

변수별 기술통계 및 분포 확인
summary(df)

boxplot(df)

표준화
library(dplyr)
df <- scale(df) %>% as.data.frame()
boxplot(df)

이상치 제거
library(tibble)
df.rm.outlier <- df %>% rownames_to_column('rname') %>%
arrange(desc('Rape')) %>%
slice(-1:-2) %>%
column_to_rownames('rname')
boxplot(df.rm.outlier)

유사도 행렬 생성 (유클리드 거리)
df.dist <- dist(df.rm.outlier, method = "euclidean")
군집 구성 방식 선택
df.hclust.sing <- hclust(df.dist, method = "single")
df.hclust.cplt <- hclust(df.dist, method = "complete")
df.hclust.avg <- hclust(df.dist, method = "average")
df.hclust.cent <- hclust(df.dist, method = "centroid")
df.hclust.ward <- hclust(df.dist, method = "ward.D2")
dendrogram 생성 & 군집 시각화
plot(df.hclust.sing, cex = 0.6, hang = -1)
rect.hclust(df.hclust.sing, k = 4, border = 2:5)

plot(df.hclust.cplt, cex = 0.6, hang = -1)
rect.hclust(df.hclust.cplt, k = 4, border = 2:5)

plot(df.hclust.avg, cex = 0.6, hang = -1)
rect.hclust(df.hclust.avg, k = 4, border = 2:5)

plot(df.hclust.cent, cex = 0.6, hang = -1)
rect.hclust(df.hclust.cent, k = 4, border = 2:5)

plot(df.hclust.ward, cex = 0.6, hang = -1)
rect.hclust(df.hclust.ward, k = 4, border = 2:5)

raw data에 cluster 할당
df.clusters <- cutree(df.hclust.ward, k = 4)
table(df.clusters)

df.rm.outlier$cluster <- df.clusters
head(df.rm.outlier)

2차원 시각화
library(factoextra)
fviz_cluster(list(data = df.rm.outlier[,1:ncol(df.rm.outlier)-1], cluster = df.clusters))

군집별 평균치 확인 및 시각화
library(reshape2)
temp <- df.rm.outlier %>% melt(id = 'cluster')
head(temp)

df.means <- dcast(temp, cluster ~ variable, mean)
df.means

barplot(t(df.means[,-1]), beside = TRUE, col = 1:4, names.arg = c(1:4))
legend("topright", colnames(df.rm.outlier[1:4]), fill = 1:4, cex = 0.5)

728x90
'데이터 분석 > R' 카테고리의 다른 글
[R] K-means clustering (K-평균 군집화) 2 (0) | 2021.07.08 |
---|---|
[R] K-means clustering (K-평균 군집화) 1 (0) | 2021.07.08 |
[R] PCA (주성분 분석) 2 (0) | 2021.07.08 |
[R] PCA (주성분 분석) 1 (0) | 2021.07.08 |
[R] Support Vector Machine (SVM) (0) | 2021.07.02 |