Anda di halaman 1dari 19

MAKALAH ALGORITMA K-MEANS

BESERTA CONTOHNYA

Dosen : Ken Kinanti Purnamasari, S.Kom, M.T

Disusun Oleh :
Adam Aris Rizaldy – 10116295
Reyhan Fauzan Nugroho - 10116299
Faisal Rahmi – 10116312
Muhammad Adityo Fathur Rahim – 10116315
Rizqi Adiguna - 10116319

Kelas : IF-7
Tentang Algoritma K-Means

Data Clustering merupakan sebuah proses mengelompokan data ke dalam beberapa


cluster atau kelompok. Data Clustering adalah salah satu metode Data Mining yang bersifat
tidak memerlukan data latih (unsupervised). Ada dua jenis data clustering yang sering
dipergunakan dalam proses pengelompokan data yaitu hierarchical (hirarki) data clustering
dan non-hierarchical (non hirarki) data clustering.

Gambar 1 Hierarchical Clustering

Algoritma K-Means merupakan salah satu dari metode data clustering. Algoritma K-
Means termasuk kedalam kelompok data non hirarki yang berusaha mempartisi data yang ada
ke dalam bentuk satu atau lebih cluster/kelompok. Metode ini mempartisi data ke dalam
cluster/kelompok sehingga data yang memiliki karakteristik yang sama dikelompokkan ke
dalam satu cluster yang sama dan data yang mempunyai karakteristik yang berbeda
dikelompokkan ke dalam kelompok yang lain.
Metode K-Means Clustering berusaha mengelompokkan data yang ada ke dalam
beberapa kelompok, dimana data dalam satu kelompok mempunyai karakteristik yang sama
satu sama lainnya dan mempunyai karakteristik yang berbeda dengan data yang ada di dalam
kelompok yang lain. Dengan kata lain, metode K-Means Clustering bertujuan untuk
meminimalisasikan objective function yang diset dalam proses clustering dengan
cara meminimalkan variasi antar data yang ada di dalam suatu cluster dan memaksimalkan
variasi dengan data yang ada di cluster lainnya.
Gambar 2 Contoh Cluster

Sejarah Algoritma K-Means

Algoritma K-means sudah lama ditemukan oleh beberapa orang yaitu Lloyd (1957,
1982), Forgey (1965) , Friedman and Rubin (1967) , and McQueen (1967). Ide dari clustering
pertama kali ditemukan oleh Lloyd pada tahun 1957, namun hal tersebut baru dipublikasi pada
tahun 1982. Pada tahun 1965, Forgey juga mempublikasi teknik yang sama sehingga terkadang
dikenal sebagai Lloyd-Forgy pada beberapa sumber.

Dari beberapa penemuan yang telah dilakukan, Algoritma K-Means diperkenalkan oleh
J.B. MacQueen pada tahun 1976, salah satu algoritma clustering sangat umum yang
mengelompokkan data sesuai dengan karakteristik atau ciri-ciri bersama yang serupa.Pada
akhirnya penemuan tersebut sama-sama dipublikasikan pada tahun yang sama yaitu tahun
1982, dikarenakan beberapa orang tersebut yang melakukan penemuan Algoritma K-Means
dipelajari,diuji dan diimplementasikan terlebih dahulu.

Kelebihan dan Kekurangan

Ada beberapa kelebihan pada algoritma k-means, yaitu :


