ビッグデータ分析-K-Meansクラスタリング
k-meansクラスタリングは、n個の観測値をk個のクラスターに分割することを目的としています。このクラスターでは、各観測値が最も近い平均値を持つクラスターに属し、クラスターのプロトタイプとして機能します。これにより、データ空間がボロノイセルに分割されます。
一連の観測値(x 1、x 2、…、x n)が与えられ、各観測値はd次元の実数ベクトルである場合、k-meansクラスタリングは、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-meansクラスタリングで最適なプロトタイプを見つけるために最小化される目的関数を示しています。式の直感は、互いに異なるグループを見つけたいということです。各グループの各メンバーは、各クラスターの他のメンバーと類似している必要があります。
次の例は、Rでk-meansクラスタリングアルゴリズムを実行する方法を示しています。
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)