(この投稿は私が昨日投稿した質問の再投稿です(現在は削除されています)が、私は言葉の量を減らし、質問の内容を単純化しようとしました)
私が作成したkmeansスクリプトと出力を解釈するのに役立つ情報を得たいと思っています。これはテキスト分析のコンテキストにあります。このスクリプトは、テキスト分析に関するオンラインの記事をいくつか読んだ後に作成しました。それらのいくつかを以下にリンクしました。
この投稿全体で参照するサンプルのrスクリプトとテキストデータのコーパス:
library(tm) # for text mining
## make a example corpus
# make a df of documents a to i
a <- "dog dog cat carrot"
b <- "phone cat dog"
c <- "phone book dog"
d <- "cat book trees"
e <- "phone orange"
f <- "phone circles dog"
g <- "dog cat square"
h <- "dog trees cat"
i <- "phone carrot cat"
j <- c(a,b,c,d,e,f,g,h,i)
x <- data.frame(j)
# turn x into a document term matrix (dtm)
docs <- Corpus(DataframeSource(x))
dtm <- DocumentTermMatrix(docs)
# create distance matrix for clustering
m <- as.matrix(dtm)
d <- dist(m, method = "euclidean")
# kmeans clustering
kfit <- kmeans(d, 2)
#plot – need library cluster
library(cluster)
clusplot(m, kfit$cluster)
スクリプトは以上です。以下は、スクリプト内のいくつかの変数の出力です。
コーパスに変換されたデータフレームxは次のとおりです。
x
j
1 dog dog cat carrot
2 phone cat dog
3 phone book dog
4 cat book trees
5 phone orange
6 phone circles dog
7 dog cat square
8 dog trees cat
9 phone carrot cat
結果のドキュメント用語行列dtmは次のとおりです。
> inspect(dtm)
<<DocumentTermMatrix (documents: 9, terms: 9)>>
Non-/sparse entries: 26/55
Sparsity : 68%
Maximal term length: 7
Weighting : term frequency (tf)
Terms
Docs book carrot cat circles dog orange phone square trees
1 0 1 1 0 2 0 0 0 0
2 0 0 1 0 1 0 1 0 0
3 1 0 0 0 1 0 1 0 0
4 1 0 1 0 0 0 0 0 1
5 0 0 0 0 0 1 1 0 0
6 0 0 0 1 1 0 1 0 0
7 0 0 1 0 1 0 0 1 0
8 0 0 1 0 1 0 0 0 1
9 0 1 1 0 0 0 1 0 0
そしてここに距離行列dがあります
> d
1 2 3 4 5 6 7 8
2 1.732051
3 2.236068 1.414214
4 2.645751 2.000000 2.000000
5 2.828427 1.732051 1.732051 2.236068
6 2.236068 1.414214 1.414214 2.449490 1.732051
7 1.732051 1.414214 2.000000 2.000000 2.236068 2.000000
8 1.732051 1.414214 2.000000 1.414214 2.236068 2.000000 1.414214
9 2.236068 1.414214 2.000000 2.000000 1.732051 2.000000 2.000000 2.000000
結果は次のとおりです:kfit:
> kfit
K-means clustering with 2 clusters of sizes 5, 4
Cluster means:
1 2 3 4 5 6 7 8 9
1 2.253736 1.194938 1.312096 2.137112 1.385641 1.312096 1.930056 1.930056 1.429253
2 1.527463 1.640119 2.059017 1.514991 2.384158 2.171389 1.286566 1.140119 2.059017
Clustering vector:
1 2 3 4 5 6 7 8 9
2 1 1 2 1 1 2 2 1
Within cluster sum of squares by cluster:
[1] 13.3468 12.3932
(between_SS / total_SS = 29.5 %)
Available components:
[1] "cluster" "centers" "totss" "withinss" "tot.withinss" "betweenss" "size" "iter"
[9] "ifault"
これについていくつか質問があります。
- 私の距離行列d(kfit計算で使用されるパラメーター)を計算する際に、これを行いました
d <- dist(m, method = "euclidean")
。私が遭遇した別の記事はこれを行いました:d <- dist(t(m), method = "euclidean")
。次に、私が最近投稿したSOの質問に個別に「距離の行列ではなく、データの行列でkmeansを実行する必要があります!」とコメントしました。おそらく、それらはkmeans()
入力としてdではなくmを取る必要があることを意味します。これらの3つのバリエーションのうち、どちらが「正しい」か。または、すべてが何らかの方法で有効であるとすると、初期のベースラインモデルを設定する従来の方法はどれでしょうか。 - 私が理解しているように、dでkmeans関数が呼び出されると、2つのランダムな重心が選択されます(この場合はk = 2)。次に、rはdの各行を調べ、どのドキュメントがどの重心に最も近いかを判断します。上記のマトリックスdに基づいて、実際にはどのように見えますか?たとえば、最初のランダムな重心が1.5で2番目が2の場合、ドキュメント4はどのように割り当てられますか?行列dでdoc4は2.645751 2.000000 2.000000 so(r)でmean(c(2.645751,2.000000,2.000000))= 2.2なので、この例のkmeansの最初の反復では、doc4は値2のクラスターに割り当てられます。 1.5よりも。この後、クラスターの平均が新しい重心として再計算され、必要に応じてドキュメントが再割り当てされます。これは正しいですか、それとも完全にポイントを逃しましたか?
- 上記のkfit出力で、「クラスター平均」とは何ですか?たとえば、Doc3クラスター1の値は1.312096です。この文脈でこの数は何ですか?[編集、投稿の数日後にもう一度見てみると、最終的なクラスターの中心までの各ドキュメントの距離であることがわかります。したがって、最も小さい番号(最も近い番号)が、各ドキュメントがどのクラスターに割り当てられるかを決定します]。
- 上記のkfit出力では、「クラスター化ベクトル」は、各ドキュメントが割り当てられたクラスターのように見えます。OK。
- 上記のkfit出力では、「クラスター内の二乗和平方和」。それは何ですか?
13.3468 12.3932 (between_SS / total_SS = 29.5 %)
。各クラスター内の分散の測定値は、おそらく数値が小さいほど、まばらなグループとは対照的に、より強いグループ化を意味します。それは公正な声明ですか?29.5%のパーセンテージについてはどうでしょう。あれは何でしょう?29.5%は「良い」です。kmeansのどのインスタンスでも、より低いまたはより高い数値が優先されますか?異なる数のkで実験した場合、クラスターの数の増加/減少が分析を助けたり妨げたりしたかどうかを判断するために何を探しますか? - プロットのスクリーンショットは-1から3になります。ここで何が測定されていますか?教育と収入、身長と体重とは対照的に、この文脈でのスケールの一番上の3は何ですか?
- プロットでは、「これら2つのコンポーネントは点の変動性の50.96%を説明します」というメッセージがここにすでにあります(他の誰かがこの投稿に出くわした場合-kmeansの出力を理解するために、ここに追加したいと思います)。
このスクリプトを作成するのに役立つ記事をいくつか紹介します。
tdm
。あなたのユークリッド距離行列と(B) d
。SPSSのK平均は、入力を常にケースX変数データとして扱い、ケースをクラスター化します。初期中心として、私は両方の分析であなたの分析の出力中心を入力します- cluster means
。結果:分析(b)では、(a)ではなく、入力センターと同じ最終センターが得られました。つまり、(b)のK平均はクラスターの中心をさらに改善できなかったことを意味します。これは、分析(b)がユーザーが行ったk平均分析と一致することを意味します。