Saya memiliki tabel transfer data antara node yang berbeda. Ini adalah basis data yang sangat besar (dengan hampir 40 juta transfer). Salah satu atribut adalah jumlah byte (nbytes) transfer yang berkisar dari 0 byte hingga 2 tera byte. Saya ingin mengelompokkan nbytes sehingga diberikan k cluster beberapa transfer x1 milik k1 cluster, x2 transfters ke k2 dll.
Dari terminologi yang saya gunakan, Anda mungkin sudah menebak apa yang sedang saya lakukan: K-means. Ini adalah data 1d karena nbytes adalah satu-satunya fitur yang saya pedulikan. Ketika saya mencari metode yang berbeda untuk ini saya melihat EM disebutkan beberapa kali bersama dengan pendekatan non-clustering. Saya ingin tahu tentang pandangan Anda tentang cara mendekati masalah ini (khususnya apakah akan mengelompok atau tidak untuk mengelompok).
Terima kasih!
sumber
Jawaban:
Dalam data satu dimensi, jangan gunakan analisis kluster.
Analisis cluster biasanya merupakan teknik multivariat. Atau izinkan saya mengatakannya sebaliknya: untuk data satu dimensi - yang benar-benar dipesan - ada teknik yang jauh lebih baik. Menggunakan k-means dan teknik serupa di sini adalah pemborosan total, kecuali jika Anda berupaya cukup untuk benar-benar mengoptimalkannya untuk kasing 1-d.
Sekedar memberi Anda contoh: untuk k-berarti adalah umum untuk menggunakan objek acak k sebagai seed awal. Untuk data satu dimensi, cukup mudah untuk melakukan yang lebih baik dengan hanya menggunakan kuantil yang sesuai (1 / 2k, 3 / 2k, 5 / 2k dll.), Setelah mengurutkan data satu kali , dan kemudian mengoptimalkan dari titik awal ini. Namun, data 2D tidak dapat diurutkan sepenuhnya. Dan dalam kotak, kemungkinan akan ada sel kosong.
Saya juga tidak akan menyebutnya cluster. Saya akan menyebutnya interval . Apa yang benar-benar ingin Anda lakukan adalah mengoptimalkan batas interval. Jika Anda melakukan k-means, itu akan menguji untuk setiap objek jika harus dipindahkan ke cluster lain. Itu tidak masuk akal dalam 1D: hanya objek pada batas interval yang perlu diperiksa. Itu jelas jauh lebih cepat, karena hanya ada ~ 2k objek di sana. Jika mereka belum memilih interval lain, lebih banyak objek pusat tidak akan baik.
Anda mungkin ingin melihat teknik seperti optimasi Breaks Jenks , misalnya.
Atau Anda dapat melakukan estimasi kepadatan kernel dan mencari minimum kepadatan lokal untuk dipecah di sana. Yang menyenangkan adalah Anda tidak perlu menentukan k untuk ini!
PS silakan gunakan fungsi pencarian. Berikut adalah beberapa pertanyaan tentang pengelompokan data 1-d yang Anda lewatkan:
sumber
Apakah pertanyaan Anda apakah Anda harus mengelompokkan atau metode apa yang harus Anda gunakan untuk mengelompokkan?
Mengenai apakah Anda harus mengelompokkan, itu tergantung apakah Anda ingin mempartisi data Anda secara otomatis (misalnya jika Anda ingin mengulangi partisi ini beberapa kali). Jika Anda melakukan ini hanya sekali, Anda bisa melihat histogram dari distribusi nilai-nilai Anda, dan mempartisi dengan mata, seperti yang diusulkan dalam komentar. Saya akan merekomendasikan melihat data dengan mata, karena itu dapat membantu Anda menentukan berapa banyak cluster yang Anda inginkan dan juga apakah clustering "bekerja".
Mengenai jenis pengelompokan, k-means harus baik-baik saja jika ada cluster "nyata" dalam data. Jika Anda tidak melihat klaster apa pun dalam histogram, toh tidak masuk akal mengelompokkannya, karena setiap partisi rentang data Anda akan memberikan kluster yang valid (atau dalam kasus inisiasi kman secara acak, Anda akan mendapatkan kluster yang berbeda setiap dijalankan).
sumber
Anda dapat mencoba:
KMeans, GMM, atau metode lain dengan menentukan n_clusters = no. dari puncak dalam plot kepadatan kernel.
KMeans, GMM atau metode lain dengan menentukan no optimal. cluster berdasarkan beberapa metrik. Info lebih lanjut: [di sini] https://en.wikipedia.org/wiki/Determining_the_number_of_clusters_in_a_data_set
sumber