1. Mudah untuk di implementasikan dan dijalankan.
2. Waktu yang dibutuhkan untuk menjalankan pembelajaran ini relatif cepat.
3. Sangat fleksibel, adaptasi yang mudah untuk di lakukan
4. Umum digunakan.
5. Menggunakan prinsip yang sederhana dapat di jelaskan dalam non-statistik.
Kekurangan pada algoritma k-means, yaitu :
1. Sebelum algoritma dijalankan, k buah titik diinisialisasi secara random sehingga
pengelompokkan data yang dihasilkan dapat berbeda-beda. Jika
nilai random untuk inisialisasi kurang baik, maka pengelompokkan yang
dihasilkan pun menjadi kurang optimal.
2. Dapat terjebak dalam masalah yang disebut curse of dimensionality. Hal ini dapat
terjadi jika data pelatihan memiliki dimensi yang sangat tinggi (Contoh jika data
pelatihan terdiri dari 2 atribut maka dimensinya adalah 2 dimensi. Namun jika ada
20 atribut, maka akan ada 20 dimensi). Salah satu cara kerja algoritma ini adalah
mencari jarak terdekat antara k buah titik dengan titik lainnya. Jika mencari jarak
antar titik pada 2 dimensi, masih mudah dilakukan. Namun bagaimana mencari
jarak antar titik jika terdapat 20 dimensi. Hal ini akan menjadi sulit.
3. Jika hanya terdapat beberapa titik sampel data, maka cukup mudah untuk
menghitung dan mencari titik terdekat dengan k titik yang diinisialisasi
secara random. Namun jika banyak sekali titik data (misalnya satu milyar buah
data), maka perhitungan dan pencarian titik terdekat akan membutuhkan waktu
yang lama.
4. Adanya penggunaan k buah random, tidak ada jaminan untuk menemukan
kumpulan cluster yang optimal.

Karakteristik K-Means

1. Proses clustering dalam K-Means sangat cepat.


2. K-Means sangat sensitif pada pembangkitan centroid awal secara random.
3. Memungkinkan suatu cluster tidak mempunyai anggota.
4. Hasil clustering dengan K-Means bersifat tidak unik (selalu berubah-ubah), terkadang baik
,terkadang tidak baik.
5. K-means sangat sulit untuk mencapai global optimum
Jika diperhatikan inputnya, algoritma K-Means ini hanya mengolah data kuantitatif atau
numerik. Sebuah basis data tidak mungkin hanya berisi satu macam tipe data saja, akan tetapi
beragam tipe. Sebuah basis data dapat berisi data-data dengan tipe sebagai berikut:

1. Binary
2. Nominal
3. Ordinal
4. Interval
5. Ratio

Berbagai macam atribut dalam basis data yang berbeda tipe disebut sebagai data
multivariate. Tipe data seperti nominal dan ordinal harus diolah terlebih dahulu menjadi data
numerik (bisa dilakukan dengan cara diskritisasi), sehingga dapat diberlakukan algoritma K-
Means dalam pembentukan clusternya.

Tahapan Algoritma K-Means Secara Umum

Data clustering menggunakan metode K-Means ini memiliki tahapan-tahapan yang


pada umumnya dilakukan, yaitu :

1. Menentukan jumlah cluster K dari dataset yang akan dibagi.


2. Menentukan data K yang menjadi titik pusat awal lokasi cluster.
3. Menggelompokkan data ke dalam K cluster sesuai dengan titik pusat terdekat yang
telah ditentukan sebelumnya.
4. Memperbaharui nilai titik awal dan mengulangi langkah ke tiga sampai nilai dari titik
awal tersebut tidak berubah.

Contoh Program

Contoh penggunaan algoritma K-means pada program akan menggunakan dataset


sampel dari data pengemudi pada aplikasi Go-Track. Untuk studi kasus saat ini, data yang
digunakan hanya 2 variabel yang digunakan taitu jarak rata-rata per hari dan kecepatan dalam
mengemudi per hari. Data tersebut diperoleh dari UCI Machine Learning Repository dan
berikut hasil data yang didapatkan :
Gambar 3 Hasil Data
Setelah data terpanggil pada program, pada data yang dihasilkan terdapat 10 buah
variabel dan selanjutnya akan menghilangkan beberapa variabel yang tidak digunakan.

Berikut ini adalah variabel yang akan diklusterkan :


Berdasarkan data di atas, berikut ini perhitungan dari algoritma K-Means pada program
menggunakan dataset sampel dari data pengemudi pada aplikasi Go-Track :
1. Iterasi 1
a1 a2
speed Distance
0 19,210586 2,652
1 30,848229 5,290
2 13,560101 0,918
3 19,766679 7,700
4 25,807401 3,995

