Tính toán tiêu chí phân cụm BIC (để xác nhận các cụm sau K-mean)


9

Tôi đang tự hỏi liệu có cách nào tốt để tính toán tiêu chí phân cụm dựa trên công thức BIC, cho đầu ra k-mean trong R không? Tôi hơi bối rối về cách tính BIC đó để tôi có thể so sánh nó với các mô hình phân cụm khác. Hiện tại tôi đang sử dụng gói số liệu thống kê của k-mean.


Lưu ý rằng tiêu chí này được thiết kế để được sử dụng với phương tiện k. Trên các cụm thu được bởi các thuật toán khác nhau, nó có thể không phù hợp (đặc biệt đối với các thuật toán phân cụm dựa trên mật độ)
Có QUIT - Anony-Mousse

Câu trả lời:


6

Để tính BIC cho kết quả kmeans, tôi đã thử nghiệm các phương pháp sau:

  1. Công thức sau đây là từ: [ref2] nhập mô tả hình ảnh ở đây

Mã r cho công thức trên là:

  k3 <- kmeans(mt,3)
  intra.mean <- mean(k3$within)
  k10 <- kmeans(mt,10)
  centers <- k10$centers
  BIC <- function(mt,cls,intra.mean,centers){
    x.centers <- apply(centers,2,function(y){
      as.numeric(y)[cls]
    })
    sum1 <- sum(((mt-x.centers)/intra.mean)**2)
    sum1 + NCOL(mt)*length(unique(cls))*log(NROW(mt))
  }
#

vấn đề là khi tôi sử dụng mã r ở trên, BIC được tính toán đã tăng đơn điệu. lý do là gì

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

[ref2] Ramsey, SA, et al. (2008). "Khám phá một chương trình sao chép đại thực bào bằng cách tích hợp bằng chứng từ quét mô-đun và động lực học biểu hiện." PLoS Comput Biol 4 (3): e1000021.

  1. Tôi đã sử dụng công thức mới từ /programming/15839774/how-to-calculate-bic-for-k-means-clustering-in-r

    BIC2 <- function(fit){
    m = ncol(fit$centers)
        n = length(fit$cluster)
    k = nrow(fit$centers)
        D = fit$tot.withinss
    return(data.frame(AIC = D + 2*m*k,
                      BIC = D + log(n)*m*k))
    }

Phương pháp này đưa ra giá trị BIC thấp nhất tại số cụm 155. nhập mô tả hình ảnh ở đây

  1. sử dụng phương thức được cung cấp @ttnphns, mã R tương ứng như được liệt kê bên dưới. Tuy nhiên, vấn đề là sự khác biệt giữa Vc và V là gì? Và làm thế nào để tính toán nhân phần tử cho hai vectơ có độ dài khác nhau?

    BIC3 <- function(fit,mt){
    Nc <- as.matrix(as.numeric(table(fit$cluster)),nc=1)
    Vc <- apply(mt,2,function(x){
        tapply(x,fit$cluster,var)
     })
    V <- matrix(rep(apply(mt,2,function(x){
    var(x)
    }),length(Nc)),byrow=TRUE,nrow=length(Nc))
    LL = -Nc * colSums( log(Vc + V)/2 ) ##how to calculate this? elementa-wise multiplication for two vectors with different length?
    BIC = -2 * rowSums(LL) + 2*K*P * log(NRoW(mt))
    return(BIC)
    }

1
Có lẽ bạn đang làm một cái gì đó khác nhau. Nó đã được nêu trong "mã giả" của tôi đó Vclà ma trận P x K và Vlà một cột sau đó được truyền K lần vào ma trận có cùng kích thước. Vì vậy (điểm 4 trong câu trả lời của tôi) bạn có thể thêm Vc+V. Sau đó lấy logarit, chia cho 2 và tính tổng cột. Vectơ hàng kết quả nhân (giá trị theo giá trị, tức là theo phần tử) với hàng Nc.
ttnphns

1
Tôi đã tự thêm công thức vào câu trả lời của mình, vì vậy bạn có thể so sánh và nói xem những gì bạn đang làm có phải như vậy hay không.
ttnphns

3

Tôi không sử dụng R nhưng đây là một lịch trình mà tôi hy vọng sẽ giúp bạn tính toán giá trị của các tiêu chí phân cụm BIC hoặc AIC cho bất kỳ giải pháp phân cụm cụ thể nào.

