K-Means Clustering menggunakan Python

Gifa Delyani Nursyafitri
4 min readJan 4, 2020

--

Holaa, people!

Balik lagi bareng aku disini. Di kesempatan ini, kita bakalan bahas tentang K-Means Clustering.

Apa sih sebenarnya Algoritma K-Means Clustering itu? Check it out!

Apa itu Algoritma K-Means Clustering?

K-Means Clustering adalah suatu metode penganalisaan data atau metode Data Mining yang melakukan proses pemodelan tanpa supervisi (unsupervised) dan merupakan salah satu metode yang melakukan pengelompokan data dengan sistem partisi.

Terdapat dua jenis data clustering yang sering dipergunakan dalam proses pengelompokan data yaitu Hierarchical dan Non-Hierarchical, dan K-Means merupakan salah satu metode data clustering non-hierarchical atau Partitional Clustering.

Bagaimana cara kerja K-Means Clustering?

Untuk memproses data algoritma K-means Clustering , data dimulai dengan kelompok pertama centroid yang dipilih secara acak, yang digunakan sebagai titik awal untuk setiap cluster, dan kemudian melakukan perhitungan berulang (berulang) untuk mengoptimalkan posisi centroid.

Proses ini berhenti atau telah selesai dalam mengoptimalkan cluster ketika:
1. Centroid telah stabil, yang artinya tidak ada perubahan dalam nilai-nilai mereka karena pengelompokan telah berhasil.

2. Jumlah iterasi yang ditentukan telah tercapai.

Sekarang kita bakalan mulai mencoba K-Means Clustering nya. Data yang kita gunakan disini adalah data ritail Cola, kalian bisa dapetin di sini.

Selanjutnya kita harus mengimport package yang kita butuhkan.

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.preprocessing import MinMaxScaler

Jika telah berhasil, sekarang saatnya input data retail yang telah kita miliki,

retail = pd.read_csv("retail_cola.csv")
retail.head()

Dan akan didapatkan output seperti ini,

Kita juga bisa melihat informasi dari setiap variabel, dengan cara

retail.info()

Data yang kita gunakan ini terdiri atas 8 variabel. Namun, jika dilihat terdapat variabel yang NaN (not a number) maka variabel tersebut dapat dihilangkan.

ritel = ritel.drop(["Unnamed: 4", "Unnamed: 5", "Unnamed: 6", "Unnamed: 7"], axis = 1)
ritel.head()

Kini tidak ada variabel yang kosong. Selanjutnya kita akan menentukan variabel mana yang akan kita kluster kan. Misalkan variabel yang kita pilih adalah Latitute dan Longitude.

ritel_x = ritel.iloc[:, 2:4]
ritel_x.head()

Kita dapat melihat persebaran data tersebut dengan cara berikut,

sns.scatterplot(x=”Longitude”, y=”Latitude”, data=ritel, s=100, color=”red”, alpha = 0.5)

Kemudian kita harus mengubah variabel yang sebelumnya berbentuk data frame menjadi array.

x_array = np.array(ritel_x)
print(x_array)

Karena ukuran data sangat jauh perbedaan rentangnya antara Longitute dan Latitude yang akan menyebabkan plot tidak muncul dengan sempurna maka kita harus melakukan standarisasi.

scaler = MinMaxScaler()
x_scaled = scaler.fit_transform(x_array)
x_scaled

Dapat dilihat bahwa hasil dari scalling data membuat data yang kita miliki berada di antara 0–1. Sehingga tentunya akan lebih mudah untuk diklusterkan.

Setelah itu, kita akan menentukan jumlah klasternya, misalnya disini kita memilih 5 klaster. Jumlah klaster ini bebas tergantung peneliti.

# Menentukan dan mengkonfigurasi fungsi kmeans
kmeans = KMeans(n_clusters = 5, random_state=123)
# Menentukan kluster dari data
kmeans.fit(x_scaled)

Kita dapat mencari nilai pusat dari masing masing klaster,

print(kmeans.cluster_centers_)

Kemudian tampilkan hasil kluster mu dan tambahkan kolom klusteran mu kedalam data frame.

# Menampilkan hasil kluster
print(kmeans.labels_)
# Menambahkan kolom "kluster" dalam data frame ritel
ritel["kluster"] = kmeans.labels_
ritel.head()

Kita dapat memvisualisasikan hasil kluster agar nampak hasil nya dengan jelas.

fig, ax = plt.subplots()
sct = ax.scatter(x_scaled[:,1], x_scaled[:,0], s = 100,
c = ritel.kluster, marker = "o", alpha = 0.5)centers = kmeans.cluster_centers_
ax.scatter(centers[:,1], centers[:,0], c='blue', s=200, alpha=0.5);plt.title("Hasil Klustering K-Means")
plt.xlabel("Scaled Longitude")
plt.ylabel("Scaled Latitude")plt.show()

Yeay! Data ritail cola telah berhasil kita klasterkan menjadi 5 klaster!

Referensi:

  1. https://informatikalogi.com/algoritma-k-means-clustering/
  2. https://medium.com/@16611129/memahami-k-mean-clustering-pada-machine-learning-dengan-phyton-430323d80868

--

--

Gifa Delyani Nursyafitri

Ku abadikan disini, karena aku paham betul bahwa ingatan manusia terbatas.