1. Menentukan jumlah cluster => K=3


2. Menentukan nilai awal centroid
b1 b2
Cluster 1 : (19,210586, 2,652)
Cluster 2 : (30,848229, 5,290)
Cluster 3 : (13,560101, 0,918)

3. Menghitung kuadrat jarak Euclidean antara data uji dan pusat cluster
No.0 C1
D(a,b) = √(𝑎1 − 𝑏1 )2 + (𝑎2 − 𝑏2 )2
= √(19,210586 − 19,210586 )2 + (2,652 − 2,652)2
= 0

No.0 C2
D(a,b) = √(𝑎1 − 𝑏1 )2 + (𝑎2 − 𝑏2 )2
= √(19,210586 − 13,560101)2 + (2,652 − 0,918)2
= 142,3976

No.0 C3
D(a,b) = √(𝑎1 − 𝑏1 )2 + (𝑎2 − 𝑏2 )2
= √(19,210586 − 13,560101)2 + (2,652 − 0,918)2
= 34,93974

No.1 C1
D(a,b) = √(𝑎1 − 𝑏1 )2 + (𝑎2 − 𝑏2 )2
= √(30,848229 − 19,210586)2 + (5,290 − 2,652)2
= 142,39378

No.1 C2
D(a,b) = √(𝑎1 − 𝑏1 )2 + (𝑎2 − 𝑏2 )2
= √(30,848229 − 30,848229)2 + (5,290 − 5,290)2
= 0
No.1 C3
D(a,b) = √(𝑎1 − 𝑏1 )2 + (𝑎2 − 𝑏2 )2
= √(30,848229 − 13,560101)2 + (5,290 − 0,918)2
= 317,99375

No.2 C1
D(a,b) = √(𝑎1 − 𝑏1 )2 + (𝑎2 − 𝑏2 )2
= √(13,560101 − 19,210586)2 + (0,918 − 2,652)2
= 34,93474

No.2 C2
D(a,b) = √(𝑎1 − 𝑏1 )2 + (𝑎2 − 𝑏2 )2
= √(13,560101 − 30,848229)2 + (0,918 − 5,290)2
= 317,99617

No.2 C3
D(a,b) = √(𝑎1 − 𝑏1 )2 + (𝑎2 − 𝑏2 )2
= √(13,560101 − 13,560101)2 + (0,918 − 0,918)2
= 0

No.3 C1
D(a,b) = √(𝑎1 − 𝑏1 )2 + (𝑎2 − 𝑏2 )2
= √(19,766679 − 19,210586 )2 + (7,700 − 2,652)2
= 25,79154

No.3 C2
D(a,b) = √(𝑎1 − 𝑏1 )2 + (𝑎2 − 𝑏2 )2
= √(19,766679 − 30,848229)2 + (7,700 − 5,290)2
= 128,600885

No.3 C3
D(a,b) = √(𝑎1 − 𝑏1 )2 + (𝑎2 − 𝑏2 )2
= √(19,766679 − 13,560101)2 + (7,700 − 0,918)2
= 84,51713

No.4 C1
D(a,b) = √(𝑎1 − 𝑏1 )2 + (𝑎2 − 𝑏2 )2
= √(25,807401 − 19,210586)2 + (3,995 − 2,652)2
= 45,32162
No.4 C2
D(a,b) = √(𝑎1 − 𝑏1 )2 + (𝑎2 − 𝑏2 )2
= √(25,807401 − 30,848229)2 + (3,995 − 5,290)2
= 27,08697

No.4 C3
D(a,b) = √(𝑎1 − 𝑏1 )2 + (𝑎2 − 𝑏2 )2
= √(25,807401 − 13,560101)2 + (3,995 − 0,918)2
= 159,46429

No C1 C2 C3
0 0 142,393779 34,934737
1 142,393779 0 317,993754
2 34,934737 317,993754 0
3 25,791543 128,608850 84,517134
4 45,321617 27,086972 159,464286