Cách tiếp cận này tuân theo thuật toán SPSS Phân tích cụm hai bước (xem các công thức ở đó, bắt đầu từ chương "Số cụm", sau đó chuyển sang "Khoảng cách khả năng đăng nhập" trong đó ksi, khả năng đăng nhập, được xác định). BIC (hoặc AIC) đang được tính toán dựa trên khoảng cách khả năng đăng nhập. Tôi chỉ hiển thị tính toán dưới đây cho dữ liệu định lượng (công thức được đưa ra trong tài liệu SPSS tổng quát hơn và kết hợp cả dữ liệu phân loại; tôi chỉ thảo luận về "phần" dữ liệu định lượng của nó):

X is data matrix, N objects x P quantitative variables.
Y is column of length N designating cluster membership; clusters 1, 2,..., K.
1. Compute 1 x K row Nc showing number of objects in each cluster.
2. Compute P x K matrix Vc containing variances by clusters.
   Use denominator "n", not "n-1", to compute those, because there may be clusters with just one object.
3. Compute P x 1 column containing variances for the whole sample. Use "n-1" denominator.
   Then propagate the column to get P x K matrix V.
4. Compute log-likelihood LL, 1 x K row. LL = -Nc &* csum( ln(Vc + V)/2 ),
   where "&*" means usual, elementwise multiplication;
   "csum" means sum of elements within columns.
5. Compute BIC value. BIC = -2 * rsum(LL) + 2*K*P * ln(N),
   where "rsum" means sum of elements within row.
6. Also could compute AIC value. AIC = -2 * rsum(LL) + 4*K*P

Note: By default SPSS TwoStep cluster procedure standardizes all
quantitative variables, therefore V consists of just 1s, it is constant 1.
V serves simply as an insurance against ln(0) case.

Tiêu chí phân cụm AIC và BIC không chỉ được sử dụng với phân cụm K-nghĩa. Chúng có thể hữu ích cho bất kỳ phương pháp phân cụm nào coi mật độ trong cụm là phương sai trong cụm. Vì AIC và BIC sẽ bị phạt vì "tham số quá mức", nên họ rõ ràng có xu hướng thích các giải pháp với ít cụm hơn. "Ít cụm hơn tách ra khỏi nhau" có thể là phương châm của họ.

Có thể có nhiều phiên bản khác nhau của tiêu chí phân cụm BIC / AIC. Cái tôi đã trình bày ở đây sử dụng Vc, phương sai trong cụm , là thuật ngữ chính của khả năng đăng nhập. Một số phiên bản khác, có lẽ phù hợp hơn với phân cụm k-mean, có thể dựa trên khả năng ghi nhật ký trên các tổng bình phương trong cụm .

Các phiên bản pdf của tài liệu SPSS cùng mà tôi gọi.

Và cuối cùng, đây là công thức, tương ứng với mã giả ở trên và tài liệu; nó được lấy từ mô tả chức năng (macro) tôi đã viết cho người dùng SPSS. Nếu bạn có bất kỳ đề xuất để cải thiện các công thức xin vui lòng gửi bình luận hoặc câu trả lời.

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


ttnphns, cảm ơn phản hồi của bạn. Tôi đang tự hỏi liệu bạn có thể giải thích điều này liên quan đến hàm mục tiêu giúp giảm thiểu tổng bình phương trong cụm không?
UnivStudent

σe2VcVc+VVcVc=0

đầu tôi nổ tung và tôi không thể hiểu làm thế nào tôi có thể sử dụng điều này để ngăn chặn phân cấp phân cấp kết tụ của tôi. Tôi đang sử dụng nó cho vấn đề liên kết hồ sơ phân cụm tài liệu
MonsterMMORPG

@Monster, Tồn tại hơn 100 tiêu chí phân cụm [xác thực] khác nhau . BIC là một trong số đó. Bạn thực hiện phân cụm đến cuối, lưu các giải pháp cụm, biến thành viên cụm trên mỗi bước. Chà, chỉ lưu trong 10 hoặc 20 bước cuối cùng vì có thể bạn không muốn có nhiều cụm nhỏ. So sánh các giải pháp theo một tiêu chí phân cụm và chọn 1-3 "tốt nhất". So sánh chúng để giải thích. Làm xong. Xem một ví dụ .
ttnphns

@ttnphns vấn đề ở đây tôi không thể tìm thấy bất kỳ ví dụ dữ liệu thực tế nào trong số này được gọi là hơn 100 công cụ xác thực phân cụm nội bộ. tất cả tôi có thể tìm lại một số phương trình toán học mà tôi không thể hiểu. điều này cũng khiến tôi không tin những thuật toán này tồn tại trong thực tế: D
MonsterMMORPG
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.