Selera musik merupakan kualitas yang sangat unik, khas dan khas dari seseorang. Dari jutaan lagu dan suara yang ada, fakta bahwa banyak orang memutuskan untuk mengembangkan kesukaan terhadap gaya, genre, atau “subset” musik tertentu adalah sesuatu yang saya yakini bukan kebetulan belaka. Ada apa di balik lagu yang kita sukai? Apakah mereka serupa? Apa persamaan di antara keduanya? Dan yang lebih penting, apakah ada cara untuk mengumpulkannya berdasarkan suaranya?

Artikel ini menjelaskan upaya kedua saya dalam menjawab beberapa pertanyaan ini.

Sudah cukup lama saya penasaran dengan lagu-lagu yang saya bookmark di Spotify. Selain itu, saya tertarik mempelajari, melalui data, apa yang diungkapkan playlist saya tentang selera musik saya. Untungnya, API Spotify menyediakan sesuatu yang disebut fitur audio, yang sesuai dengan namanya, fitur atau karakteristik sebuah lagu, seperti seberapa akustik atau kerasnya lagu tersebut, dan melalui fitur-fitur tersebut, saya telah menjelajahi dan mempelajarinya. , dan belajar tentang musik saya.

Pada karya saya sebelumnya, berjudul “Apakah musik Spotify saya membosankan?, saya fokus menjawab tiga pertanyaan berikut:

  • Seberapa bervariasi lagu yang saya simpan di Spotify?
  • Seberapa penting peran mereka?
  • Betapa membosankannya mereka?

Dan saya menyimpulkan bahwa lagu-lagu saya memang cukup variatif, dan banyak pula yang bersifat instrumental dan membosankan (berdasarkan rumus yang saya peroleh). Dalam proyek yang sama, saya juga melatih model pembelajaran terawasi dengan tujuan memprediksi apakah suatu lagu termasuk dalam playlist saya atau milik teman, dengan akurasi mencapai 82%.

Sebagai tindak lanjut dari karya kali ini, saya akan terus mengeksplorasi konsep variabilitas playlist saya. Dengan menggunakan algoritme pengelompokan k-medoids, analisis klaster, dan representasi kumpulan data saya yang berdimensi rendah sebagai alatnya, saya menggunakan semua lagu Spotify yang saya simpan untuk menyelidiki kecenderungan pengelompokannya dan, untuk menentukan apakah hal itu mungkin untuk mengelompokkan lagu serupa berdasarkan fitur audionya.

Eksperimen ini dibagi menjadi empat bagian, yang juga mewakili topik utama yang ingin saya pelajari.

  • Berapa jumlah cluster yang paling tepat yang harus saya gunakan?
  • Pengelompokan data dan melihat nilai dari beberapa statistik pengelompokan seperti koefisien siluet, dan ketidaksamaan antar cluster.
  • Seberapa baik pengelompokannya? Seberapa miripkah lagu-lagu dalam setiap cluster? Apakah pengelompokan itu masuk akal?
  • Bagaimana tampilan data yang dikelompokkan?

Mari kita mulai!

Alatnya

Pekerjaan ini dilakukan dengan menggunakan R, dan Python. Bagian clustering dilakukan dengan menggunakan R dan paket caret, dan cluster. Python digunakan untuk memperoleh data menggunakan perpustakaan Spotipy, dan untuk memvisualisasikannya menggunakan Hypertools. Tautan ke kode tersedia di akhir laporan.

Data

Data musik diperoleh dengan menggunakan skrip Python yang saya tulis yang mengambil semua lagu dari playlist tertentu dan fitur audionya. Setelah membersihkan dataset dan menghapus hal-hal yang tidak perlu, saya mendapatkan dataset yang terdiri dari 563 baris (masing-masing mewakili sebuah lagu), dan 5 kolom, yang merupakan fitur audio. Fitur audio tersebut adalah:

Instrumental: Nilai ini mewakili ukuran vokal dalam lagu. Semakin mendekati 1.0, semakin instrumental lagu tersebut.

Akustik: Nilai ini menggambarkan seberapa akustik sebuah lagu. Skor 1,0 berarti lagu tersebut kemungkinan besar merupakan lagu akustik.

Kehidupan: Nilai ini menjelaskan kemungkinan lagu direkam dengan penonton langsung. Menurut dokumentasi resmi “nilai di atas 0,8 memberikan kemungkinan besar bahwa trek tersebut aktif”.