4. Mengelompokkan data (berdasarkan nilai minimum jarak setiap data terhadap cluster)

No C1 C2 C3 Min(C1,C2,C3) Cluster No C1 C2 C3
0 0 142,393779 34,934737 0 C1 0 1 0 0
1 142,393779 0 317,993754 0 C2 1 0 1 0

2 34,934737 317,993754 0 0 C3 2 0 0 1
3 25,791543 128,608850 84,517134 25,791543 C1 3 1 0 0
4 45,321617 27,086972 159,464286 27,086972 C2 4 0 1 0

5. Menghitung mean dari setiap cluster

C1 X1(Speed) X2(distance)
0 19,210586 2,652
3 19,766679 7,700
mean 19,488633 5,176

C2 X1(Speed) X2(distance)
1 30,848229 5,290
4 25,807401 3,995
mean 28,327815 4,643

C3 X1(Speed) X2(distance)
2 13,560101 0,918
mean 13,560101 0,918
2. Iterasi 2
a1 a2
speed Distance
0 19,210586 2,652
1 30,848229 5,290
2 13,560101 0,918
3 19,766679 7,700
4 25,807401 3,995

1. Menentukan jumlah cluster => K=3


2. Menentukan nilai awal centroid
b1 b2
Cluster 1 : (19,488633, 5,176)
Cluster 2 : (28,327815, 4,643)
Cluster 3 : (13,560101, 0,918)

3. Menghitung kuadrat jarak Euclidean antara data uji dan pusat cluster
No.0 C1
D(a,b) = √(𝑎1 − 𝑏1 )2 + (𝑎2 − 𝑏2 )2
= √(19,210586 − 19,488633)2 + (2,652 − 5,176)2
= 6,447886

No.0 C2
D(a,b) = √(𝑎1 − 𝑏1 )2 + (𝑎2 − 𝑏2 )2
= √(19,210586 − 28,327815)2 + (2,652 − 4,643)2
= 87,085955

No.0 C3
D(a,b) = √(𝑎1 − 𝑏1 )2 + (𝑎2 − 𝑏2 )2
= √(19,210586 − 13,560101)2 + (2,652 − 0,918)2
= 34,93974

No.1 C1
D(a,b) = √(𝑎1 − 𝑏1 )2 + (𝑎2 − 𝑏2 )2
= √(30,848229 − 19,488633)2 + (5,290 − 5,176)2
= 129,053429

No.1 C2
D(a,b) = √(𝑎1 − 𝑏1 )2 + (𝑎2 − 𝑏2 )2
= √(30,848229 − 28,327815)2 + (5,290 − 4,643)2
= 6,771743
No.1 C3
D(a,b) = √(𝑎1 − 𝑏1 )2 + (𝑎2 − 𝑏2 )2
= √(30,848229 − 13,560101)2 + (5,290 − 0,918)2
= 317,99375

No.2 C1
D(a,b) = √(𝑎1 − 𝑏1 )2 + (𝑎2 − 𝑏2 )2
= √(13,560101 − 19,488633)2 + (0,918 − 5,176)2
= 53,278050

No.2 C2
D(a,b) = √(𝑎1 − 𝑏1 )2 + (𝑎2 − 𝑏2 )2
= √(13,560101 − 28,327815)2 + (0,918 − 4,643)2
= 231,957277

No.2 C3
D(a,b) = √(𝑎1 − 𝑏1 )2 + (𝑎2 − 𝑏2 )2
= √(13,560101 − 13,560101)2 + (0,918 − 0,918)2
= 0

No.3 C1
D(a,b) = √(𝑎1 − 𝑏1 )2 + (𝑎2 − 𝑏2 )2
= √(19,766679 − 19,488633 )2 + (7,700 − 5,176)2
= 6,447886

No.3 C2
D(a,b) = √(𝑎1 − 𝑏1 )2 + (𝑎2 − 𝑏2 )2
= √(19,766679 − 28,327815)2 + (7,700 − 4,643)2
= 82,641356

