Hitung kriteria pengelompokan BIC (untuk memvalidasi cluster setelah K-means)

9

Saya bertanya-tanya apakah ada cara yang baik untuk menghitung kriteria pengelompokan berdasarkan formula BIC, untuk keluaran k-means dalam R? Saya agak bingung bagaimana cara menghitung BIC sehingga saya bisa membandingkannya dengan model clustering lainnya. Saat ini saya menggunakan implementasi paket statistik dari k-means.

UnivStudent
sumber
Perhatikan bahwa kriteria ini dirancang untuk digunakan dengan k-means. Pada pengelompokan yang diperoleh oleh algoritma yang berbeda, mungkin tidak sesuai (khususnya untuk pengelompokan berdasarkan kepadatan algoritma)
Memiliki QUIT - Anony-Mousse

Jawaban:

6

Untuk menghitung BIC untuk hasil kmeans, saya telah menguji metode berikut:

  1. Rumus berikut ini dari: [ref2] masukkan deskripsi gambar di sini

Kode r untuk rumus di atas adalah:

  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))
  }
#

masalahnya adalah ketika saya menggunakan kode r di atas, BIC yang dihitung meningkat secara monoton. apa alasannya?

masukkan deskripsi gambar di sini

[ref2] Ramsey, SA, et al. (2008). "Mengungkap program transkripsi makrofag dengan mengintegrasikan bukti dari pemindaian motif dan dinamika ekspresi." PLoS Comput Biol 4 (3): e1000021.

  1. Saya telah menggunakan formula baru dari /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))
    }

Metode ini memberikan nilai BIC terendah pada nomor cluster 155. masukkan deskripsi gambar di sini

  1. menggunakan metode yang disediakan @ttnphns, kode R yang sesuai seperti yang tercantum di bawah ini. Namun, masalahnya adalah apa perbedaan antara Vc dan V? Dan bagaimana cara menghitung perkalian elemen-bijaksana untuk dua vektor dengan panjang yang berbeda?

    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)
    }
pekat
sumber
1
Mungkin Anda melakukan sesuatu yang berbeda. Itu dinyatakan dalam "pseudocode" saya yang Vcmerupakan matriks P x K dan Vmerupakan kolom kemudian diperbanyak kali K ke dalam matriks ukuran yang sama. Jadi (poin 4 dalam jawaban saya) bisa Anda tambahkan Vc+V. Kemudian ambil logaritma, bagi dengan 2 dan hitung jumlah kolom. Vektor baris yang dihasilkan dikalikan (nilai dengan nilai, yaitu elemenwise) dengan baris Nc.
ttnphns
1
Saya telah menambahkan formula sendiri dalam jawaban saya, jadi Anda dapat membandingkan dan mengatakan apakah yang Anda lakukan itu atau tidak.
ttnphns
3

Saya tidak menggunakan R tetapi di sini ada jadwal yang saya harap akan membantu Anda menghitung nilai kriteria pengelompokan BIC atau AIC untuk setiap solusi pengelompokan yang diberikan.

Pendekatan ini mengikuti Algoritma SPSS Analisis klaster dua langkah (lihat rumus di sana, mulai dari bab "Jumlah cluster", kemudian pindah ke "Jarak kemungkinan log" di mana ksi, kemungkinan log, didefinisikan). BIC (atau AIC) dihitung berdasarkan jarak log-likelihood. Saya menunjukkan perhitungan di bawah ini hanya untuk data kuantitatif (rumus yang diberikan dalam dokumen SPSS lebih umum dan memasukkan juga data kategorikal; Saya hanya membahas "bagian" data kuantitatifnya):

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.

Kriteria pengelompokan AIC dan BIC tidak hanya digunakan dengan pengelompokan K-means. Mereka mungkin berguna untuk metode pengelompokan apa pun yang memperlakukan kepadatan dalam-cluster sebagai varian dalam-cluster. Karena AIC dan BIC akan dihukum karena "parameter berlebihan", mereka cenderung memilih solusi dengan lebih sedikit klaster. "Kluster yang lebih sedikit semakin terpecah satu sama lain" bisa jadi moto mereka.

Mungkin ada berbagai versi kriteria pengelompokan BIC / AIC. Yang saya tunjukkan di sini menggunakan Vc, dalam varian -cluster , sebagai istilah utama dari log-likelihood. Beberapa versi lain, mungkin lebih baik cocok untuk k-means clustering, mungkin mendasarkan log-likelihood pada dalam kluster jumlah-of-kotak .

Versi pdf dari dokumen SPSS yang sama yang saya maksud.

Dan inilah akhirnya formula itu sendiri, sesuai dengan pseudocode dan dokumen di atas; ini diambil dari deskripsi fungsi (makro) yang saya tulis untuk pengguna SPSS. Jika Anda memiliki saran untuk meningkatkan formula, silakan kirim komentar atau jawaban.

masukkan deskripsi gambar di sini

ttnphns
sumber
ttnphns, terima kasih atas tanggapan Anda. Saya ingin tahu apakah Anda bisa menjelaskan ini sehubungan dengan fungsi objektif yang meminimalkan jumlah kuadrat-dalam-kotak?
UnivStudent
Anda mungkin melihat bahwa rumusnya hampir sama dengan yang kedua di wiki . Di sana, LL didasarkan pada varian kesalahanσe2yang ada Vcdi notasi saya (varians dalam-cluster dikumpulkan). Vc+Vdigunakan bukan Vchanya terhadap kasus Vc=0ketika sebuah cluster memiliki satu objek
ttnphns
kepala saya meledak dan saya tidak tahu bagaimana saya bisa menggunakan ini untuk menghentikan pengelompokan hierarkis aglomeratif saya. Saya menggunakannya untuk masalah pengelompokan catatan pengelompokan dokumen
MonsterMMORPG
@ Monster, Ada 100+ berbagai kriteria [validasi] pengelompokan internal . BIC adalah salah satunya. Anda melakukan pengelompokan sampai akhir, menyimpan solusi cluster, variabel keanggotaan cluster di setiap langkah. Nah, simpan hanya pada 10 atau 20 langkah terakhir karena Anda mungkin tidak ingin banyak kelompok kecil. Bandingkan solusi dengan kriteria pengelompokan dan pilih 1-3 yang "terbaik". Bandingkan mereka untuk interpretabilitas. Selesai Lihat sebuah contoh .
ttnphns
@ttnphns masalahnya di sini saya tidak dapat menemukan contoh data nyata dari apa yang disebut 100+ hal validasi pengelompokan internal ini. semua saya dapat menemukan kembali beberapa persamaan matematika yang saya tidak bisa mengerti. ini juga membuat saya tidak percaya bahwa algoritma ini ada dalam kenyataan: D
MonsterMMORPG