Big-data-analytics-k-means-clustering

提供:Dev Guides
移動先:案内検索

ビッグデータ分析-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)