클러스터링을위한 혼합 모델을 맞추는 방법


15

나는 X와 Y의 두 변수를 가지고 클러스터를 최대 (및 최적) = 5로 만들어야합니다. 변수의 이상적인 플롯은 다음과 같습니다.

여기에 이미지 설명을 입력하십시오

이 클러스터를 5 개 만들고 싶습니다. 이 같은:

여기에 이미지 설명을 입력하십시오

따라서 이것이 5 개의 군집을 가진 혼합 모형이라고 생각합니다. 각 군집에는 중심점이 있고 그 주위에 신뢰 원이 있습니다.

클러스터는 항상 이와 같은 것은 아니며 다음과 같이 보입니다. 여기서 두 개의 클러스터가 서로 가깝거나 하나 또는 두 개의 클러스터가 완전히 누락되었습니다.

여기에 이미지 설명을 입력하십시오

여기에 이미지 설명을 입력하십시오

이 상황에서 어떻게 혼합 모형을 적합시키고 분류 (클러스터링)를 수행 할 수 있습니까?

예:

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 뒤에있는 수학을 몰라도 R에서 이와 같은 작업을 수행하는 것이 너무 쉬운 방법에 대한 완벽한 예입니다.
Paul

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.