Speechiness: “Speechiness mendeteksi keberadaan kata-kata yang diucapkan dalam sebuah lagu”. Jika kemampuan bicara suatu lagu berada di atas 0,66, kemungkinan lagu tersebut terbuat dari kata-kata yang diucapkan, skor antara 0,33 dan 0,66 berarti lagu tersebut mungkin berisi musik dan kata-kata, dan skor di bawah 0,33 berarti lagu tersebut tidak memiliki ucapan apa pun.

Danceability: “Danceability menggambarkan seberapa cocok sebuah lagu untuk menari berdasarkan kombinasi elemen musik termasuk tempo, stabilitas ritme, kekuatan ketukan, dan keteraturan secara keseluruhan. Nilai 0,0 adalah yang paling tidak dapat ditarikan dan 1,0 adalah yang paling dapat ditarikan”.

*Deskripsi disalin/ditempel dari dokumentasi resmi.

Menentukan jumlah cluster

Saat menggunakan algoritma pengelompokan berbasis partisi, seperti k-medoids, menemukan jumlah cluster yang tepat, juga dikenal sebagai “k”, merupakan langkah yang ambigu dan penting. Di satu sisi, k yang rendah, misalnya k=2, berarti semua observasi pada kumpulan data akan dikelompokkan menjadi 2 cluster, sehingga menghasilkan jumlah observasi yang besar. kesalahan, dan kemungkinan besar hasil pengelompokan yang sulit diinterpretasikan. Opsi kedua, k yang lebih besar, akan mengurangi kesalahan dengan mengorbankan semua observasi yang dipecah menjadi banyak cluster. Jadi, diperlukan keseimbangan, dan mengutip Wikipedia “pilihan k yang optimal akan mencapai keseimbangan antara kompresi maksimum data menggunakan cluster tunggal, dan akurasi maksimum dengan menetapkan setiap titik data ke clusternya sendiri. cluster sendiri”.

Dari semua teknik yang diketahui untuk mendeteksi jumlah cluster, saya menggunakan dan statistik kesenjangan».

Koefisien siluet mengukur seberapa mirip suatu observasi data dengan observasi pada clusternya sendiri (kohesi), dibandingkan dengan observasi pada cluster lain (pemisahan). Nilai siluet berkisar antara -1 hingga 1, dimana 1 menunjukkan kohesi yang baik, dan -1 menunjukkan bahwa objek kemungkinan berada pada cluster yang salah. Dengan menggunakan metode ini, yang saya lakukan adalah mengelompokkan kumpulan data saya beberapa kali menggunakan k yang berbeda, diikuti dengan menghitung dan merata-ratakan siluet semua pengamatan, dan memilih k Saya menemukan yang paling tepat.

Plot berikut menunjukkan siluet rata-rata saat mengelompokkan data menggunakan k=2 hingga k=10.

Meskipun plot menunjukkan bahwa k dari 4 menghasilkan siluet terbaik, saya memutuskan untuk memilih k=5 karena saya tertarik untuk memiliki banyak cluster untuk dianalisis.

Untuk metode kedua yang digunakan, statistik gap, kumpulan data dikelompokkan beberapa kali menggunakan k yang berbeda, dan setiap kali jumlah kotak di dalam cluster di sekitar pusat cluster dikurangi dari sesuatu yang disebut jumlah kuadrat yang diharapkan dalam cluster (jika menurut Anda istilah "yang diharapkan" membingungkan, atau tidak jelas, jangan khawatir, ada banyak perhitungan matematika yang terlibat di balik kata tersebut, dan penjelasannya di luar cakupan artikel ini) . Hasil dari pengurangan ini adalah statistik kesenjangan, dan setelah kita memilikinya untuk setiap k, dan memplotnya, maka akan diperoleh hasil yang mewakili “siku»” dari plot tersebut. , sesuai dengan k yang paling optimal.

Plot berikut menunjukkan semua statistik kesenjangan menggunakan k=2 hingga k =10. Seperti skor siluet, menurut selisihnya, k=3 atau k=4, adalah k terbaik, namun sekali lagi saya memutuskan untuk memilih k=5 .

Oleh karena itu, jawaban atas pertanyaan saya “berapa jumlah cluster yang paling tepat yang harus saya gunakan?” adalah 5.

Sekarang kita telah memilih k, langkah selanjutnya adalah mengelompokkan data.

Pengelompokan dan analisisnya