No.3 C3
D(a,b) = √(𝑎1 − 𝑏1 )2 + (𝑎2 − 𝑏2 )2
= √(19,766679 − 13,560101)2 + (7,700 − 0,918)2
= 84,51713

No.4 C1
D(a,b) = √(𝑎1 − 𝑏1 )2 + (𝑎2 − 𝑏2 )2
= √(25,807401 − 19,488633)2 + (3,995 − 5,176)2
= 41,321596
No.4 C2
D(a,b) = √(𝑎1 − 𝑏1 )2 + (𝑎2 − 𝑏2 )2
= √(25,807401 − 28,327815)2 + (3,995 − 4,643)2
= 6,771743

No.4 C3
D(a,b) = √(𝑎1 − 𝑏1 )2 + (𝑎2 − 𝑏2 )2
= √(25,807401 − 13,560101)2 + (3,995 − 0,918)2
= 159,46429

No C1 C2 C3
0 6,447886 87,085955 34,934737
1 129,053429 6,771743 317,993754
2 53,278050 231,957277 0,000000
3 6,447886 82,641356 84,517134
4 41,321596 6,771743 159,464286

4. Mengelompokkan data (berdasarkan nilai minimum jarak setiap data terhadap cluster)

No C1 C2 C3 Min(C1,C2,C3) Cluster No C1 C2 C3
0 6,447886 87,085955 34,934737 6,447886 C1 0 1 0 0
1 129,053429 6,771743 317,993754 6,771743 C2 1 0 1 0

2 53,278050 231,957277 0,000000 0,000000 C3 2 0 0 1
3 6,447886 82,641356 84,517134 6,447886 C1 3 1 0 0
4 41,321596 6,771743 159,464286 6,771743 C2 4 0 1 0

5. Menghitung mean dari setiap cluster

C1 X1(Speed) X2(distance)
0 19,210586 2,652
3 19,766679 7,700
m 19,488633 5,176

C2 X1(Speed) X2(distance)
1 30,848229 5,290
4 25,807401 3,995
m 28,327815 4,643

C3 X1(Speed) X2(distance)
2 13,560101 0,918
m 13,560101 0,918
Berikut ini contoh penggunaan algoritma K-means pada program menggunakan
dataset sampel dari data pengemudi pada aplikasi Go-Track.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.preprocessing import MinMaxScaler

# membaca file dataset


driver = pd.read_csv("go_track_tracks.csv")
driver.head()

# menghilangkan fitur yang tidak perlu


driver = driver.drop(["linha", "car_or_bus","rating_weather",
"rating_bus","rating","time"], axis = 1)
driver.head()

# menentukan fitur yang akan diclusterkan


driver_x = driver.iloc[:, 1:3]
driver_x.head()

# mengubah data menjadi array


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

# menstandarkan ukuran data


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

# menentukan nilai k=3


kmeans = KMeans(n_clusters = 3, random_state=123)

# menentukan kluster dari data


kmeans.fit(x_scaled)

# menampilkan pusat cluster


print(kmeans.cluster_centers_)

# menampilkan Hasil Kluster


print(kmeans.labels_)

# menambahkan Kolom "kluster" Dalam Data Frame Driver


driver["kluster"] = kmeans.labels_

# memvisualkan hasil kluster


output = plt.scatter(x_scaled[:,0], x_scaled[:,1], s = 100, c =
driver.kluster, marker = "o", alpha = 1, )
centers = kmeans.cluster_centers_

plt.scatter(centers[:,0], centers[:,1], c='red', s=200, alpha=1 ,


marker="s");
plt.title("Hasil Klustering K-Means")
plt.colorbar (output)
plt.show()

Penerapan algoritma K-means pada program di atas menggunakan Python sebagai


bahasa pemrograman yang akan digunakan. Library yang akan dibutuhkan pada kasus ini
adalah library Scikit-learn. Dan ada beberapa library yang digunakan seperti Panda untuk
membaca dan menulis spreadsheet, Numpy untuk melakukan perhitungan yang efisien dan
Matplotlib untuk visualisasi hasil data.

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import Kmeans
from sklearn.preprocessing import MinMaxScaler

