Silhouette analysis: ประสิทธิภาพระดับการสังเกต

การวิเคราะห์กลุ่มข้อมูลใน R

Dmitriy (Dima) Gorenshteyn

Lead Data Scientist, Memorial Sloan Kettering Cancer Center

ทีมฟุตบอลที่มี K = 3

การวิเคราะห์กลุ่มข้อมูลใน R

Silhouette width

ระยะห่างภายในคลัสเตอร์: C(i)

ระยะห่างถึงคลัสเตอร์ใกล้ที่สุด: N(i)

การวิเคราะห์กลุ่มข้อมูลใน R

Silhouette width

ระยะห่างภายในคลัสเตอร์: C(i)

ระยะห่างถึงคลัสเตอร์ใกล้ที่สุด: N(i)

การวิเคราะห์กลุ่มข้อมูลใน R

Silhouette width

ระยะห่างภายในคลัสเตอร์: C(i)

ระยะห่างถึงคลัสเตอร์ใกล้ที่สุด: N(i)

การวิเคราะห์กลุ่มข้อมูลใน R

Silhouette width

ระยะห่างภายในคลัสเตอร์: C(i)

ระยะห่างถึงคลัสเตอร์ใกล้ที่สุด: N(i)

การวิเคราะห์กลุ่มข้อมูลใน R

Silhouette width

ระยะห่างภายในคลัสเตอร์: C(i)

ระยะห่างถึงคลัสเตอร์ใกล้ที่สุด: N(i)

การวิเคราะห์กลุ่มข้อมูลใน R

Silhouette width: S(i)

การวิเคราะห์กลุ่มข้อมูลใน R

Silhouette width: S(i)

 

  • 1: เข้ากับคลัสเตอร์ได้ดี
  • 0: อยู่บนขอบระหว่างสองคลัสเตอร์
  • -1: เหมาะกับคลัสเตอร์ข้างเคียงมากกว่า
การวิเคราะห์กลุ่มข้อมูลใน R

การคำนวณ S(i)

library(cluster)
pam_k3 <- pam(lineup, k = 3)

pam_k3$silinfo$widths cluster neighbor sil_width 4 1 2 0.465320054 2 1 3 0.321729341 10 1 2 0.311385893 1 1 3 0.271890169 9 2 1 0.443606497 ... ... ... ...
การวิเคราะห์กลุ่มข้อมูลใน R

Silhouette plot

sil_plot <- silhouette(pam_k3)
plot(sil_plot)

การวิเคราะห์กลุ่มข้อมูลใน R

Silhouette plot

sil_plot <- silhouette(pam_k3)
plot(sil_plot)

การวิเคราะห์กลุ่มข้อมูลใน R

ค่าเฉลี่ย silhouette width

pam_k3$silinfo$avg.width
[1] 0.353414
  • 1: เข้ากับแต่ละคลัสเตอร์ได้ดี
  • 0: อยู่บนขอบระหว่างคลัสเตอร์
  • -1: เข้ากับแต่ละคลัสเตอร์ได้ไม่ดี
การวิเคราะห์กลุ่มข้อมูลใน R

ค่าเฉลี่ย silhouette width สูงสุด

library(purrr)

sil_width <- map_dbl(2:10,  function(k){
  model <- pam(x = lineup, k = k)
  model$silinfo$avg.width
})
sil_df <- data.frame(
  k = 2:10,
  sil_width = sil_width
)
print(sil_df)
     k    sil_width
1    2    0.4164141
2    3    0.3534140
3    4    0.3535534
4    5    0.3724115
...  ...        ...
การวิเคราะห์กลุ่มข้อมูลใน R

การเลือก K โดยใช้ค่าเฉลี่ย silhouette width

ggplot(sil_df, aes(x = k, y = sil_width)) +
  geom_line() +
  scale_x_continuous(breaks = 2:10)

การวิเคราะห์กลุ่มข้อมูลใน R

การเลือก K โดยใช้ค่าเฉลี่ย silhouette width

ggplot(sil_df, aes(x = k, y = sil_width)) +
  geom_line() +
  scale_x_continuous(breaks = 2:10)

การวิเคราะห์กลุ่มข้อมูลใน R

มาฝึกกันเถอะ!

การวิเคราะห์กลุ่มข้อมูลใน R

Preparing Video For Download...