빅 데이터 분석-K- 평균 클러스터링

k- 평균 군집화는 n 개의 관측치를 k 군집으로 분할하는 것을 목표로하며, 여기서 각 관측치는 가장 가까운 평균을 가진 군집에 속하며 군집의 원형 역할을합니다. 이로 인해 데이터 공간이 Voronoi 셀로 분할됩니다.

각 관측 값이 d 차원 실수 벡터 인 일련의 관측 값 (x 1 , x 2 ,…, x n )이 주어지면 k- 평균 클러스터링은 n 관측치를 k 그룹으로 분할하는 것을 목표로합니다. G = {G 1 , G 2 ,…, G k } 다음과 같이 정의 된 클러스터 내 제곱합 (WCSS)을 최소화하기 위해-

$$ argmin \ : \ sum_ {i = 1} ^ {k} \ sum_ {x \ in S_ {i}} \ parallel x-\ mu_ {i} \ parallel ^ 2 $$

이후의 공식은 k- 평균 클러스터링에서 최적의 원형을 찾기 위해 최소화되는 목적 함수를 보여줍니다. 공식의 직관은 서로 다른 그룹을 찾고 각 그룹의 각 구성원은 각 클러스터의 다른 구성원과 유사해야한다는 것입니다.

다음 예제는 R에서 k- 평균 클러스터링 알고리즘을 실행하는 방법을 보여줍니다.

library(ggplot2)
# Prepare Data 
data = mtcars  

# We need to scale the data to have zero mean and unit variance 
data <- scale(data)  

# Determine number of clusters 
wss <- (nrow(data)-1)*sum(apply(data,2,var)) 
for (i in 2:dim(data)[2]) { 
   wss[i] <- sum(kmeans(data, centers = i)$withinss) 
}  

# Plot the clusters 
plot(1:dim(data)[2], wss, type = "b", xlab = "Number of Clusters", 
   ylab = "Within groups sum of squares")

K에 대한 좋은 값을 찾기 위해 K의 다른 값에 대한 그룹 내 제곱합을 그릴 수 있습니다.이 메트릭은 일반적으로 더 많은 그룹이 추가 될수록 감소합니다. 우리는 그룹 내에서 감소가 합산되는 지점을 찾고 싶습니다. 제곱의 수가 천천히 감소하기 시작합니다. 플롯에서이 값은 K = 6으로 가장 잘 표현됩니다.

이제 K 값이 정의되었으므로 해당 값으로 알고리즘을 실행해야합니다.

# K-Means Cluster Analysis
fit <- kmeans(data, 5) # 5 cluster solution 

# get cluster means  
aggregate(data,by = list(fit$cluster),FUN = mean) 

# append cluster assignment 
data <- data.frame(data, fit$cluster)