Mengelompokkan matriks biner

22

Saya memiliki matriks semi-kecil fitur biner dimensi 250k x 100. Setiap baris adalah pengguna dan kolom adalah "tag" biner dari beberapa perilaku pengguna, misalnya "likes_cats".

user  1   2   3   4   5  ...
-------------------------
A     1   0   1   0   1
B     0   1   0   1   0
C     1   0   0   1   0

Saya ingin menyesuaikan pengguna menjadi 5-10 kelompok dan menganalisis pemuatan untuk melihat apakah saya dapat menafsirkan kelompok perilaku pengguna. Tampaknya ada beberapa pendekatan untuk menyesuaikan cluster pada data biner - apa yang menurut kami mungkin merupakan strategi terbaik untuk data ini?

  • PCA

  • Membuat matriks Jaccard Similarity , menyesuaikan cluster hirarkis dan kemudian menggunakan "node" atas.

  • K-median

  • K-medoid

  • Proximus ?

  • Agnes

Sejauh ini saya sudah cukup sukses dengan menggunakan pengelompokan hierarkis tapi saya benar-benar tidak yakin itu cara terbaik untuk pergi ..

tags = read.csv("~/tags.csv")
d = dist(tags, method = "binary")
hc = hclust(d, method="ward")
plot(hc)
cluster.means = aggregate(tags,by=list(cutree(hc, k = 6)), mean)

masukkan deskripsi gambar di sini

wije
sumber
1
Untuk data yang besar (banyak node) dan berdimensi tinggi, dapat juga bermanfaat untuk mencoba algoritma pengelompokan grafik (menggunakan misalnya kemiripan tanimoto dan metode seperti pengelompokan Louvain, RNSC, mcl). Saya memiliki beberapa keraguan apakah tipe data Anda akan menghasilkan cluster yang bermakna (tentu saja sangat baik), tetapi keraguan itu berhubungan dengan pengelompokan secara umum, tidak secara khusus untuk jenis pengelompokan tertentu. PCA jelas merupakan sesuatu yang patut dicoba.
micans
6
Sejujurnya, saya terkejut bahwa pertanyaan ini menarik sedikit perhatian. Kenapa gitu? Bagi saya, ini terdengar seperti pertanyaan yang sangat menarik.
Dror Atariah

Jawaban:

9

Analisis kelas laten adalah salah satu pendekatan yang mungkin.

Ambil distribusi probabilitas berikut ini di mana A, B, dan C dapat mengambil nilai 1 atau 0.

P(SEBUAHsaya,Bj,Ck)

Jika ini independen satu sama lain, maka kami akan berharap untuk melihat:

P(SEBUAHsaya,Bj,Ck)=P(SEBUAHsaya)P(Bj)P(Ck)

Setelah kemungkinan ini dihilangkan, kami mungkin berhipotesis bahwa setiap ketergantungan yang diamati adalah karena pengelompokan nilai dalam subkelompok yang tidak teramati. Untuk menguji ide ini, kami dapat memperkirakan model berikut:

P(SEBUAHsaya,Bj,Ck)=P(Xn)P(SEBUAHsaya|Xn)P(Bj|Xn)P(Ck|Xn)

Di mana adalah variabel kategori laten dengan tingkat . Anda spesifik , dan parameter model (probabilitas marginal keanggotaan kelas, dan probabilitas kelas spesifik untuk setiap variabel) dapat diperkirakan melalui maksimalisasi harapan.Xnn

Dalam praktiknya, Anda dapat memperkirakan beberapa model, dengan , dan "memilih" model terbaik berdasarkan teori, indeks kesesuaian berdasarkan kemungkinan, dan kualitas klasifikasi (yang dapat dinilai dengan menghitung probabilitas posterior keanggotaan kelas untuk pengamatan).5n10

Namun, mencoba mengidentifikasi pola yang bermakna dalam 100 variabel dengan 5-10 kelompok kemungkinan akan memerlukan pengurangan daftar itu sebelum memperkirakan model, yang merupakan topik yang cukup rumit dalam dirinya sendiri ( REF ).

DL Dahly
sumber
Bagus, menarik. Apa yang akan Anda katakan adalah manfaat dari menggunakan teknik itu di atas yang lain?
wije
Satu keuntungan adalah bahwa pengelompokan tidak jelas, memungkinkan Anda untuk memperhitungkan ketidakpastian dalam tugas kelas berikutnya. Lain adalah karena itu adalah metode berbasis model. Anda mendapatkan indeks kecocokan berdasarkan kemungkinan yang dapat membantu memandu pemilihan model. Ini tentu saja datang dengan biaya karena harus membuat asumsi distribusi ... Saya yakin metode lain yang valid akan memiliki pengorbanan sendiri.
DL Dahly
5

Sebenarnya, sering melakukan penambangan item mungkin merupakan pilihan yang lebih baik daripada mengelompokkan pada data tersebut.

Kumpulan algoritma berorientasi vektor yang biasa tidak masuk akal. K-means misalnya akan menghasilkan cara yang tidak lagi biner.

Anony-Mousse -Reinstate Monica
sumber
Apakah masuk akal untuk menggunakan item yang sering meskipun saya ingin mengelompokkan pengguna daripada tag (kolom)?
wije
1
IMHO ya. Tetapi untuk alasan yang jelas, aturan asosiasi bukan partisi ketat dari kumpulan data. Seorang pengguna dapat menjadi anggota lebih dari satu "itemset sering". Yaitu pengguna bisa menjadi penggemar kucing dan penggemar anjing; kedua kelompok ini tidak dipaksa untuk dipisahkan.
Anony-Mousse -Reinstate Monica
IMHO mana yang sebenarnya bagus. Dengan asumsi bahwa setiap pengguna adalah anggota tepat satu kluster sepertinya terlalu naif bagi saya.
Anony-Mousse -Reinstate Monica