Memilih cluster untuk k-means: kasus 1 cluster

9

Adakah yang tahu metode yang baik untuk menentukan apakah pengelompokan menggunakan kmeans bahkan sesuai? Artinya, bagaimana jika sampel Anda sebenarnya homogen? Saya tahu sesuatu seperti model campuran (melalui mclust di R) akan memberikan statistik yang cocok untuk kasus klaster 1: k, tetapi sepertinya semua teknik untuk mengevaluasi kman memerlukan setidaknya 2 kluster.

Apakah ada yang tahu teknik untuk membandingkan kasus cluster 1 dan 2 untuk kmeans?

dmartin
sumber

Jawaban:

10

Statistik kesenjangan adalah cara yang bagus untuk melakukan ini; Tibshirani, Hastie & Walther (2001).

http://stat.ethz.ch/R-manual/R-devel/library/cluster/html/clusGap.html - Paket R yang relevan.

Idenya adalah bahwa ia melakukan tes hipotesis sekuensial mengelompokkan data Anda untuk K = 1,2,3, ... vs hipotesis nol kebisingan acak, yang setara dengan satu cluster. Kekuatan khususnya adalah memberi Anda indikasi yang dapat diandalkan apakah K = 1, yaitu apakah tidak ada kluster.

Berikut ini contohnya, saya sedang memeriksa beberapa data astronomi beberapa hari yang lalu saat itu terjadi - yaitu dari survei planet ekstrasurya transit. Saya ingin tahu bukti apa yang ada untuk kluster (cembung). Data saya 'transit'

library(cluster)
cgap <- clusGap(transit, FUN=kmeans, K.max=kmax, B=100)
for(k in 1:(kmax-1)) {
    if(cgap$Tab[k,3]>cgap$Tab[(k+1),3]-cgap$Tab[(k+1),4]) {print(k)}; 
    break;
}

Dengan statistik gap Anda mencari nilai pertama K di mana tes 'gagal' yaitu statistik gap secara signifikan menurun. Lingkaran di atas akan mencetak ak tersebut, namun hanya dengan memplot cgap memberi Anda gambar berikut:
masukkan deskripsi gambar di sini Lihat bagaimana ada kemiringan yang signifikan pada Gap dari k = 1 hingga k = 2, yang menandakan bahwa sebenarnya tidak ada cluster (yaitu 1 cluster).

Mendongkrak
sumber
bagaimana melakukan hal yang sama untuk pengelompokan hierarkis dengan tautan tunggal? Bisakah Anda jelaskan argumen FUN tentang clusGap? Saya menjalankan baris di bawah ini untuk kmax hirarkis = 20 cgap <- clusGap (cluster_feat_base [, 2: ncol (cluster_feat_base)], FUN = hclust, K.max = kmax, B = 100). Tapi itu memberikan kesalahan yang mengatakan Kesalahan dalam FUNcluster (X, kk, ...): metode pengelompokan yang tidak valid 2
GeorgeOfTheRF
4

Anda juga dapat mencoba metode yang lebih baru: A. Kalogeratos dan A.Likas, Dip-means: metode pengelompokan tambahan untuk memperkirakan jumlah cluster , NIPS 2012.

Idenya adalah untuk menggunakan pengujian hipotesis statistik untuk unimodality pada vektor yang berisi kesamaan / jarak antara satu titik dan sisa dari titik-titik himpunan. Pengujian dilakukan dengan menggunakan tes dip Hartigan-Hartigan , Ann. Statist. 13 (1): 70-84.

Metode dimulai dengan semua dataset sebagai satu cluster dan secara bertahap membaginya selama hipotesis unimodality ditolak (yaitu lebih dari satu cluster hadir).

Jadi metode ini akan menunjukkan apakah ada lebih dari satu cluster dalam data (pertanyaan Anda), tetapi mungkin juga memberikan pengelompokan akhir.

Di sini Anda dapat menemukan beberapa kode di Matlab .

argyris
sumber
0

Misalkan saya sedang mempertimbangkan contoh yang sama,

library (cluster) cgap <- clusGap (transit, FUN = kmeans, K.max = kmax, B = 100) untuk (k dalam 1: (kmax-1)) {if (cgap Tab [(k + 1), 3] -cgap $ Tab [(k + 1), 4]) {print (k)}; istirahat; }TSebuahb[k,3]>cgSebuahhal

Bagaimana saya bisa mengelompokkan elemen cluster yang terkait dengan solusi pengelompokan terbaik berdasarkan statistik gap maksimum? Sehingga saya bisa menggunakannya untuk analisis lebih lanjut pada masing-masing cluster.

Saya tahu ada perintah yang disebut subset. Tidak ada masalah menggunakan perintah ini ketika kami telah memberikan jumlah cluster yang kami inginkan. Tetapi bagaimana cara subset ketika kita ingin subset berdasarkan k optimal yang diperoleh dengan menggunakan gap (singkatnya, subset elemen cluster jika ada loop)

Tharang
sumber