Bagaimana mengevaluasi pengelompokan teks?

8

Metrik apa yang dapat digunakan untuk mengevaluasi model pengelompokan teks? Saya menggunakan tf-idf+ k-means, tf-idf+ hierarchical clustering, doc2vec+ k-means (metric is cosine similarity), doc2vec+ hierarchical clustering (metric is cosine similarity). Bagaimana menentukan model mana yang terbaik?

Толкачёв Иван
sumber

Jawaban:

6

Lihatlah makalah ini . Ini juga membahas pertanyaan tentang berapa banyak cluster yang digunakan. Paket R mclust memiliki rutin yang akan mencoba berbagai model klaster / jumlah kluster dan memplot Bayesian inference criterion (BIC). (sketsa besar di sini ). Ini adalah metode umum, artinya, sesuatu yang dapat Anda lakukan tanpa menjadi domain / data spesifik. (Itu selalu baik untuk menjadi spesifik domain jika Anda memiliki waktu dan data.)

Bagan ini dari sketsa oleh Lucca Scrucca. MClust mencoba 14 algoritma pengelompokan yang berbeda (diwakili oleh simbol yang berbeda), meningkatkan jumlah cluster dari 1 ke beberapa nilai default. Itu menemukan BIC setiap kali. BIC tertinggi biasanya merupakan pilihan terbaik. Anda bisa menerapkan metodologi ini ke stabil Anda sendiri algoritma clustering.

masukkan deskripsi gambar di sini

Pete
sumber
2

Lihat skor siluet

Formula untuk i th data titik

(b(i) - a(i)) / max(a(i),b(i))

di mana b (i) -> ketidaksamaan dari klaster tetangga terdekat

a (i) -> ketidaksamaan antara titik dalam cluster

Ini memberikan skor antara -1 dan +1.

Penafsiran

+1 artinya sangat pas

-1 berarti kesalahan klasifikasi [seharusnya milik cluster yang berbeda]

Setelah menghitung skor siluet untuk setiap titik data, Anda dapat melakukan panggilan pada pilihan untuk jumlah cluster.

Contoh Kode

from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_samples, silhouette_score

X, y = make_blobs(n_samples=500,
                  n_features=2,
                  centers=4,
                  cluster_std=1,
                  center_box=(-10.0, 10.0),
                  shuffle=True,
                  random_state=1)  # For reproducibility

range_n_clusters = [2, 3, 4, 5, 6]

for n_clusters in range_n_clusters:
    # Initialize the clusterer with n_clusters value and a random generator
    # seed of 10 for reproducibility.
    clusterer = KMeans(n_clusters=n_clusters, random_state=10)
    cluster_labels = clusterer.fit_predict(X)

    # The silhouette_score gives the average value for all the samples.
    # This gives a perspective into the density and separation of the formed
    # clusters
    silhouette_avg = silhouette_score(X, cluster_labels)
    print("For n_clusters =", n_clusters,
          "The average silhouette_score is :", silhouette_avg)

    # Compute the silhouette scores for each sample
    sample_silhouette_values = silhouette_samples(X, cluster_labels)
Vivek Kalyanarangan
sumber
0

Ukuran kualitas pengelompokan akan sangat bagus untuk dimiliki. Sayangnya, ukuran itu sulit dihitung - mungkin AI-keras. Anda mencoba mengurangi hal yang sangat kompleks menjadi satu nomor.

Jika AI-sulit, maka Anda bisa meminta orang untuk menilai pengelompokan entah bagaimana. Ini tidak ideal, dan tidak akan skala tetapi Anda akan memiliki satu nomor yang mewakili sesuatu yang dekat dengan yang Anda inginkan.

sinar
sumber
Saya pikir ini tidak benar. Saya hanya bisa memasukkan dokumen teks yang dipelajari dengan baik ke dalam model. Kemudian bandingkan keanggotaan cluster dengan harapan saya.
HelloWorld
Ya. Menggunakan ekspektasi "Anda" adalah apa yang Anda lakukan ketika ukurannya sangat sulit. Anda akan mendapatkan ukuran yang lebih baik jika Anda memasukkan harapan orang lain.
Ray
Saya punya ide. Saya dapat mencoba untuk melatih classificator dan menyesuaikannya dengan label dari model yang berbeda dengan jumlah cluster yang sama. Semakin baik accurancy_score, model yang lebih baik.
Толкачёв Иван