K-Means Clustering

Pada lesson k-means clustering, akan dibahas apa yang dilakukan oleh k-means dibeakang layar dalam melakukan clustering. Lalu kita akan membuat program clustering sederhana, mengkelompokan negara berdasar koordinat.

K-Means clustering adalah metode clustering yang paling popular dan banyak digunakan. Berikut tahapan yang terjadi dalam K-means clustering:

  1. Tentukan jumlah cluster
  2. Tentukan cluster seeds atau centroid awal, penentuan seeds dilakukan random berdasarkan pengetahuan data scientist akan data tersebut.
  3. Petakan tiap data points terhadap seed/centroid berdasarkan jarak terdekat.
  4. Hitung centroid dari masing cluster.
  5. Ulangi langkah ke-3.
  6. Ulangi langkah ke-4.
  7. Ulangi langkah diatas hingga semua data point sudah dipetakan terhadap centroid, dan posisi centroid sudah tidak bisa diubah.
K-means clustering
K-means clustering

Pada tahapan diatas, langkah 2 dan seterusnya dilakukan oleh library. Kita hanya perlu menentukan jumlah cluster yang diinginkan dan input data yang diperlukan.

Berikut adalah contoh clustering country berdasarkan longitude dan latitude. Data download disini.

Tips: Untuk memudahkan dalam melakukan programming, gunakan jupyter notebook.

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()
from sklearn.cluster import KMeans

data = pd.read_csv('CountryClusters.csv')

x = data.iloc[:,1:3]

kmeans = KMeans(3)
kmeans.fit(x)

identified_clusters = kmeans.fit_predict(x)
data_with_clusters = data.copy()
data_with_clusters['Cluster'] = identified_clusters

plt.scatter(data_with_clusters['Longitude'],data_with_clusters['Latitude'],c=data_with_clusters['Cluster'],cmap='rainbow')
plt.xlim(-180,180)
plt.ylim(-90,90)
plt.show()
k-means clustering graph

Pembahasan Code

Pertama kita import library pendukung, kali ini akan menggunakan sklearn untuk melakukan k-means clustering.

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()
from sklearn.cluster import KMeans

Load data yang akan digunakan kedalam Pandas data frame.

data = pd.read_csv('CountryClusters.csv')

Tentukan features yang akan digunakan, dalam hal ini adalah data longitude dan latitude. iloc adalah fungsi dari Pandas untuk melakukan slicing. Perintah dibawah akan mengambil seluruh row dan mengambil kolom ke-2 dan 3. (perhatian, data frame Pandas menggunakan zero-based index).

x = data.iloc[:,1:3]
data frame slice untuk fitur
data frame hasil slice

Tentukan jumlah cluster, dalam contoh digunakan 3 cluster. Kemudian lakukan fit model dengan menggunakan data fitur x diatas.

kmeans = KMeans(3)
kmeans.fit(x)

Hasil perhitungan model akan ditampilkan dalam scatter plot. Pertama simpan hasil prediksi dari model ke var identified_clusters. Lalu buat data frame data_with_cluster, dan tambahkan kolom identified_cluster kedalamnya. Setelah itu tampilkan data_with_cluster dalam scatter plot.

k-means clustering data frame for scatter plot
isi variable data_with_cluster
identified_clusters = kmeans.fit_predict(x)
data_with_clusters = data.copy()
data_with_clusters['Cluster'] = identified_clusters

plt.scatter(data_with_clusters['Longitude'],data_with_clusters['Latitude'],c=data_with_clusters['Cluster'],cmap='rainbow')
plt.xlim(-180,180)
plt.ylim(-90,90)
plt.show()

Clustering Type Data Category

Kita juga bisa melakukan clustering pada type daat categori. Sama seperti pada lesson linear regression sebelumnya, kita perlu mengkonversi data category menjadi numerical.

Dataset language, dikonversi dengan menggunakan perintah map dari Pandas. Lalu gunakan data yang sudah kita koversi sebagai independent variable x.

data_mapped = data.copy()
data_mapped['Language'] = data_mapped['Language'].map({'English':0, 'French':1, 'German':2})

x = data_mapped.iloc[:,3:4]
Sharing is caring: