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:
- Tentukan jumlah cluster
- Tentukan cluster seeds atau centroid awal, penentuan seeds dilakukan random berdasarkan pengetahuan data scientist akan data tersebut.
- Petakan tiap data points terhadap seed/centroid berdasarkan jarak terdekat.
- Hitung centroid dari masing cluster.
- Ulangi langkah ke-3.
- Ulangi langkah ke-4.
- Ulangi langkah diatas hingga semua data point sudah dipetakan terhadap centroid, dan posisi centroid sudah tidak bisa diubah.

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()

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]

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.

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]