Sau khi thử một vài thuật toán phân cụm, tôi có hiệu suất tốt nhất trên tập dữ liệu của mình bằng cách sử dụng flexclust::kcca
với family = kccaFamily("angle")
.Làm thế nào để tạo ra số liệu thống kê hiệu suất của clustering từ flexclust?
Dưới đây là ví dụ sử dụng bộ dữ liệu Nclus
từ flexclust
.
library(fpc)
library(flexclust)
data(Nclus)
k <- 4
family <- flexclust::kccaFamily("angle")
model <- flexclust::kcca(Nclus, k, family)
Bây giờ tôi muốn tối ưu hóa số lượng cụm. Bộ số liệu hiệu suất toàn diện nhất cho các mô hình cụm dường như được tìm thấy bằng cách sử dụng fpc::cluster.stats
. Hàm này cần hai đầu vào: ma trận khoảng cách và các cụm được gán.
Loại thứ hai dễ dàng; nó chỉ là [email protected]
.
Tôi đang đấu tranh với những gì cần cung cấp cho ma trận khoảng cách. kcca
không trả về một đối tượng khoảng cách (hoặc nếu có, tôi không tìm thấy nó).
Tôi đoán rằng thông thường tôi sẽ sử dụng dist(Nclus)
. Trong trường hợp này, tôi không muốn khoảng cách Euclide (hoặc bất kỳ phương pháp nào khác có sẵn cho dist
) – Tôi muốn đo khoảng cách được sử dụng bởi thuật toán phân cụm. Tôi có thể tạo lại ma trận khoảng cách được sử dụng bởi kcca
bằng cách sử dụng mã từ hàm đó.
control <- as(list(), "flexclustControl")
centers <- flexclust:::initCenters(Nclus, k, family, control)
distmat <- distAngle(Nclus, centers$centers)
Sau đó, tôi chỉ có thể tính toán các số liệu thống kê mô hình cluster bằng cách sử
fpc::cluster.stats(distmat, [email protected])
Vấn đề đang được đem lại cho tôi hai cảnh báo về các đối số khoảng cách.
Warning messages:
1: In as.dist.default(d) : non-square matrix
2: In as.matrix.dist(d) :
number of items to replace is not a multiple of replacement length
Điều đó khiến tôi nghi ngờ tôi đang đưa ra điều sai.
Làm cách nào để chuyển ma trận khoảng cách tới cluster.stats
?
Ngẫu nhiên, 'fpc :: cluster.stats' đòi hỏi nhiều bộ nhớ, do đó không thực tế cho các tập dữ liệu có kích thước vừa phải. Tôi đã đi với 'cụm :: bóng 'cuối cùng. –