Algoritma yang digunakan untuk mengelompokkan data adalah k-medoids. Bagi Anda yang memiliki pengalaman sebelumnya dengan k-means, dan belum pernah mendengar atau menggunakan k-medoid sebelumnya, menurut saya perbedaan utama di antara keduanya adalah k-medoid dapat digunakan dengan ukuran kemiripan apa pun. , daripada meminimalkan jarak kuadrat, seperti yang dilakukan di k-means. Selain itu, dalam k-medoids, titik data aktual dari kumpulan data digunakan sebagai item paling sentris dalam cluster, tidak seperti k-means, yang menggunakan titik dalam ruang fitur yang mewakili pusat cluster, menjadikan yang pertama lebih kuat terhadap outlier.

Gambar berikut merupakan keluaran langsung dari hasil clustering. Setiap baris mewakili sebuah cluster, dan setiap kolom adalah satu informasi tentangnya. Mulai dari kiri, kolom pertama “size” adalah jumlah observasi per cluster, “max_diss” adalah ketidaksamaan maksimum, yaitu jarak antara titik data yang adalah yang terjauh dari medoid cluster, “av_diss” rata-rata ketidaksamaan, lalu kita memiliki “diameter” yang merupakan ketidaksamaan maksimal antara dua titik pada cluster yang sama, dan terakhir , “pemisahan”, ketidaksamaan minimal antara titik data dari satu cluster dan titik data dari cluster lainnya.

Dari segi ukuran, cluster 4 merupakan cluster terbesar dengan total 143 lagu, sedangkan cluster ketiga yang terdiri dari 60 lagu merupakan cluster terkecil. Cluster ini juga merupakan cluster yang menunjukkan max dissimilarity dan average dissimilarity tertinggi. Hal ini menunjukkan bahwa isi dari cluster ini, jika dibandingkan dengan yang lain, cukup terpisah dari medoid atau pusatnya; cluster ini juga menunjukkan nilai pemisahan yang paling besar, artinya paling jauh dari yang lain, dan diameternya juga paling besar, menjadikannya cluster “terbesar” dari segi jarak. Sebaliknya, cluster 4 adalah cluster yang memiliki nilai ketidaksamaan, diameter, dan pemisahan maks dan rata-rata terendah.

Sebelumnya, saya memperkenalkan koefisien siluet untuk menggunakannya sebagai cara mencari k yang bagus. Sekarang saya akan menggunakannya sebagai metode untuk menguji kebaikan cluster. Gambar berikut menunjukkan siluet setiap titik data yang dikelompokkan berdasarkan cluster.

Angka-angka di sebelah kanan gambar adalah rata-rata siluet setiap cluster. Cluster 2 memiliki siluet paling rendah (0,27), sedangkan cluster 4 memiliki siluet terbaik (0,55). Cluster 2 juga merupakan cluster yang memiliki observasi terbanyak dengan siluet lebih rendah dari 0, dan secara teori, ini berarti kasus-kasus tersebut mungkin milik cluster lain.

Berdasarkan semua metrik yang disajikan di bagian ini, cluster 4 tampaknya menjadi yang terbaik, karena memiliki rata-rata jarak dan diameter intra-cluster terbaik, ditambah siluet tertinggi. Oleh karena itu, ini adalah salah satu cluster yang akan saya gunakan dan bedah di bagian selanjutnya untuk benar-benar memverifikasi apakah cluster tersebut memang bagus.

Seberapa baik pengelompokannya?

Cara terbaik untuk mengetahui apakah cluster tersebut bagus adalah dengan mendalaminya dan melihat kontennya untuk melihat apakah cluster tersebut terkait dan apakah ada polanya, misalnya lagu dari album yang sama, artis yang sama, serupa. suara, atau gaya yang sama. Pada bagian ini, saya akan menyajikan beberapa lagu yang dikelompokkan dalam cluster 3 dan 4, dan terlebih lagi, saya akan melakukan clustering baru menggunakan konten cluster 4 untuk mencoba menemukan kesamaan lebih lanjut.

