Saya memiliki matriks yang diisi dengan elemen diskrit, dan saya perlu mengelompokkannya (menggunakan R) ke dalam kelompok utuh. Jadi, misalnya, ambil matriks ini:
[A B B C A]
[A A B A A]
[A B B C C]
[A A A A A]
Akan ada dua kelompok terpisah untuk A, dua kelompok terpisah untuk C, dan satu kelompok untuk B.
Output yang saya cari idealnya akan menetapkan ID unik untuk setiap cluster, seperti ini:
[1 2 2 3 4]
[1 1 2 4 4]
[1 2 2 5 5]
[1 1 1 1 1]
Saat ini saya menulis kode yang melakukan ini secara rekursif dengan hanya mengecek tetangga terdekat, tetapi dengan cepat meluap ketika matriks menjadi besar (yaitu, 100x100).
Apakah ada fungsi bawaan di R yang bisa melakukan ini? Saya melihat ke dalam raster dan pemrosesan gambar, tetapi tidak berhasil. Saya yakin itu pasti ada di luar sana.
r
clustering
pengguna3037237
sumber
sumber
Jawaban:
Menurut Anda apa ukuran jarak dalam kasus Anda?
Saya berasumsi ada tiga dimensi di sini:
RowN
(nomor baris)ColN
(nomor kolom)Value
(nilai: A, B atau C)Itu berarti data yang Anda dapatkan dari
4x5
matriks terlihat seperti:Apakah
value
diskalakan? Dengan kata lain, bukanA < B < C
?Jika ya, maka
{A, B, C}
dengan{0, 1, 2}
(atau mungkin{10, 11, 12}
, jika Anda ingin perbedaan ini kurang penting daripada atribut RowN dan ColN)stats
paket RDalam hal ini jarak antara keduanya adalah:
Jika
value
tidak diskalakan (variabel kategori reguler), gunakan beberapa modifikasi K-Means yang berfungsi dengan data kategorikal .Jadi dalam kasus 100x100 matriks Anda memiliki 10.000 pengamatan dan tiga variabel, yang merupakan ukuran sampel yang sangat sepele.
sumber
Saya tidak yakin apakah pertanyaan Anda diklasifikasikan sebagai masalah pengelompokan. Dalam pengelompokan Anda mencoba menemukan kelompok contoh serupa menggunakan data tidak berlabel. Di sini, tampaknya Anda ingin menghitung "cluster" yang ada dari node terdekat.
Sejujurnya, saya tidak tahu fungsi seperti itu di R. Tapi, sejauh menyangkut algoritma, saya percaya apa yang Anda cari adalah Connected-Component Labeling . Jenis isi ember, untuk matriks.
Artikel wikipedia tertaut di atas. Salah satu algoritma yang disajikan di sana, disebut sebagai algoritma single-pass, adalah sebagai berikut:
Saya kira itu akan mudah untuk roll sendiri menggunakan di atas.
sumber