Phân cụm phụ thuộc vào quy mô , trong số những thứ khác. Đối với các cuộc thảo luận về vấn đề này, xem ( liên alia ) Khi nào bạn nên tập trung và chuẩn hóa dữ liệu? và PCA về hiệp phương sai hay tương quan? .
Dưới đây là dữ liệu của bạn được vẽ với tỷ lệ khung hình 1: 1, cho thấy tỷ lệ của hai biến khác nhau bao nhiêu:
Ở bên phải của nó, biểu đồ của các số liệu thống kê khoảng cách hiển thị số liệu thống kê theo số cụm ( ) với các lỗi tiêu chuẩn được vẽ bằng các phân đoạn dọc và giá trị tối ưu của được đánh dấu bằng một đường thẳng đứt nét màu xanh. Theo sự giúp đỡ,kkkclusGap
Phương thức mặc định "firstSEmax" tìm nhỏ nhất sao cho giá trị nó không vượt quá 1 lỗi tiêu chuẩn so với mức tối đa cục bộ đầu tiên.f ( k )kf( k )
Các phương pháp khác hành xử tương tự. Tiêu chí này không làm cho bất kỳ số liệu thống kê khoảng cách nào nổi bật, dẫn đến ước tính .k = 1
Lựa chọn thang đo phụ thuộc vào ứng dụng, nhưng điểm bắt đầu mặc định hợp lý là thước đo độ phân tán của dữ liệu, chẳng hạn như MAD hoặc độ lệch chuẩn. Biểu đồ này lặp lại phân tích sau khi nhập về 0 và thay đổi kích thước để tạo độ lệch chuẩn đơn vị cho từng thành phần và :bmộtb
Giải pháp K-mean được biểu thị bằng cách thay đổi loại ký hiệu và màu sắc trong biểu đồ phân tán dữ liệu ở bên trái. Trong số các tập , được ưu tiên rõ ràng trong biểu đồ thống kê khoảng cách ở bên phải: đó là mức tối đa cục bộ đầu tiên và số liệu thống kê cho nhỏ hơn (nghĩa là ) thấp hơn đáng kể. Các giá trị lớn hơn của có khả năng phù hợp hơn cho một tập dữ liệu nhỏ như vậy và không có giá trị nào tốt hơn đáng kể so với . Chúng được hiển thị ở đây chỉ để minh họa phương pháp chung. k ∈ { 1 , 2 , 3 , 4 , 5 } k = 2 k k = 1 k k = 2k = 2k ∈ { 1 , 2 , 3 , 4 , 5 }k = 2kk = 1kk = 2
Đây là R
mã để sản xuất những số liệu này. Các dữ liệu xấp xỉ khớp với những gì được hiển thị trong câu hỏi.
library(cluster)
xy <- matrix(c(29,391, 31,402, 31,380, 32.5,391, 32.5,360, 33,382, 33,371,
34,405, 34,400, 34.5,404, 36,343, 36,320, 36,303, 37,344,
38,358, 38,356, 38,351, 39,318, 40,322, 40, 341), ncol=2, byrow=TRUE)
colnames(xy) <- c("a", "b")
title <- "Raw data"
par(mfrow=c(1,2))
for (i in 1:2) {
#
# Estimate optimal cluster count and perform K-means with it.
#
gap <- clusGap(xy, kmeans, K.max=10, B=500)
k <- maxSE(gap$Tab[, "gap"], gap$Tab[, "SE.sim"], method="Tibs2001SEmax")
fit <- kmeans(xy, k)
#
# Plot the results.
#
pch <- ifelse(fit$cluster==1,24,16); col <- ifelse(fit$cluster==1,"Red", "Black")
plot(xy, asp=1, main=title, pch=pch, col=col)
plot(gap, main=paste("Gap stats,", title))
abline(v=k, lty=3, lwd=2, col="Blue")
#
# Prepare for the next step.
#
xy <- apply(xy, 2, scale)
title <- "Standardized data"
}