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


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.