kmeansクラスタリングのためのRでの統計パッケージの使用


10

クラスタパッケージの1つまたは2つの側面を理解できません。私はQuick-Rの例に厳密に従っていますが、分析の1つまたは2つの側面を理解していません。この特定の例で使用しているコードを含めました。

## Libraries
library(stats)
library(fpc) 

## Data
mydata = structure(list(a = c(461.4210925, 1549.524107, 936.42856, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131.4349206, 0, 762.6110846, 
3837.850406), b = c(19578.64174, 2233.308842, 4714.514274, 0, 
2760.510002, 1225.392118, 3706.428246, 2693.353714, 2674.126613, 
592.7384164, 1820.976961, 1318.654162, 1075.854792, 1211.248996, 
1851.363623, 3245.540062, 1711.817955, 2127.285272, 2186.671242
), c = c(1101.899095, 3.166506463, 0, 0, 0, 1130.890295, 0, 654.5054857, 
100.9491289, 0, 0, 0, 0, 0, 789.091922, 0, 0, 0, 0), d = c(33184.53871, 
11777.47447, 15961.71874, 10951.32402, 12840.14983, 13305.26424, 
12193.16597, 14873.26461, 11129.10269, 11642.93146, 9684.238583, 
15946.48195, 11025.08607, 11686.32213, 10608.82649, 8635.844964, 
10837.96219, 10772.53223, 14844.76478), e = c(13252.50358, 2509.5037, 
1418.364947, 2217.952853, 166.92007, 3585.488983, 1776.410835, 
3445.14319, 1675.722506, 1902.396338, 945.5376228, 1205.456943, 
2048.880329, 2883.497101, 1253.020175, 1507.442736, 0, 1686.548559, 
5662.704559), f = c(44.24828759, 0, 485.9617601, 372.108855, 
0, 509.4916263, 0, 0, 0, 212.9541122, 80.62920455, 0, 0, 30.16525587, 
135.0501384, 68.38023073, 0, 21.9317122, 65.09052886), g = c(415.8909649, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 637.2629479, 0, 0, 
0), h = c(583.2213618, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0), i = c(68206.47387, 18072.97762, 23516.98828, 
13541.38572, 15767.5799, 19756.52726, 17676.00505, 21666.267, 
15579.90094, 14351.02033, 12531.38237, 18470.59306, 14149.82119, 
15811.23348, 14637.35235, 13588.64291, 12549.78014, 15370.90886, 
26597.08152)), .Names = c("a", "b", "c", "d", "e", "f", "g", 
"h", "i"), row.names = c(NA, -19L), class = "data.frame")

次に、変数を標準化します。

# standardize variables
mydata <- scale(mydata) 

## K-means Clustering 

# Determine number of clusters
wss <- (nrow(mydata)-1)*sum(apply(mydata,2,var))
for (i in 2:15) wss[i] <- sum(kmeans(mydata, centers=i)$withinss)
# Q1
plot(1:15, wss, type="b", xlab="Number of Clusters",  ylab="Within groups sum of squares") 

# K-Means Cluster Analysis
fit <- kmeans(mydata, 3) # number of values in cluster solution

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

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

# Cluster Plot against 1st 2 principal components - vary parameters for most readable graph
clusplot(mydata, fit$cluster, color=TRUE, shade=TRUE, labels=0, lines=0) # Q2

# Centroid Plot against 1st 2 discriminant functions
plotcluster(mydata, fit$cluster)

私の質問は、(Q1コードでマークされた)クラスターの数を示すプロットを実際の値(クラスター番号と変数名)に関連付けるにはどうすればよいですか?

更新:clusplot()関数がPCA1とPCA2の2変量プロットであることを理解しました。ただし、PCAコンポーネントとクラスターグループ間のリンクがわかりません。PCA値とクラスタリンググループの関係は何ですか?kmeansとPCAの間のリンクについてはどこかで読んだことがありますが、それらが同じ2変量グラフにどのように表示されるかはまだわかりません。


過去数日間にクラスタリングについてあまりにも多くの質問をした場合はお詫びします。私はすぐにこの分野に慣れてくるしようとしている(また、私は、SOにこの質問を投稿しましたstackoverflow.com/questions/4997870/...が、それはここでそれを動かすことが示唆された)
celenius

大丈夫です、これはTCS.SEではありません(-;

#クラスター数を決定するこの式(mydata、2、var)を使用する理由と、なぜ2:15かを説明してください。

回答:


8

質問1は完全には把握していませんでしたが、答えてみます。Q1のプロットは、クラスター数の変化に応じて二乗和(wss)がどのように変化するかを示しています。この種のプロットでは、グラフのねじれを探す必要があります。5のねじれは、5つのクラスターを使用することをお勧めします。

WSSは次の意味で変数と関係があります。WSSの式は

jxiCj||xiμj||2

μjjxiiCj

質問2の答えはこれです。実際に監視しているの clusplot()は、主平面での観測のプロットです。この関数が実行していることは、観測ごとに主成分スコアを計算し、それらのスコアをプロットして、クラスターごとに色分けすることです。

主成分分析(PCA)は次元削減手法です。すべての変数の情報を、コンポーネントと呼ばれるいくつかの「新しい」変数に「要約」します。各コンポーネントは、全体の変動性の特定の割合を説明する責任があります。この例では、「この2つのコンポーネントは、変動性全体の73.95%を説明しています」と読みます。

関数clusplot()は、クラスタリングの有効性を識別するために使用されます。クラスタリングが成功した場合は、クラスタが主平面で明確に分離されていることがわかります。一方、クラスタリングが失敗した場合は、主平面でクラスタが結合されていることがわかります。

主成分分析の詳細については、wikiを参照してください。IzenmannによるModern Multivariate Techniquesをお勧めする本が必要な場合は、PCAとk-meansをご覧ください。

お役に立てれば :)


1
お返事ありがとうございます。clusplot()機能についてもう1つ質問がありました。PCA値とクラスタリンググループの関係は何ですか?kmeansとPCAの間のリンクについてはどこかで読んだことがありますが、それらが同じ2変量グラフにどのように表示されるかはまだわかりません。(おそらく、これ自体が新しい質問になるはずです)。
celenius

2
実際、PCA値とクラスタリンググループは独立しています。PCAは、の各観測に対して「新しい」座標を作成mydataします。これは、実際にプロットに表示されるものです。ポイントの形状はfit$cluster、の2番目のパラメーターであるを使用してプロットされますclusplot()。おそらく、PCAをさらに詳しく調べる必要があります。これが役に立ったか、それともさらに参考になったかをお知らせください。
deps_stats

1
それは役立ちます(私が自分の問題に精通しているという意味で!)。fit$clusterPCAの「座標」とどのように関連していますか?PCAがどのように機能するかは理解しているようですが、理解しているように、各コンポーネントは元のデータからの変数を使用して説明することはできません(生データの線形結合です)。クラスターに関連。
celenius

2
あなたはほとんどそれを得た:) fit$clusterはPCAとは無関係です。clusplot()「新しい」座標を使用してポイントをプロットし、を使用してラベルを付けることは何ですかfit$cluster。クラスタ3に「+」、クラスタ1に「o」、クラスタ2に三角形が表示されました。この機能clusplot()は、クラスタリングを視覚化するのに役立ちます。
deps_stats

1
「新しい」座標とは、PCA1とPCA2を意味します。あなたしている右、彼らが完全に無関係ですfit$cluster:)は
deps_stats
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.