Pembuka
Assalamu'alaikum warahmatullahi wabarakatuh. Puji syukur kehadirat Allah Subhana Wata'ala atas limpahan
Rahmat dan HidayahNya kepada kita semua. Sholawat serta salam senantiasa tercurah limpahkan kepada
baginda Muhammad Rasulullah Salallahualaihiwassalam.
Halo para Pejuang Data. Selamat berjumpa di pertemuan kesembilan Program Training Algoritma Machine
Learning Kelas Mahir.
K Means Clustering
Algoritma K Means Clustering
Contoh K Means Clustering
Fungsi K Means Clustering
K Means Clustering dengan Scikit Learn
K Means Clustering
K-means (MacQueen, 1967) adalah salah satu algoritma pembelajaran tanpa pengawasan paling sederhana
yang memecahkan masalah pengelompokan yang terkenal. Prosedurnya mengikuti cara sederhana dan
mudah untuk mengklasifikasikan kumpulan data yang diberikan melalui sejumlah cluster tertentu (asumsikan k
cluster) tetap secara apriori. Ide utamanya adalah mendefinisikan k centroid, satu untuk setiap cluster. Centroid
ini harus ditempatkan dengan cara yang licik karena lokasi yang berbeda menyebabkan hasil yang berbeda.
Jadi, pilihan yang lebih baik adalah menempatkan mereka sejauh mungkin dari satu sama lain. Langkah
selanjutnya adalah mengambil setiap titik milik kumpulan data yang diberikan dan mengaitkannya ke centroid
terdekat. Ketika tidak ada poin yang tertunda, langkah pertama selesai dan pengelompokan awal dilakukan.
Pada titik ini kita perlu menghitung ulang k centroid baru sebagai barycenter dari cluster yang dihasilkan dari
langkah sebelumnya. Setelah kita memiliki k centroid baru ini, pengikatan baru harus dilakukan antara titik set
data yang sama dan centroid baru terdekat. Sebuah loop telah dibuat. Sebagai hasil dari loop ini kita dapat
melihat bahwa k centroid mengubah lokasinya langkah demi langkah sampai tidak ada lagi perubahan yang
dilakukan. Dengan kata lain centroid tidak bergerak lagi. Terakhir, algoritma ini bertujuan untuk meminimalkan
fungsi tujuan, dalam hal ini fungsi kesalahan kuadrat. Fungsi tujuan
𝑘 𝑛
𝐽 = ∑ ∑ ‖ 𝑥𝑖(𝑗) − 𝑐𝑗 ‖2
𝑗=1 𝑖=1
di mana ‖ 𝑥(𝑗)𝑖 − 𝑐𝑗 ‖2 adalah ukuran jarak yang dipilih antara titik data 𝑥(𝑗)𝑖 dan pusat cluster 𝑐𝑗 , merupakan
indikator jarak n titik data dari masing-masing pusat cluster.
0. Dataset
𝑥1 𝑥2
1 1
2 3
7 8
8 8
In [1]:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
In [2]:
data=pd.DataFrame({"x1":[1,2,7,8], "x2":[1,3,8,8]})
data
Out[2]:
x1 x2
0 1 1
1 2 3
2 7 8
3 8 8
In [3]:
plt.scatter(data.x1, data.x2)
Out[3]:
<matplotlib.collections.PathCollection at 0x2cce5022460>
1. Tentukan parameternya 𝑘
𝑘=2
In [4]:
k=2
Centroid 𝑥1 𝑥2
𝑐1 1 1
𝑐2 2 3
In [5]:
pusat_klaster = np.array([[1,1],[2,3]])
pusat_klaster
Out[5]:
array([[1, 1],
[2, 3]])
In [6]:
In [7]:
In [8]:
def jarak_centroid_euclidean(data,pusat_klaster):
n=len(data)
k=np.array(pusat_klaster).shape[0]
jarak=[]
for i in range(n):
x = list(data.iloc[i,::])
jrk = [jarak_euclidean(x, pusat_klaster[j]) for j in range(k)]
jarak.append(jrk)
return jarak
In [9]:
jarak_centroid=jarak_centroid_euclidean(data,pusat_klaster)
jarak_centroid
Out[9]:
[[0.0, 2.23606797749979],
[2.23606797749979, 0.0],
[9.219544457292887, 7.0710678118654755],
[9.899494936611665, 7.810249675906654]]
In [10]:
def menentukan_klaster(jarak_centroid):
n=len(jarak_centroid)
label_klaster=list()
for i in range(n):
max_val, idx = min((val, idx) for (idx, val) in enumerate(jarak_centroid[i]))
label_klaster.append(idx)
return label_klaster
In [11]:
klaster=menentukan_klaster(jarak_centroid)
klaster
Out[11]:
[0, 1, 1, 1]
In [12]:
In [13]:
pusat_klaster_baru=menghitung_pusat_klaster(data, klaster)
pusat_klaster_baru
Out[13]:
array([[1. , 1. ],
[5.66666667, 6.33333333]])
In [14]:
In [15]:
perubahan_pusat_klaster_euclidean(pusat_klaster, pusat_klaster_baru)
Out[15]:
4.955356249106169
In [17]:
In [18]:
In [19]:
pusat_klaster
Out[19]:
array([[7.5, 8. ],
[1.5, 2. ]])
data=pd.DataFrame({"x1":[1,2,7,8], "x2":[1,3,8,8]})
X=np.array(data)
X
Out[20]:
array([[1, 1],
[2, 3],
[7, 8],
[8, 8]], dtype=int64)
In [21]:
In [22]:
kmeans.labels_
Out[22]:
array([0, 0, 1, 1])
In [23]:
Out[23]:
array([0, 1])
In [24]:
kmeans.cluster_centers_
Out[24]:
array([[1.5, 2. ],
[7.5, 8. ]])
Latihan
Diberikan Dataset
In [25]:
Out[25]:
Confirmed Death
0 1231 10
1 1452 35
2 789 8
3 201 2
4 78 1
5 45 0
In [26]: