군집분석(k-means) in R
k-means 는 비지도 학습에 포함되는 군집분석중 하나입니다.
여러 특성들을 거리로 비교해서 비슷한 특성을 가진 값들끼리 묶어주는 방법입니다.
하지만 몇개의 군집으로 나눠줄지는 사용자가 정해주어야 합니다.
r에서 기본으로 제공하는 iris데이터로 군집분석을 해보겠습니다.
#k-means 군집분석 (data=iris)
library(caret)
data <- iris
set.seed(123)
#표준화
scaled.data <- scale(data[,-5])
summary(training.data)
head(scaled.data,5)
#k-means의 사전 군집수를 3개로 지해서 시행
set.seed(0723)#난수설
result <- kmeans(scaled.data,3)
#k-means clustering 결과 확인
result$centers #각 군집의중시점 확인
#교차표로 확인
table(data$Species, result$cluster, dnn=c("class","clustering"))
#k - means clustering 시각화
plot(scaled.data[,1:2], col=result$cluster)
points(result$centers[,1:2],pch=8,co=1:3, cex=2)
#silhouette : k-means cluster이 잘되었는지 판단, 1에 가까울수록 잘된
library(cluster)
plot(silhouette(result$cluster, dist = dist(data[,-5])), col = 1:3)
#사전 군집수 3개가 정당한지 알기위해 2~6개까지 조정하면서 k-means clustering을 시행하고
#군집수에 따른 SSE를 시각화
#여러번 k-means 해서 확인
visual <- NULL
for (i in 2:6){
set.seed(0723)
eval(parse(text=paste("result",i,"<-kmeans(scaled.data,",i,");",sep="")))
eval(parse(text=paste("visual[",i,"] <- result",i,"$tot.withinss",sep="")))
}
plot(visual[-1], type="l" ,ylab = "", xlab = "",
main = "cluster의 개수에 따른 클러스터 내부분산", )
abline(v=3,col="red") #군집수가 3에서 SSE감소폭이 줄어들고잇음
'딥러닝 스터디' 카테고리의 다른 글
08.랜덤포레스트(randomForest) h2o 패키지 사용 in r (1) | 2017.06.23 |
---|---|
06.랜덤포레스트(RandomForest) in R (0) | 2017.06.10 |
05.의사결정트리(Decision Tree) in R (2) (2) | 2017.04.15 |
04.의사결정트리(Decision Tree) in R (1) (0) | 2017.04.15 |
03. 의사결정트리(Decision Tree) 란? (0) | 2017.03.19 |