วิธีปรับรูปแบบการผสมสำหรับการจัดกลุ่ม


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ซึ่งสามารถทำหน้าที่เป็นแม่แบบสำหรับการระบุตัวเลือกทางเลือก ที่จะรวมเสียงในการสร้างแบบจำลองการคาดเดาเริ่มต้นของการสังเกตเสียงที่จะต้องจัดให้ผ่านองค์ประกอบเสียงของการโต้แย้งการเริ่มต้นในหรือMclustmclustBIC

ป้อนคำอธิบายรูปภาพที่นี่

อีกทางเลือกหนึ่งคือใช้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 โดยที่ไม่รู้แม้แต่คณิตศาสตร์อยู่เบื้องหลัง ...
Paul

3

แนวทางมาตรฐานหนึ่งคือแบบจำลองการผสมแบบเกาส์ซึ่งได้รับการฝึกอบรมโดยใช้อัลกอริทึม EM แต่เนื่องจากคุณสังเกตเห็นว่าจำนวนของกลุ่มอาจแตกต่างกันคุณอาจพิจารณารูปแบบที่ไม่ใช่พารามิเตอร์เช่นDirichlet GMMซึ่งมีการใช้งานใน scikit เรียนรู้

ใน R แพ็คเกจทั้งสองดูเหมือนจะเสนอสิ่งที่คุณต้องการ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.