Pada bagian sebelumnya telah saya nyatakan bahwa cluster 4 terdiri dari 143 observasi, menjadikannya yang terbesar. Pada daftar berikut, saya akan menunjukkan beberapa album yang termasuk dalam cluster ini, jumlah lagunya, dan dalam beberapa kasus saya akan membuat catatan mengenai album tersebut.

  • The Lord Of The Rings — The Return Of The King — Rekaman Lengkap (Edisi Terbatas): 38 lagu
  • Interstellar: Soundtrack Gambar Bergerak Asli (Versi Deluxe): 12 lagu
  • Child of Light: 10 lagu; ini adalah soundtrack video game.
  • Interstellar: Original Motion Picture Soundtrack (ya, saya punya versi reguler dan Deluxe dari album ini, jadi ada beberapa duplikat): 10 lagu
  • Mad Max: Fury Road — Soundtrack Gambar Bergerak Asli: 9 lagu
  • Distant Worlds II: lebih banyak musik dari Final Fantasy: 7lagu; permainan video lainnya.
  • Mass Effect 3: 7 lagu; video game.
  • sementara(1 ‹ 2), olehDeadmau5: 7 lagu; musik elektronik.
  • Dibawa dalam Darah: 5; musik yang terinspirasi oleh video game Bloodborne.
  • Transistor: 5lagu; video game.

Lagu-lagu lainnya termasuk Kanye West, Star Wars, cover dari lagu Interstellar, lagu dari Mr. Robot (acara TV), The Martian (film), Muse, The Hobbit, dan lain-lain.

Nada dan gaya utama lagu-lagu cluster ini adalah instrumental; lagu yang hampir tidak memiliki vokal. Seperti yang mungkin Anda ketahui, sebagian besar berasal dari musik asli film (Interstellar, Lord of the Rings) dan video game (Final Fantasy , Efek Massal); bahkan lagu Kanye West itu, merupakan selingan instrumental yang tidak memiliki vokal.

Mari kita lihat cluster 3, yang terkecil. Sekali lagi, saya akan mencantumkan album dan jumlah lagu.

  • Akustik, olehAbove & Beyond: 12 lagu
  • Akustik II, olehAbove & Beyond: 11 lagu
  • The Life of Pablo, oleh Kanye West: 6lagu
  • Benteng: 4 lagu; sebuah permainan video.
  • Interstellar: Soundtrack Gambar Bergerak Asli (Versi Deluxe): 3 lagu
  • The Lord Of The Rings — The Return Of The King — Rekaman Lengkap (Edisi Terbatas): 3 lagu
  • Interstellar: Soundtrack Gambar Bergerak Asli: 2 lagu
  • Transistor: 2 lagu

Pada pandangan pertama, cluster ini tampak sedikit lebih beragam dari yang sebelumnya (yang mungkin menjadi alasan mengapa cluster ini memiliki perbedaan terbesar), ia memiliki beberapa musik video game, lebih banyak lagi Interstellar, Lord of the Rings, dan beberapa hip-hop dan rap. Namun yang menarik adalah lagu ini berisi 23 lagu dari album Above & Beyond Acoustic. Untuk memberikan sedikit konteks, kedua album ini adalah versi akustik dari beberapa lagu Above and Beyond yang paling terkenal, dan yang membuat saya penasaran adalah meskipun keduanya adalah album berbeda, dirilis pada tahun berbeda, gayanya sama menurut mereka. fitur audio dan cluster. Penting untuk disebutkan bahwa album pertama berisi 12 lagu dan album kedua 13 lagu, sehingga cluster mampu menangkap hampir semuanya (23 dari 25).

Karena cluster 3 memiliki sedikit variasi, saya mengelompokkan kontennya dalam model baru untuk memverifikasi apakah algoritme dapat mendeteksi keragaman tersebut. Secara khusus, saya tertarik untuk melihat apakah lagu-lagu dari album Acoustics, lagu hip-hop dan rap, serta lagu-lagu dari film dan video game, ditempatkan pada cluster yang berbeda. Seperti terakhir kali, k-medoids digunakan, kali ini dengan k=4.

Grafik sebelumnya adalah plot siluet cluster baru. Rata-rata lebar siluet adalah 0,29, skor yang lebih rendah dan lebih buruk dibandingkan skor sebelumnya, yaitu 0,40. Apalagi kali ini ada cluster yang sangat buruk dengan skor 0,10. Di bawah ini adalah ringkasan cluster.

  • Cluster 1:
    Above & Beyond Album akustik: 6 lagu
    — Rap: 2 lagu
    — Musik instrumental: 3 lagu
    — Musik pop, musik elektronik, balada Spanyol: 1 masing-masing lagu
    — Frank Sinatra (jazz): 1 lagu
  • Cluster 2:
    Above & Beyond Album akustik: 15 lagu(16, jika kita menghitung duplikat dari album lain)< br /> — Lagu Lord of the Rings dengan vokal: 1
    — lagu soundtrack Bastion dengan vokal: 2
    Transistor lagu soundtrack dengan vokal: 1
  • Cluster 3:
    — Rap: 6 lagu
    — Elektronik: 2 lagu
  • Cluster 4:
    Antarbintang: 5 lagu
    Lord of the Rings: 2 lagu

