Làm thế nào để phù hợp với mô hình hỗn hợp cho cụm


15

Tôi có hai biến - X và Y và tôi cần tạo tối đa cụm (và tối ưu) = 5. Biểu đồ lý tưởng của các biến như sau:

nhập mô tả hình ảnh ở đây

Tôi muốn thực hiện 5 cụm này. Một cái gì đó như thế này:

nhập mô tả hình ảnh ở đây

Vì vậy, tôi nghĩ rằng đây là mô hình hỗn hợp với 5 cụm. Mỗi cụm có điểm trung tâm và một vòng tròn tự tin xung quanh nó.

Các cụm không phải lúc nào cũng đẹp như thế này, chúng trông giống như sau, trong đó đôi khi hai cụm gần nhau hoặc một hoặc hai cụm hoàn toàn bị mất.

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

Làm thế nào có thể phù hợp với mô hình hỗn hợp và thực hiện phân loại (phân cụm) trong tình huống này một cách hiệu quả?

Thí dụ:

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")

Câu trả lời:


13

Đây là kịch bản để sử dụng mô hình hỗn hợp bằng cách sử dụng 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)

nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây

Trong tình huống có ít hơn 5 cụm:

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)

nhập mô tả hình ảnh ở đây

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

nhập mô tả hình ảnh ở đây

Trong trường hợp này, chúng tôi đang lắp 3 cụm. Nếu chúng ta phù hợp với 5 cụm thì sao?

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

Nó có thể buộc phải thực hiện 5 cụm.

nhập mô tả hình ảnh ở đây

Ngoài ra, hãy giới thiệu một số tiếng ồn ngẫu nhiên:

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)

mclustcho phép phân cụm dựa trên mô hình với nhiễu, cụ thể là các quan sát xa không thuộc về bất kỳ cụm nào. mclustcho phép chỉ định phân phối trước để chuẩn hóa sự phù hợp với dữ liệu. Một chức năngpriorControl được cung cấp trong mclust để chỉ định trước và các tham số của nó. Khi được gọi với mặc định của nó, nó gọi một hàm khác được gọi là defaultPriorcó thể dùng làm khuôn mẫu để chỉ định các linh mục thay thế. Để bao gồm nhiễu trong mô hình hóa, một dự đoán ban đầu về các quan sát nhiễu phải được cung cấp thông qua thành phần nhiễu của đối số khởi tạo trong Mclusthoặc mclustBIC.

nhập mô tả hình ảnh ở đây

Cách khác là sử dụng mixtools gói cho phép bạn chỉ định giá trị trung bình và sigma cho từng thành phần.

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)

nhập mô tả hình ảnh ở đây


2
+1 Câu trả lời này rất hữu ích, có thể sử dụng được và cô đọng, và là một ví dụ hoàn hảo về cách thực hiện những điều như thế này trong R mà không cần biết toán học đằng sau nó ...
Paul

3

Một cách tiếp cận tiêu chuẩn là Mô hình hỗn hợp Gaussian được đào tạo bằng thuật toán EM. Nhưng vì bạn cũng nhận thấy rằng số lượng cụm có thể thay đổi, nên bạn cũng có thể xem xét một mô hình không tham số như Dirichlet GMM cũng được triển khai trong scikit-learn.

Trong R, hai gói này dường như cung cấp những gì bạn cần,

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.