Catatan penting : Jika Anda benar-benar awam tentang apa itu Python, silakan klik artikel saya ini. Jika Anda awam tentang R, silakan klik artikel ini.
Seperti yang kita ketahui bahwa ML (Machine Learning) secara umum dibagi ke dalam 3 jenis, yaitu supervised, unsupervised dan reinforcement learning. Clustering merupakan ML yang masuk ke dalam kategori unsupervised learning, karena kita tidak memberitahu agen bagaimana cara melakukan sesuatu.
Inti dari K-Means adalah kita mengelompokkan suatu dataset ke dalam beberapa kelompok, sebanyak K buah. Perlu diingat bahwa K adalah jumlah awal, di mana algoritmanya nanti akan mencari pengelompokan (clustering) yang paling baik. Penentuan angka K di tahap awal ini sangat krusial dalam melakukan proses clustering.
Pengelompokan yang paling baik itu seperti apa? Yaitu pengelompokkan di mana semua kelompok yang dibuat bisa mewakili dataset dengan sempurna, yang ditunjukkan oleh jarak antara satu kelompok yang satu dengan yang lain sangat signifikan. Tentu dengan belajar melalui sebuah contoh nyata akan lebih mudah memahaminya.
Tahapan K-Means Clustering:
- Memilih jumlah cluster awal (K) yang ingin dibuat.
- Memilih titik secara random sebanyak K buah, di mana titik ini akan menjadi pusat (centroid) dari masing-masing kelompok (clusters).
- Dari dataset yang kita miliki, buat dataset yang terdekat dengan titik centroid sebagai bagian dari cluster tersebut. Sehingga secara total akan terbentuk clusters sebanyak K buah.
- Lakukan kalkulasi, dan tempatkan pusat centroid yang baru untuk setiap cluster-nya. Langkah ini bisa disebut juga dengan istilah penyempurnaan centroid.
- Dari dataset yang kita miliki ambil titik centroid terdekat, sehingga dataset tadi menjadi bagian dari cluster tersebut. Jika masih ada data yang berubah kelompok (pindah cluster), kembali ke langkah 4. Jika tidak, maka cluster yang terbentuk sudah baik.
Untuk memberikan gambaran yang jelas (sebelum latihan dengan bahasa phyton atau R), akan saya berikan ilustrasi yang mudah untup setiap langkahnya.
Anggap kita memiliki dataset 2-dimensi. Misal adalah data pelanggan sebuah restoran sebagai berikut:

Permasalahan yang sering muncul adalah kita tidak tahu arti dari grafik (kurva) di atas. Apa yang bisa kita lakukan dengan data ini. Apakah bisa digali lagi lebih dalam, sehingga bisa digunakan untuk memaksimalkan teknik pemasaran misalnya.
Langkah 1 (pilih jumlah K, misal K=2)
Langkah pertama adalah memilih jumlah kluster. Misal kita pilih untuk membaginya ke dalam 2 kluster kali ini (tentunya penentuan K bebas, tapi ada metode optimum yang akan kita pakai nanti).
Langkah 2 (tentukan titik pusat untuk masing-masing kluster)
Sekarang kita akan menentukan titik pusatnya. Jadi setiap kluster memiliki titik pusatnya sendiri. Tenang saja, pemilihan titik-titik ini bebas, karena nantinya algoritma K-Means akan merubah posisi tiap titik hingga dicapai solusi paling optimal.
Anggap 2 titik pusat untuk masing-masing kluster adalah sebagai berikut:

Dengan demikian, maka masing-masing data point akan memilih titik pusat (centroid) yang paling dekat. Jika sudah dipilih maka data point tersebut akan menjadi bagian dari klusternya.
Sebagai tips, untuk melihat data points mana saja yang masuk ke kluster 1 atau 2, maka cukup tarik garis lurus antara 2 titik pusat (garis A warna hijau). Kemudian, cari titik tengah garis A, lalu dari titik tengah tersebut buat garis tegak lurusnya (garis B warna ungu). Maka kita bisa melihat titik mana saja yang masuk kluster 1 (sisi kiri garis B) dan mana saja yang masuk kluster 2 (sisi kanan garis B), seperti ilustrasi di bawah ini:

Tips mengetahui pembagian kluster secara visual.
Langkah 3 (pilih titik pusat kluster yang paling dekat untuk semua dataset)
Berdasarkan pembagian di atas, maka setiap dataset sekarang sudah masuk ke dalam salah satu kluster seperti gambar di bawah ini:

Langkah 4 (Lakukan kalkulasi, pilih titik pusat yang baru. Ulangi sampai semua pembagian titik optimal)
Pada langkah ini, kita melakukan kalkulasi algoritma K-Means, di mana ia akan mencari posisi titik pusat yang paling sesuai, berdasarkan posisi titik awalnya.

Langkah 5 (Pilih titik pusat terdekat, dan masuk ke dalam kluster tersebut. Jika masih ada perpindahan kluster, kembali ke langkah 4.
Algoritma K-Means akan terus mencari titik pusatnya, sampai 100% pembagian datasetnya optimum.
Untuk melanjutkan membaca silakan klik halaman berikutnya di bawah ini.
makasih pak, sangat jelas detail dan bisa di jalankan tanpa adanya kesulitan
Sama-sama, semoga bermanfaat 🙂
Kalau mengacu pada formula machine learning (Tom M. Mitchell), Formula T,P,E (Task,Performance,Experience) untuk kasus clustering/unsupervised learning ini mengidentifikasinya bagaimana ya pak?
Definisi Mitchell sangat cocok jika ditempatkan untuk reinforcement learning, karena mudah sekali menentukan mana T, P, dan E. Definisi ini juga masih relevan untuk supervised learning, karena parameter untuk evaluasinya jelas seperti akurasi, confusion matrix, atau loss function (untuk deep learning). Berbeda dengan unsupervised learning, evaluasi parameternya tidak jelas (tidak baku), namun masih bisa sedikit dielaborasi: Task = Apa tugas algoritmanya = Membagi data ke dalam beberapa clusters Experience = Data apa saja yang harus dikumpulkan = Menggunakan data point di sekeliling cluster yang sudah ada untuk menentukan ia berada di cluster mana Performance = Bagaimana mengevaluasi hasilnya = Bisa… Read more »
cara menampilkan table dataset dan dataframe gimana? thanks
Halo, mungkin maksudnya cara melihat variabelnya ya?
Jika menggunakan spyder, cukup klik 2x di bagian dataset atau y_kmeans di ‘Variabel explorer’.
Nanti akan terlihat tabel yang menunjukkan dataset dan y_kmeans nya.
Jika menggunakan R solusinya juga sama, cukup klik 2x di variabel tersebut.
Semoga menjawab 😀
saya kurang paham spyder soalnya saya hanya menggunakan jupyter notebook yg muncul hanya gambar elbow dan hasil clustering nya saja apa ada cara lain jika menggunakan jupyter notebook? Terimakasih pak
Halo, untuk menampilkannya di jupyter notebook juga sangat mudah.
Misal jika ingin menampilkan tabel ‘dataset’ maka cukup ketikkan ‘dataset’ <-- tanpa tanda petik, lalu ketik ALT+ENTER di keyboard (atau tombol Run di Jupyter Notebook) maka akan muncul hasilnya di layar. Semoga membantu 😀
kalau tabel basil clustring (y_means) bisa? maaf banya tanya baru belajar? saya coba pake algoritma r sudah bisa cuman install spyder ada error saya ga tau kenapa jadi saya masih penasaran
Gunakan Anaconda saja saat menginstall spyder maupun jupyter notebook.
Bisa dilihat cara install Anaconda di artikel saya tentang ‘Belajar Python’.
supaya tahu id mana di cluster mana..karena di website bapak tidak ada keteranganya cluster merah itu id berapa saja dst..terimakasih pak
Untuk tahu id berapa masuk ke cluster berapa cukup ketikkan indeksnya di layar.
Misal ingin mengetahui ID ke 3 (indeks dimulai dari nol) ada di cluster mana, ketik ‘y_kmeans[2]’ kemudian ketik ALT+ENTER maka akan muncul di layar ia masuk di cluster 3 (indeks dimulai dari nol).
Atau jika ingin melihat pengelompokan cluster semua ID cukup lihat ‘y_kmeans’ nya.
Ada baiknya belajar dasar-dasar python untuk mempermudah (bisa dibaca di artikel saya juga).
Semoga membantu
terimakasih banyak pak infonya sangat membantu semoga ilmunya berkah ya pak 😀
halo pak, saya mau bertanya, dari sekian banyak kolom yang ada dalam dataset, bagaimana menentukan 2 kolom terakhir untuk digunakan dalam kmeans clustering?
Halo,
Tinggal dilihat saja permasalahannya, variabel apa saja yang dianggap penting oleh si pengambil keputusan.
Dalam hal ini kita memang ingin mengelompokkan berdasarkan besar pendapatan dan rating pengeluarannya.
Semoga menjawab.
misalnya pak, kita mengacu penggunaan data iris yang sering digunakan, nah dari kebanyakan pengaplikasian iris dataset pada kmeans clustering,variabel yang digunakan adalah petal width dan petal length. apakah ada teknik khusus pak? ataukah di kmeans itu sendiri, sudah memilih variabel mana yang cocok untuk dikelompokkan?
Tidak ada teknik khusus. Untuk solusi awal, cukup masukkan semua variabel dan gunakan elbow method nanti akan menunjukkan jumlah kluster yang terbaik berapa.
Bisa juga dicoba-coba hanya menggunakan beberapa variabel saja untuk klustering dan bandingkan hasilnya jika menggunakan semua variabel.
Silakan berkreasi 🙂
halo pak, mau bertanya lagi, bagaimana pengerjaan taknik elbow secara manual ya pak?
Elbow method sudah saya jelaskan di artikel ini. Formulanya ada, tinggal hitung saja secara manual.
terimakasih pak, saya sudah mencoba. Saya mau bertanya kembali, apakah bapak ada memuat artikel tentang k-means yang memakai trick kernel (kernel K-Means)? saya sudah mencari di website ini dan hasilnya not found.
Saya bary pertama kali memakai RStudio ini, mu tanya kalau muncul “Error : objeck ‘wcss’ not found’ itu kenapa ya?. Itu muncul nya setelah baris for di Run
Halo, kemungkinan objek wcss (line 7) belum dieksekusi.
Terimakasih Pak, yg itu sudah berhasil dan sudah muncul grafiknya. Cuman saya masih bingung dengan hasilnya, hasil bapak kenapa bisa 50000, 100000 dst…? Sedangkan grafik saya hasilnya 0e+00 dan 4e+10, itu kenapa ya? boleh dibantu lagi pak…
Hasil 50000 dan 100000 di bagian mananya? Apakah ini bahas K-Means?
Iya pak membahas k-means
yg bingung di eksekusi line ke berapa?
Sudah di eksekusi dan grafiknya sudah muncul. Kalau grafik bapak kan bagian wcss di grafiknya itu mucul angka 50000, 100000, 150000 dst. sedangkan saya muncul di bagian wcss grafiknya itu 0e+00, 4e+10. itu kenapa ya pak? apa itu karena pengaruh data yang dimasukkan?
Oh ini bahas grafik WCSS, saya pikir grafik K-Means nya.
Apakah ini pakai data yang sama persis seperti di website ini, atau pakai data sendiri?
Sepertinya pakai data sendiri ya.
Nilai WCSS adalah nilai sum of squares, tidak perlu khawatir. Nilai 4e+10 (setara dengan 40.000.000.000) disingkat oleh programnya karena memang terlalu panjang jika ditampilkan utuh.
Yang penting fokus saja dengan hasil grafiknya, dan gunakan metode elbow method, sehingga bisa dilihat jumlah kluster yang tepat.
Semoga menjawab.
Iya pak datanya menggunakan data sendiri, jadi tidak ada masalah berarti ya pak? saya kira itu ada error atau apa. Terimakasih banyak pak jawabannya sangat membantu sekali
caranya gimana pak? apa eksekusi perbaris? saya error terus
Error di baris ke berapa? Pakai Python atau R?
Aslm pak..mo tanya ttg k-means..
Jika data yg saya punya dlm bentuk data categorical sebanyak 7 fitur dan datanya sebanyak 100 baris..
Bagaimana cara mengubah data categorical ke dlm numeric?
Kl menggunakan python source code nya bagaimana?
Terima kasih..
Wlkmslm,
Saya asumsikan 7 fitur yang dimaksud adalah 7 kolom ya.
Jadi ada banyak kategori dan terdiri dari 7 fitur (kolom) dengan total 100 baris.
Di Python bisa gunakan library sklearn, lalu pakai method LabelEncoder.
Ini saya kasi link nya biar bisa belajar langsung dari sumbernya:
https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.LabelEncoder.html
Semoga menjawab.
mas izin belajar dari code nya.
terima kasih buat ilmunya 🙂
pak saya mau bertanya kalo untuk data pekanggan hotel bisa di cluster?dan outputnya segementasi pelanggan bisa?saya masih kurang paham pak terimakasih
Jawabannya bisa.
selamat siang pak, mau bertanya saya punya data facebook untuk user yang melakukan penjualan online baik melalui vidio, status, photo dan link dengan feature status_publis yang berisi tanggal dan waktu publis, dan reaksi terhadap penjualan yakni berupa comment, likes, share. Kemudian setelah saya analisis ternyata status_publis tersebut bisa saya perlebar lagi menjadi hari publis jualan, waktu publis jualan, bulan publis jualan, dan tahun publis jualan dengan satuan yang berbeda-beda. Saya mau bertanya, apakah saya bisa mengelompokkan data saya tersebut menggunakan k-means walaupun satuannya berbeda-beda yakni ada yang satuan bulan, tahun, hari, dan jam serta untuk reaksi seperti commens, likes, shares… Read more »
K-Means bisa-bisa saja digunakan untuk membuat cluster. Tapi saya tidak paham mengapa berusaha mencampurkan data dengan satuan yang berbeda-beda?
Cari tujuan besarnya, lalu cari tools (metode) yang sesuai, dan jangan paksakan tools untuk tujuan tertentu karena bisa saja tidak pas.
oo begitu terimakasih pak. Mau bertanya kembali, apakah bapak pernah membahasa Kernel K-Means?
Pak kalau hasil uji k-means pakai silhuette coefficient dan purity measure itu bagaimana penerapannya pada python, mohon bantuanya pak
Hanya beda teknik perhitungannya saja.
Ini sama halnya di statistik untuk menentukan error bisa menggunakan MSE, SSE, RMSE dan banyak parameter lainnya.
Penerapannya bisa dilihat di web sklearn nya langsung. Cukup ketikkan di Google sklearn silhouette coefficient, dan dipelajari sendiri penerapanya.
Kunci penggunaannya adalah harus ada rujukannya, kenapa harus menggunakan parameter tersebut. Rujukan terbaik adalah jurnal internasional Q1 dalam rentang 5 tahun terakhir, dan text book adalah pilihan terakhir.
Hallo pak, Maaf sebelumnya pak, saya ingin bertanya untuk pengukuran kualitas dari clustering. sebenarnya saya sendiri masih bingung dalam hal penerapan Teknik Elbow, silhouette, dan DBI. dan jujur, saya sangat kurang paham dalam statistika karena memang diajarkan hanya untuk digunakan, menurut bapak, dari ketiga metoda diatas yang paling cocok untuk pengukuran clustering itu yang mana ya pak? selain itu untuk keyword dalam mencari di jurnal sekiranya apa ya pak? sudah beberapa belakangan ini saya sedikit buntu. sekian dan terima kasih pak
Hmm, kalau untuk keperluan riset, mas Ekki bisa buat riset sendiri. Bandingkan ketiga metode itu dan lihat performanya masing-masing.
Untuk pencarian riset di bidang clustering bisa mulai dari google scholar, lalu ketikkan ‘best method for clustering’. Nanti akan muncul banyak list, mulailah baca dari yang paling baru (mulai tahun 2020, 2019, dan mundur).
Kalau untuk keperluan sehari-hari (aplikasi) yang banyak dikenal orang adalah elbow method.
Semoga menjawab.
Terima kasih pak atas jawabannya. Saya ingin bertanya kembali. Sebelumnya, Saya sudah mencoba ketiganya pak, tapi hasilnya tidak bersinergi. Jika salah satunya hasilnya bagus, apakah saya perlu menggunakan salah satunya saja pak?
Misal, di dalam riset saya silhouette sangat bagus jika k = 2, sedangkan di elbow k=2 & k=3 termasuk, dan pada davies bouldin k=5 yang hasilnya bagus. Nah jika dilihat dari validasinya berarti lebih baik saya memasukkan sillhouette dan elbow ya pak?
Halo,
Iya silakan dipilih mana yang performanya paling baik sesuai dengan indikatornya.
Silakan ditentukan sendiri apa parameter (indikator) baik tidaknya performa dari ketiga metode tersebut.
Semoga menjawab.
mas saya mau bertanya tentang Mengimpor dataset dataset = pd.read_csv(‘Pengunjung_mall.csv’) seperti apa
Maaf mau tanya mengenai line 8 bagian python, kenapa ya harus ada proses slicing?
Sudah ada keterangan di penjelasan tiap barisnya.
baik pak, tapi bagaimana caranya misal kita memiliki variabel lebih dari 2, misal dengan 5 variabel? apakah masih bisa digambarkan plotnya?
terimakasih….
Banyak variabel tidak masalah, tapi tidak mungkin divisualisasikan jika lebih dari 3 variabel (3 dimensi).
lantas… bagaimana pak caranya mengetahui data kita telah diklasterkan dengan baik, seperti di line 38.
Line 38 adalah perintah untuk menunjukkan tampilan plot yang dibuat.
Untuk multidimensi bisa gunakan Self-Organizing Maps (SOM).
yaps, maaf pak mau tanya sekali lagi. apakah bapak ada rekomendasi buku mengenai python yg menjelaskan secara lengkap mengenai K-Means Elbow dan Machin learning lainnya? terimakasih pak…
Bisa dicari di google scholar untuk jurnal terbaru tentang machine learning.
yappps, terimakasih pak atas jawabannya.
sangat membantu🙂
cara menghiyung akurasi dari k means bagaimana pak ?
Clustering tidak punya akurasi, karena kita tidak pernah punya label (var dependen) aslinya.
Performa clustering bisa dievaluasi menggunakan nilai silhouette.
Halo pak saya mau bertanya pada line 8 melakukan slicing menggunakan python. Cara menampilkan kolom tabelnya bagaimana ya pak. Saya menggunakan jupyter kolom tersebut tidak tampil.
Di Jupyter memang tidak muncul. Saya menggunakan Spyder
mohon maaf pak. ini kan baru sampai mengelompokan data sesuai kedekatannya.
nah jika saya ingin memasukan data baru (setelah terbentuk klaster) untuk mengetahui, kira2 data yg saya input masuk ke klaster yg mana. apakah bisa?
jika ya… apakah bisa meng-share contoh codenya.. terimakasih
Ada 2 cara, cara yang pertama adalah lakukan clustering dari awal dengan data-data yang baru. Karena nanti centroidnya akan berubah dengan data-data yang baru dimasukkan.
Cara kedua adalah setelah ahsil cluster keluar, misal dipilih 3 cluster. Maka ubah datasetnya menjadi permasalahan klasifikasi, dengan cluster adalah labelnya.
Izin bertanya Pak, random_state=42 itu pakai default value ya?, darimana ya dapat 42 dan apakah pengaruh nya kalau kita salah dalam menentukan random_state Pak?, Terimakasih banyak Pak🙏🏻
Angka random state bebas. Ini untuk replikasi hasil saja. Jika ingin mendapatkan hasil yang sama, maka selalu gunakan angka random state yang sama juga.