Saya sangat senang dengan hasil yang diperoleh pada cluster kedua. Sebagai permulaan, lebih dari separuh lagu berasal dari album Akustik, dan lagu lainnya memiliki beberapa kesamaan (percayalah). Misalnya, lagu dari Bastion dan Transistor adalah lagu santai dengan suara lembut dan perasaan akustik yang menampilkan gitar (juga kedua album tersebut dibuat oleh artis yang sama). Lagu dari Lord of the Rings sedikit lebih ceria dibandingkan lagu sebelumnya, tapi menurut saya cocok dengan temanya.

Secara umum, saya puas dengan hasil model pengelompokan. Meskipun pengelompokannya terkadang rumit dan membingungkan, saya yakin pengelompokan ini mampu menangkap esensi keberagaman musik saya. Dalam cluster yang dibahas, saya dapat mengenali beberapa pola seperti adanya musik instrumental dan orkestra (dari video game dan film) dalam satu cluster, dan lagu-lagu dengan perasaan akustik (gitar, beberapa alat musik tiup) di cluster lain. Mengenai ketiga cluster (dari model pertama) yang tidak saya tulis, salah satunya mengungkapkan fokus pada musik rap, hip-hop dan elektronik, dan sisanya adalah sampah (yang memiliki musik dari semua genre dan artis).

Visualisasi

Saat bekerja dengan pengelompokan (dan data secara umum), saya selalu bertanya-tanya seperti apa tampilan datanya. Di paragraf terakhir, saya telah berbicara banyak tentang cluster, diameter, dan pemisahan serta banyak hal lain yang entah bagaimana ambigu dan sulit dibayangkan di kepala seseorang. Oleh karena itu, bagian terakhir eksperimen ini didedikasikan untuk memvisualisasikan kumpulan data dan cluster.

Dataset proyek ini terdiri dari 5 fitur, dan jika saya ingin membuat grafik semuanya, saya perlu mempertimbangkan fakta bahwa bagi kita manusia tidak mungkin (sejauh yang saya tahu) mengalami hal-hal di luar alam. dari tiga dimensi. Salah satu pilihannya adalah dengan memilih 2 atau 3 fitur dan memplotnya, namun, kami akan kehilangan banyak informasi karena kami akan kehilangan fitur lainnya. Dan sejujurnya, itu bukan ide yang buruk dalam hal ini karena kumpulan data hanya memiliki 5 dimensi, namun ada kumpulan data yang terdiri dari ribuan fitur, dan dalam kasus seperti itu, memplot 2 atau 3 tidak akan memberi Anda visual yang bagus. representasi data. Jadi, bagaimana kita mengatasinya?

Untungnya, ada rangkaian algoritme yang disebut reduksi dimensi yang tujuannya adalah memproyeksikan data berdimensi tinggi ke berdimensi rendah agar kita dapat melakukan beberapa hal seperti memvisualisasikannya. Dari algoritma tersebut, saya memilih menggunakan t-Distributed Stochastic Neighbor Embedding (t-SNE) dan Principal Component Analysis (PCA). Sayangnya, saya tidak akan menjelaskan secara detail karena rumitnya, dan sejujurnya, saya tidak sepenuhnya memahaminya (khususnya t-SNE) jadi saya yakin penjelasan saya akan kurang (jika ada yang punya sumber bagus mengenai hal ini, silakan tambahkan di komentar).

Dua gambar pertama adalah representasi t-SNE dan PCA dari cluster utama.

Kedua gambar tersebut menunjukkan seberapa baik cluster tersebut didefinisikan, dan seberapa sedikit tumpang tindih di antara mereka, dengan pengecualian beberapa konten cluster 5 yang tampaknya berada di cluster 2. Pada bagian sebelumnya, telah disebutkan bahwa cluster 3 adalah clusternya. yang berdiameter lebih besar, dan ini dapat diamati pada gambar, khususnya pada t-SNE. Kalau dilihat gambar paling kanan, ada satu titik cluster 3 yang jelas-jelas berada di cluster 1, serta satu titik lagi di atas cluster 4 dan satu lagi di cluster 2, jadi cluster 3 memang benar-benar ada. menyebar. Sebagai bonus, saya akan menambahkan representasi t-SNE kedua tetapi kali ini dalam 3D, dan meskipun agak sulit untuk memahaminya dalam 2D, mungkin ada baiknya menambahkan wawasan tambahan tentang cluster.

