クラスタリングのための混合モデルの適合方法


15

XとYの2つの変数があり、クラスターを最大(および最適)= 5にする必要があります。変数の理想的なプロットは次のようになります。

ここに画像の説明を入力してください

このクラスターを5つ作成したいと思います。このようなもの:

ここに画像の説明を入力してください

したがって、これは5つのクラスターを持つ混合モデルだと思います。各クラスターには中心点とその周囲の信頼円があります。

クラスターは必ずしもこのようにきれいであるとは限らず、次のようになります。2つのクラスターが互いに近接している場合や、1つまたは2つのクラスターが完全に欠落している場合があります。

ここに画像の説明を入力してください

ここに画像の説明を入力してください

この状況で混合モデルをどのように適合させ、分類(クラスタリング)を効果的に実行できますか?

例:

set.seed(1234)
X <- c(rnorm(200, 10, 3), rnorm(200, 25,3),
        rnorm(200,35,3), rnorm(200,65, 3), rnorm(200,80,5))
Y <- c(rnorm(1000, 30, 2))
plot(X,Y, ylim = c(10, 60), pch = 19, col = "gray40")

回答:


13

以下は、mclusterを使用して混合モデルを使用するためのスクリプトです。

X <- c(rnorm(200, 10, 3), rnorm(200, 25,3), rnorm(200,35,3), rnorm(200,65, 3), rnorm(200,80,5))
Y <- c(rnorm(1000, 30, 2))
plot(X,Y, ylim = c(10, 60), pch = 19, col = "gray40")

require(mclust)
xyMclust <- Mclust(data.frame (X,Y))
plot(xyMclust)

ここに画像の説明を入力してください ここに画像の説明を入力してください

クラスターが5つ未満の場合:

X1 <- c(rnorm(200, 10, 3), rnorm(200, 25,3), rnorm(200,35,3),  rnorm(200,80,5))
Y1 <- c(rnorm(800, 30, 2))
xyMclust <- Mclust(data.frame (X1,Y1))
plot(xyMclust)

ここに画像の説明を入力してください

 xyMclust4 <- Mclust(data.frame (X1,Y1), G=3)
plot(xyMclust4)

ここに画像の説明を入力してください

この場合、3つのクラスターを近似しています。5つのクラスターに適合するとどうなりますか?

xyMclust4 <- Mclust(data.frame (X1,Y1), G=5)
plot(xyMclust4)

強制的に5つのクラスターを作成できます。

ここに画像の説明を入力してください

また、いくつかのランダムノイズを導入しましょう:

X2 <- c(rnorm(200, 10, 3), rnorm(200, 25,3), rnorm(200,35,3),  rnorm(200,80,5), runif(50,1,100 ))
Y2 <- c(rnorm(850, 30, 2))
xyMclust1 <- Mclust(data.frame (X2,Y2))
plot(xyMclust1)

mclustノイズを含むモデルベースのクラスタリング、つまり、どのクラスターにも属さない外れた観測値を許可します。mclust事前分布を指定して、データへの適合を正規化できます。priorControl事前とそのパラメーターを指定するための関数がmclustで提供されています。デフォルトで呼び出されると、defaultPrior別の優先度を指定するためのテンプレートとして機能する別の関数が呼び出されます。モデリングにノイズを含めるには、Mclustまたはの初期化引数のノイズ成分を介して、ノイズ観測の初期推定値を提供する必要がありますmclustBIC

ここに画像の説明を入力してください

他の選択肢は、各コンポーネントの平均とシグマを指定できるmixtools パッケージを使用することです。

X2 <- c(rnorm(200, 10, 3), rnorm(200, 25,3), rnorm(200,35,3),
    rnorm(200,80,5), rpois(50,30))
Y2 <- c(rnorm(800, 30, 2), rpois(50,30))
df <- cbind (X2, Y2)
require(mixtools)
out <- mvnormalmixEM(df, lambda = NULL, mu = NULL, sigma = NULL,
   k = 5,arbmean = TRUE, arbvar = TRUE, epsilon = 1e-08,  maxit = 10000, verb = FALSE)
plot(out, density = TRUE, alpha = c(0.01, 0.05, 0.10, 0.12, 0.15),  marginal = TRUE)

ここに画像の説明を入力してください


2
1この答えは...非常に、便利に使用可能な、かつ簡潔、及びそれもその背後にある数学を知らなくても、Rでこのようなことを行うにはあまりにも簡単ほとんどであるかの完璧な例です
ポール・

3

標準的なアプローチの1つは、EMアルゴリズムを使用して学習される混合ガウスモデルです。ただし、クラスターの数が異なることにも気づくので、scikit-learn でも実装されているDirichlet GMMのようなノンパラメトリックモデルを検討することもできます。

Rでは、これらの2つのパッケージは、必要なものを提供するようです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.