Saya menggunakan analisis semantik laten untuk mewakili kumpulan dokumen di ruang dimensi yang lebih rendah. Saya ingin mengelompokkan dokumen-dokumen ini menjadi dua kelompok menggunakan k-means.
Beberapa tahun yang lalu, saya melakukan ini menggunakan gensim Python dan menulis algoritma k-means saya sendiri. Saya menentukan cluster centroid menggunakan jarak Euclidean, tetapi kemudian mengelompokkan setiap dokumen berdasarkan kesamaan cosinus dengan centroid. Tampaknya bekerja dengan cukup baik.
Sekarang saya mencoba melakukan ini pada kumpulan dokumen yang jauh lebih besar. K-means tidak konvergen, dan saya bertanya-tanya apakah itu bug dalam kode saya. Saya membaca baru-baru ini bahwa Anda seharusnya tidak mengelompokkan menggunakan cosinus similarity, karena k-means hanya berfungsi pada jarak Euclidean. Meskipun, seperti yang saya sebutkan, tampaknya berfungsi dengan baik dalam test case saya yang lebih kecil.
Sekarang saya menemukan ini di halaman LSA Wikipedia :
Dokumen dan representasi vektor istilah dapat dikelompokkan menggunakan algoritma pengelompokan tradisional seperti k-means menggunakan langkah-langkah kesamaan seperti cosinus.
Jadi yang mana? Bisakah saya menggunakan persamaan cosinus atau tidak?
I then assigned each document to a cluster based on cosine similarity
- Kosongkan antara doc dan centroid? Dan setelah semua dokumen ditetapkan, Anda memperbarui centroid dengan cara biasa (Euclidean), karena koordinat dokumen dalam ruang diketahui. Apakah begitu?