Mengenai clustering yang dilakukan pada data cluster 3, seperti inilah tampilan t-SNE.

Catatan utama dari grafik ini adalah seberapa tersebarnya data cluster 3; 4 lagu berada di atas cluster 2 dan sisanya berada di bawahnya, dan Anda mungkin ingat dari diskusi, bahwa cluster 3 memiliki 4 lagu dari Lord of the Rings. Mungkinkah 4 titik ini adalah lagu-lagu itu? Mungkin. Selain itu, skor siluet rata-rata cluster ini (0,10) adalah yang terendah dari model (memiliki beberapa skor negatif), sehingga diharapkan dapat mengamati ketersebaran ini.

Untuk meringkas segmen ini, saya ingin mengatakan bahwa meskipun grafik ini dibuat dengan mengubah data dari ruang lima dimensi menjadi dua dimensi — bukan data asli yang digunakan untuk pengelompokan — grafik tersebut sudah cukup baik untuk menghasilkan beberapa hasil yang dibahas di bagian sebelumnya, dan juga, untuk membantu saya memahami lebih baik apa yang terjadi dalam model.

Kesimpulan

Di awal artikel ini, saya menyampaikan rasa ingin tahu, atau pertanyaan yang saya miliki tentang musik saya. Pertanyaannya adalah: “Apakah mungkin menemukan musik serupa di seluruh cluster berdasarkan fitur audionya?” Untuk menjawabnya, saya membagi soal menjadi 4 langkah berbeda. Pertama, dengan menggunakan koefisien siluet dan statistik kesenjangan, saya dapat menentukan nilai k yang sesuai. Selanjutnya data diklaster menggunakan k-medoids, dan dijelaskan hasil clusteringnya, misalnya diameter, separasi, dan ketidaksamaan tiap cluster. Kemudian, dari seluruh cluster, dipilih dua cluster untuk diverifikasi kontennya secara manual. Salah satunya sebagian besar berisi musik dari video game dan soundtrack film. Yang kedua lebih beragam; itu berisi lagu rap, lagu akustik, lagu instrumental, dan lebih banyak musik dari video game. Dengan menggunakan semua musik dari cluster kedua ini, model baru diciptakan untuk menyelidiki apakah mungkin untuk memiliki masing-masing gaya musik yang disebutkan di atas dalam cluster terpisah. Hasilnya positif. Sebagian besar lagu akustik berada di bawah cluster yang sama, sedangkan musik rap berada di cluster lain. Terakhir, cluster divisualisasikan untuk memberi kita gambaran yang jelas tentang tampilannya, dan selain itu, saya dapat menunjukkan beberapa pola yang diamati selama bagian analisis cluster.

Saya puas dan puas dengan hasil yang diperoleh dalam proyek ini. Sebagai permulaan, itu adalah sesuatu yang menyenangkan untuk dilakukan. Saya bisa belajar lebih banyak tentang pola musik saya, menjawab beberapa pertanyaan yang ada di benak saya, dan sepanjang prosesnya, serta menemukan kembali beberapa lagu yang sudah lama tidak saya dengar. Saya yakin pengelompokan itu sendiri bagus (saya tidak pernah mengharapkan yang sempurna), dalam artian tidak terlalu berantakan, dan sepertinya ada korelasi antara konten tiap cluster. Pendapat ini bisa jadi bias karena sayalah yang menentukan bahwa lagu-lagu tersebut memang mirip, tapi ini didasarkan pada selera musik saya, telinga saya, dan keinginan saya untuk mendapatkan hasil positif dari hal ini. Jika saya memutuskan untuk terus mengerjakan hal ini, saya ingin mencoba algoritma yang berbeda, khususnya algoritma pengelompokan berbasis grid seperti CLIQUE atau berbasis kepadatan seperti DBSCAN.

Kode yang digunakan untuk proyek ini, termasuk kumpulan data, tersedia di Github saya: https://github.com/juandes/audio-features-unsupervised-learning

Saya harap Anda menikmati ini dan mempelajari sesuatu yang baru. Jika Anda memiliki pertanyaan, klarifikasi, atau menemukan ketidakkonsistenan di sini, silakan tinggalkan komentar.

Terima kasih sudah membaca :)