Selanjutnya akan dilakukannya pemanggilan dataset yang berekstensi csv. Setelah data
terpanggil pada program, pada data yang dihasilkan terdapat 10 buah variabel dan selanjutnya
akan menghilangkan beberapa variabel yang tidak digunakan.

driver = pd.read_csv("go_track_tracks.csv")
driver.head()

Sekarang saatnya menghapus beberapa variabel yang tidak digunakan seperti time,
rating, rating_bus, rating_weather, car_or_bus dan hinha. Hingga tinggal variabel id,
id_android, speed dan distance yang tersisa.

driver = driver.drop(["linha", "car_or_bus","rating_weather",


"rating_bus","rating","time"], axis = 1)
driver.head()
Setelah variabel yang dibutuhkan telah fix, selanjutnya menentukan variabel yang akan
diklusterkan. Untuk kasus ini akan menggunakan sumbu X sebagai variabel jarak dan sumbu
Y sebagai variabel kecepatan.

driver_x = driver.iloc[:, 1:3]


driver_x.head()

Data yang telah dihasilkan diatas akan divisualisasikan persebaran datanya.

plt.scatter(driver.distance, driver.speed, s =10, c = "c", marker = "o",


alpha = 1)
plt.show()

Data yang diatas yang sebelumnya telah ditampikan berupa variabel data frame, untuk dapat
menentukan nilai K, maka rubah terlebih dahulu ke dalam bentuk array.
x_array = np.array(driver_x)
print(x_array)

Selanjutnya data yang telah dirubah ke bentuk array akan distandarkan kembali ukuran
variabelnya agar data dapat kembali seperti jenis data yang sebelum dirubah ke dalam bentuk
array.

--- Menstandarkan Ukuran Variabel ---


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

x_scaled
Setelah itu tentukanlah nilai K, jika dalam program nilai n_clusters diisi sesuai dengan
keinginan pembuat dan tergantung studi kasus.

kmeans = KMeans(n_clusters = 3, random_state=123)


kmeans.fit(x_scaled)

Nilai K telah ditentukan, tinggal menampilkan titik pusat atau disebut centroid.

print(kmeans.cluster_centers_)

Menampilkan hasil cluster dan menambahkan kolom data frame driver .

print(kmeans.labels_)
driver["kluster"] = kmeans.labels_
Terakhir memvisualisasikan hasil cluster, dan dari hasil visualisasi dapat terlihat bahwa
pengemudi G-Track telah terbagi menjadi 3 cluster.
output = plt.scatter(x_scaled[:,0], x_scaled[:,1], s = 100, c =
driver.kluster, marker = "o", alpha = 1, )
centers = kmeans.cluster_centers_
plt.scatter(centers[:,0], centers[:,1], c='red', s=200, alpha=1 ,
marker="s");
plt.title("Hasil Klustering K-Means")
plt.colorbar (output)
plt.show()
Daftar Pustaka

[1] INFORMATIKALOGI, "informatikalogi.com : Algoritma K-Means Clustering," 12 November 2016.


[Online]. Available: https://informatikalogi.com/algoritma-k-means-clustering/.

[2] Wikipedia, "Wikipedia : K-Means," [Online]. Available: https://id.wikipedia.org/wiki/K-means.

[3] "Komputasi | Solusi Terapan : Algoritma Clustering K-Means," 14 November 2008. [Online].
Available: https://komputasi.wordpress.com/2008/11/14/algoritma-clustering-k-means/.

[4] R. D. RAMADHANI, "Medium : >> Memahami K-Mean Clustering Pada Machine Learning Dengan
Phyton <<," [Online]. Available: https://medium.com/@16611129/memahami-k-mean-
clustering-pada-machine-learning-dengan-phyton-430323d80868.

[5] P. Yudi Agusta, "K-Means – Penerapan, Permasalahan dam Metode Terkait," Jurnal Sistem dan
Informatika, vol. 3, pp. 47-60, 2007.

Anda mungkin juga menyukai