빅데이터 분석 ;군집 ; Clustering
군집분석이란 ?
군집의 개수, 내용, 구조 등이 완전히 알려지지 않은 상태에서,
변수 사이의 유사성(similarity)이나 비유사성(또는 거리, distance)에 근거하여 군집을 형성
하는 탐색적 자료분석입니다.
마케팅에서 주로 군집분석을 사용하죠 !
마케팅의 용어 중 "STP" 라고 다들 아시나요 ?
STP 중 Segmentation, 고객 분류 시 주로 clustering 사용하곤 해요 !
clustering은
계층적(Hierarchical) clustering과 비계층적(Non-hierarchical) clustering으로 나뉘는데요.
계층적 클러스터는 "Single Linkage" "Complete Linkage" "Average Linkage" "Ward" 다시 이렇게 나뉘어지고
비계층적 클러스터는 k-means 를 사용합니다.
Single Linkage는 변수간의 최소 거리를 통해 묶는 방법이고,
Complete Linkage는 최대 거리를통해 묶는 방법,
Average Linkage는 그 거리의 평균 거리로 묶는 방법입니다.
Ward는 거리 간 오차의 제곱합으로 묶는 방법입니다.
비계층적 클러스터 중 k-means는 k개의 군집으로 묶어달라, 라는 의미인데
주로 그래프가 꺾이는 지점을 적당한 k 값으로 설정하고 있어요.
데이터 읽기
univ <- read.table("UNIV.DAT")
names(univ) <- c("name", "sat", "top10", "accept", "sfratio", "expenses", "grad")
변수의 특성이 각각 다르기 때문에 변수 표준화
X <- scale(univ[,2:7])
str( univ)
그래프를 활용하여 데이터 탐색
par(mfrow = c(3, 4))
hist(univ$sat)
hist(univ$top10)
hist(univ$accept)
hist(univ$sfratio)
hist(univ$expenses)
hist(univ$grad)
barplot(table(univ$name))
계층적 군집분석을 활용한 군집분석
plot(hclust(dist(X),method="single"),xlab="",ylab="Distance",labels=univ$name)
"Single Linkage"
plot(hclust(dist(X),method="complete"),xlab="",ylab="Distance",labels=univ$name)
"Complete Linkage"
plot(hclust(dist(X),method="average"),xlab="",ylab="Distance",labels=univ$name)
"Average Linkage"
plot(hclust(dist(X),method="ward"),xlab="",ylab="Distance",labels=univ$name)
"Ward"
K-means를 활용한 군집분석
군집 개수가 4개일 때와 5개일 때, 그리고 10번 수행했을 때 나온 결과 출력
kmeans(X,4) # the number of clusters, k = 4
kmeans(X,5) # the number of clusters, k = 5
10번 수행해서 제일 나은 결과 출력
kmeans(X,5,nstart=10)
적절한 k 수 정하기
WSS = pseudoF = numeric()
n = nrow(X)
for (k in 3:7) {
obj = kmeans(X,k)
WSS[k] = obj$tot.withinss
R.sq = 1 - obj$tot.withinss/obj$totss
pseudoF[k] = (R.sq/(k-1))/((1-R.sq)/(n-k))
}
par(mfrow=c(1,2))
plot(2:8,WSS[2:8],type="b",xlab="number of clusters",ylab="within SS")
plot(2:8,pseudoF[2:8],type="b",xlab="number of clusters",ylab="pseudo F statistic")
k = 5,6이 적절
Metric MDS : cmdscale 함수 이용 (stats 패키지)
cmdscale = 행렬 데이터 상의 데이터 값을 거리로 생각하고 2차원 상에 표현
D = dist(X)
names(D) = c(as.character(univ[,1]))
(obj = cmdscale(D,k=2))
plot(obj[,1],obj[,2],type="n",axes=F,xlab="",ylab="")
text(x=obj[,1],y=obj[,2],names(D),cex=0.9)
library(cluster)
fcl3 <- fanny(univ, 4)
fcl4 <- fanny(univ, 5)
summary(fcl3)
> ```
summary(fcl4)
par(mfrow = c(1, 2))
plot(fcl3)
plot(fcl4)
```
'통계 이야기' 카테고리의 다른 글
빅데이터 ; R markdown 실습하기 (0) | 2021.08.02 |
---|---|
기초통계 ; 빅데이터 수업 복습하기 (3) | 2021.07.25 |
빅데이터 분석 ; 신경망 알고리즘 ; 뉴런 (5) | 2021.07.22 |
빅데이터 분석 ; LDA ; logistic regression ; dicision tree ; 동시 비교 (0) | 2021.07.22 |
빅데이터 분석 ; logistic regression ; 로짓분석 ; 분류분석 ; classification analysis (0) | 2021.07.21 |
댓글