Você está na página 1de 30

LAPORANTUGASAKHIR

ANALISISALGORITMAKMEANSCLUSTERING
DENGANMENGGUNAKANOPENMP

(StudiKasus:DataSurveiSosialEkonomiNasionalBPS)

DisusunDalamRangkamemenuhiTugasAkhir
MataKuliahEL6210KomputasiParalel

ProgramStudiPascaSarjanaInformatika
SekolahTeknikElektrodanInformasi
InstitutTeknologiBandung
2013

DAFTARPUSTAKA

DAFTARPUSTAKA......................................................................................................................................i
DAFTARTABEL..........................................................................................................................................ii
DAFTARGAMBAR....................................................................................................................................iii

1.

PENDAHULUAN................................................................................................................................1

1.1. KMeansClustering...........................................................................................................................1
1.2. AlgoritmaKMeansClustering..........................................................................................................1
1.3. CaraKerjaAlgoritmaKMeanClustering:.........................................................................................3
2.

STUDIKASUSKMEANSCLUSTERING...............................................................................................4

2.1. StudiKasus.......................................................................................................................................4
2.2. TahapanIterasiKMeansClustering.................................................................................................4
3. IMPLEMENTASIALGORITMAKMEANSCLUSTERING.......................................................................8
3.1. SpesifikasidanTools.........................................................................................................................8
3.2. SerialProgramming..........................................................................................................................9
3.3. ParalelProgramming......................................................................................................................12
4.

ANALISISPROGRAMPARALELKMEANSCLUSTERING...................................................................15

4.1. WaktuEksekusiProgramSerial......................................................................................................15
4.2. WaktuEksekusiProgramParalel....................................................................................................16
4.3. SebaranObjekDataBerdasarkanCluster.......................................................................................18
5.

KESIMPULAN..................................................................................................................................21

DAFTARPUSTAKA...................................................................................................................................22
LAMPIRAN..............................................................................................................................................23

DAFTARTABEL

Tabel1.StrukturObjekData....................................................................................................................4
Tabel2.HasilPengelompokkanGroupObjekData..................................................................................8
Tabel3.WaktuEksekusiProgramSerial................................................................................................15
Tabel4.WaktuEksekusiProgramParalel..............................................................................................16
Tabel5.Selisihrataratawaktueksekusiantaraprogramparaleldenganserial...................................18

ii

DAFTARGAMBAR

Gambar1.FlowchartKMeansClustering................................................................................................2
Gambar2.Skema3matrixdenganvariabelvariabelnya........................................................................3
Gambar3.SebaranobjekdatakecentroidawalpadaIterasi0...............................................................4
Gambar4.SebaranobjekdatakecentroidbarupadaIterasi1...............................................................6
Gambar5.SebaranobjekdatakecentroidbarupadaIterasi2...............................................................7
Gambar6.KodeProgramSerialKMeansClustering.............................................................................11
Gambar7.KodeProgramParalelKMeansClustering...........................................................................14
Gambar8.PenerapanParalelPadaKodeProgram................................................................................15
Gambar9.GrafikRataRataWaktuEksekusiProgramSerial.................................................................16
Gambar10.GrafikRataRataWaktuEksekusiProgramSerialdanParalel............................................17
Gambar11.GrafikSebaranObjekDataBerdasarkanClusteruntukN:10RT.......................................18
Gambar12.GrafikSebaranObjekDataBerdasarkanClusteruntukN:100RT....................................19
Gambar13.GrafikSebaranObjekDataBerdasarkanClusteruntukN:1.000RT..................................19
Gambar14.GrafikSebaranObjekDataBerdasarkanClusteruntukN:10.000RT................................20
Gambar15.GrafikSebaranObjekDataBerdasarkanClusteruntukN:100.000RT..............................20

iii

ANALISISALGORITMAKMEANSCLUSTERING
DENGANMENGGUNAKANOPENMP
1. PENDAHULUAN
1.1. KMeansClustering

KMeans Clustering merupakan metode untuk mengklasifikasikan atau mengelompokkan

objekobjek (data) ke dalam Kgroup (cluster) berdasarkan atribut tertentu. Pengelompokkan data
dilakukandenganmemperhitungkanjarakterdekatantaradatadata(objekobservasi)denganpusat
cluster (centroid). Prinsip utama dari metode ini adalah menyusun K buah centroid atau ratarata
(mean)darisekumpulandataberdimensiN,dimanametodeinimensyaratkannilaiKsudahdiketahui
sebelumnya (apriori). Algoritma Kmeans dimulai dengan pembentukan prototipe cluster diawal
kemudian secara iteratif prototipe cluster tersebut diperbaiki sehingga tercapai kondisi konvergen,
yaitu kondisi dimana tidak terjadi perubahan yang signifikan pada prototipe cluster. Perubahan ini
diukurdenganmenggunakanfungsiobjektifDyangumumnyadidefinisikansebagaijumlahataurata
ratajaraktiapitemdatadengancentroidgroupnya.

1.2. AlgoritmaKMeansClustering

Algoritma KMeans Clustering merupakan metode clustering berbasis jarak yang membagi

datadata ke dalam sejumlah cluster dimana proses clustering tersebut dilakukan dengan
memperhatikankumpulandaridatadatayangakandikelompokkan.Padaalgoritmaini,pusatcluster
ataucentroiddipilihpadatahapawalsecaraacakdarisekumpulankoleksi(populasi)data.Kemudian
KMeans menguji masingmasing komponen didalam populasi data dan menandai komponen
tersebut ke salah satu centroid yang telah didefinisikan sebelumnya berdasarkan jarak minimum
antara komponen (data) dengan masingmasing centroid. Posisi centroid akan dihitung kembali
sampaisemuakomponendatadikelompokkankesetiapcentroiddanterakhirakanterbentukposisi
centroidbaru.Iterasiiniakanterusdilakukansampaiterciptakondisikonvergen.Secaralebihdetail,
algoritmaKmeansClusteringadalahsebagaiberikut:
1. DefinisikanjumlahKcluster.
2. InisialisasiKpusatcluster(centroid)sebagaiseedpoints(prototipeclusterawal).Centroidini
dapatdiperolehsecaraacakataudipilihdariKobjekdatapertama.
3. Untuk setiap komponen data, hitung dan tandai jarak (distance) ke centroid awal kemudian
masukkandatatersebutkecentroidyangpalingdekatjaraknya

4. Hitung dan ubah kembali centroid tiap cluster sebagai ratarata dari seluruh anggota
kelompok(group)clustertersebut.
5. Cek semua data kembali dan taruh setiap data yang terdekat dengan centroid baru. Jika
anggota tiap cluster tidak berubah (konvergen), maka langkah berhenti dan jika masih
berubah,kembalikelangkah2.
BerikutiniflowchartdarialgoritmaKMeans:
Begin

DefinisikanJumlah
clusterK

Tentukancentroid

Adaobjek
yang
berpindah
kelompok?

Hitungjarakobjekdata
kecentroid

End

Kelompokkanobjekdataberdasarkan
jarakminimumkecentroid

Gambar1.FlowchartKMeansClustering

Berdasarkan uraian tersebut, maka algoritma KMeans Clustering akan melakukan proses

iterasi atau pengulangan langkahlangkah berikut sampai terjadi kestabilan (konvergen) atau tidak
adaobyekdatayangberpindahcentroid:
1.

Menentukankoordinatsetiapcentroid

2.

Menentukanjaraksetiapobyekdatakecentroid

3.

Mengelompokkan obyekobyek data tersebut berdasarkan pada jarak minimumnya


terhadapcentroid

1.3. CaraKerjaAlgoritmaKMeanClustering:

Jika jumlah data (N) lebih kecil dari jumlah cluster (K) maka kita masukkan setiap data

menjadi centroid dari cluster. Setiap centroid memiliki sebuah nomor cluster. Jika jumlah data lebih
besardarijumlahcluster,makauntuksetiapdatakitahitungjarakterhadapseluruhcentroidhingga
mendapatkan jarak minimum (terdekat). Jika kita tidak yakin mengenai lokasi centroid, lakukan
pendekatan mengenai letak centroid berdasarkan data terkini. Lalu masukkan semua data pada
centroidbarutersebut.Prosesiniberulangsampaitidakadalagidatayangdipindahkanpadacluster
lainnya.Secaramatematisperulanganinidapatdibuktikansecarakonvergen.

Data

....

TotalData

NomorCluster

....

NomorCluster

SumXY 1
1

Banyakdatadalamcluster

Centroid 1

....

NomorCluster

Gambar2.Skema3matrixdenganvariabelvariabelnya

2. STUDIKASUSKMEANSCLUSTERING
2.1. StudiKasus

Studi Kasus yang digunakan pada KMeans Clustering ini adalah Data Survei Sosial Ekonomi

Nasional (SUSENAS) Tahun 2012 BPS Provinsi Bali. Objek data yang digunakan disini adalah Rumah
Tangga (RT) dengan atribut (komponen) objek data yang diambil sebanyak 2 (dua) variabel, yaitu X
(Pengeluaran)danY(Pendapatan).Berikutcontohlayoutsederhanadariobjekdatatersebut:
Tabel1.StrukturObjekData
X:Pengeluaran
(ribuan)
1
2
4
5

ObjekData
RumahTanggaA
RumahTanggaB
RumahTanggaC
RumahTanggaD

Y:Pendapatan
(ribuan)
1
1
3
4

UntukimplementasialgoritmaKMeansClustering,jumlahobjekdatayangdigunakanadalah

maksimal sebanyak 100.000 Rumah Tangga, dimana koleksi objek data tersebut digunakan secara
bertahap dengan interval log n, sehingga ada 5 (lima) kali training set untuk mencapai jumlah
populasiobjekdatatersebut,meliputi10,100,1.000,10.000dan100.000RumahTangga.

2.2. TahapanIterasiKMeansClustering
iteration
0
Iterasi0
4.5

Pendapatan(Y)
attribute
2 (Y): pH

4
3.5
3
2.5
2
1.5
1
0.5
0
0

attribute Pengeluaran(X)
1 (X): weight index

Gambar3.SebaranobjekdatakecentroidawalpadaIterasi0

BerikutinitahapantahapaniterasialgoritmaKMeansClustering:
1. JumlahKCluster
JumlahclusteryangdiinginkanadalahsebanyakK,misalnyasebanyak2cluster(group),sehingga
jumlahcentroidyangharusdidefinisikandiawaljugasebanyak2(dua)centroid.
2. Iterasi0:Setnilaiawalcentroid
Misalkan nilai awal centroid adalah 2 nilai atribut pertama pada objek data : Rumah Tangga A
danB,dinotasikandenganC1danC2,dimanaC1=(1,1)danC2=(2,1)
3. Iterasi0:Jarakdarisetiapobjekdatakecentroid

?
?
Hitung jarak (D) setiap objek data tersebut?ke centroid
cluster
dengan
menggunakan Euclidean
?
Distance,sehinggadidapatkanmatriksjaraksebagaiberikut:
c1 ? (1,1)? group / 1

5
0 1 3.61
D0 ? ?

1 0 2.83 4.24
A B C
D

use Euclidean distance, then we have distance matrix at iteration

1 2 4
1 1 3

c 2? (2,1)? group / 2

Each column in the distance matrix symbolizes the object. The


! + (3a 1)!
corresponds to the distance of each object
to the
centroid
JarakobjekRumahTanggaCkeC
(4 first
2)
1:

= 3.61

!
!
JarakobjekRumahTanggaCkeC
?
/ - /2: (4
? 2) + (3 1) = 2.83

4. Iterasi0:ClusteringObjekData
?
/
- /
?

Selanjutnyamelakukanpengelompokkan(G)objekdatatersebutkecluster(group1ataugroup
2)berdasarkanjarakminimum(terdekat)dengancentroid.
element
of Group matrix below
/ is 1 if and o

?
0
1
0
0
group
/1

/
0

G ?

0 1 1 1

group / 2

Dari matrik G tersebut, terlihat bahwa Rumah Tangga A masuk kedalam group 1, sedangkan
RumahTanggaB,CdanDmasukkedalamgroup2
5. Iterasi1:Tentukancentroidbaru
Setelah mengetahui anggota setiap group, langkah selanjutnya adalah menghitung kembali
centroid baru untuk setiap group tersebut. Group 1 hanya mempunyai 1 (satu) anggota, yaitu
RumahTanggaAdengancentroidbarusamadengancentroidawalC1=(1,1),sedangkanGroup2
mempunyai3(tiga)anggota,yaituRumahTanggaB,CdanD,sehinggacentroidbaruadalahrata
ratajarakdariseluruhanggotaobjekdatayangmasukdalamkelompok(group)2.
! =

2+4+5 1+3+4
11 10
,
= ( , )
3
3
3 3

- -

- -

iteration
1
Iterasi1

4.5

Pendapatan(Y)

attribute 2 (Y): pH

? 3.5

3
2.5

- -

- -

- -

- -

?
?

2
1.5
1
0.5
0
0

attributePengeluaran(X)
1 (X): weight index

5.Gambar4.SebaranobjekdatakecentroidbarupadaIterasi1
Iteration-1, Objects-Centroids distances: The next step is to comp

?
6. Iterasi1:JarakObjekDatakeCentroid

Langkahinimerupakanprosespenghitunganjaraksetiapobjekdatakecentroidbarutersebut

denganformulayangsamapadaStep3.

the new centroids. Similar to step


2, we have distance matrix
at iteration

/1
c1 ? (1,1) group
1
3.61 5
0
D1 ?

8
11
3.14 2.36 0.47 1.89 c 2 ? ( 3 , 3 ) group / 2
?
/
A
B
C
D
?

/
1
X ?
2
4? 5
/
1
1
3 4 Y

6. Iteration-1,
Objects clustering: Similar to step 3, we assign each obj
7. Iterasi1:ClusteringObjekData

Selanjutnyamelakukanpengelompokkan(G)objekdatatersebutkecluster(group1ataugroup
/

?
?
?
?
?
2)berdasarkanjarakminimum(terdekat)dengancentroidbaruhasilIterasi1

objects remain. The Group


matrix/is shown

group / 1
1 1 0 0
G1 ?

0 0 1 1 group / 2

? centroids: Now
? we
Iteration 2, determine
1
A

7.

Dari matriks G tersebut terlihat bahwa anggota group 1 mengalami perubahan yaitu menjadi

- 2 menjadi
Rumah Tangga A ?dan- B, sedangkan
anggota ?
group
? Rumah Tangga C dan D.
?
Dikarenakanterjadiperubahananggotadalamgroupmakadilakukanprosesiterasikembali.

/
8. Iterasi2:Tentukancentroidbaru

UlangiStep5untukmenentukancentroidbarudengancaramenghitungnilairataratajarakdari

seluruhanggotaobjekdatauntukmeasingmasinggroup.

1- 2 1-1
4-5 3- 4
,
) ? (1 12 ,1) and c 2 ? (
,
) ? (4 12 ,3 12 )
2
2
2
2

on the clustering of previous iteration. Group1 and group 2 both has two members
ntroids are c1 ? (

iteration
2
Iterasi2
4.5

Pendapatan(Y)
attribute
2 (Y): pH

4
3.5
3
2.5
2
1.5
1
0.5
0
0

attributePengeluaran(X)
1 (X): weight index

8. Iteration-2, Objects-Centroids distances: Repeat step 2 again, we


Gambar5.SebaranobjekdatakecentroidbarupadaIterasi2

?
9. Iterasi2:JarakObjekDatakeCentroid

?
?

UlangiStep3untukmenghitungkembalijaraksetiapobjekdatadengancentroidbaru

c1 ? (1 12 ,1) group / 1
0.5 0.5 3.20 4.61

D ?
c ? (4 1 ,3 1 ) group

/2
4.30
3.54
0.71
0.71
2

2
2
A
B
C
/
D
?

X
2
4
1
/
5
1

1
3
4 Y

9. Iteration-2, Objects clustering: Again, we assign ?


each object based on the m

roup / 1
1 1 0 0
?

10. Iterasi2:ClusteringObjekData/

iteration 2 as
2

Selanjutnyamelakukanpengelompokkan(G)objekdatatersebutkecluster(group1ataugroup
2)berdasarkanjarakminimum(terdekat)dengancentroidbaruhasilIterasi2
?

group / 1
group / 2

1 1 0 0
G2 ?

0 0 1 1

9.

Iteration-2, Objects clustering: Again, we ass

We obtain result that G

? G . Comparing

Dari matriks G2 tersebut terlihat tidak ada perubahan anggota untuk group 1 dan group 2,
sehinggasudahtercapaikondisikonvergen.Prosesiterasitidakperludilakukanlagidanrankaian
prosesclusteringselesai.Hasilakhirdariprosesiniadalahkoordinatcentroidakhirdanidentitas
group(cluster)untukmasingmasingobjekdata.

Tabel2.HasilPengelompokkanGroupObjekData
X:Pengeluaran
(ribuan)
1
2
4
5

ObjekData(N)
RumahTanggaA
RumahTanggaB
RumahTanggaC
RumahTanggaD

Y:Pendapatan
(ribuan)
1
1
3
4

Group
(Cluster)
1
1
2
2

3. IMPLEMENTASIALGORITMAKMEANSCLUSTERING
3.1. SpesifikasidanTools
SpesifikasiKomputeryangdigunakanadalahsebagaiberikut:

SistemOperasi

:Windows732Bit

Processor

:AMDTurionX2DualCore2.2GHz

RAM

:4GB

ToolsyangdigunakandalampembuatanprogramserialdanparalelKMeansClusteringpadalaporan
iniadalah:

BahasaPemrograman :C++

IDE

:CodeBlocks10.05

Compiler

:gcc

Library

:OpenMP

3.2. SerialProgramming
BerikutinisourcecodedariProgramSerialKMeansClustering
//--------------------------------------------------------------------------------//Program Serial K-Means Clustering
//Aris Jayandrana (NIM. 23512180)
//Maria Fransiska Sirait (NIM. 23512198)
//Novianto Budi Kurniawan (NIM. 23512176)
//--------------------------------------------------------------------------------#include <stdio.h>
#include <math.h>
#include <string>
#include <sstream>
#include <iostream>
#include <vector>
#include <fstream>
#include <stdlib.h>
using namespace std;
int main()
{
//baca file
ifstream in("D:/TUgas Paralel Final/mydata10.csv");
string line, field;
vector< vector<string> > array;
vector<string> v;
while ( getline(in,line) )
{
v.clear();
stringstream ss(line);
while (getline(ss,field,','))
{
v.push_back(field);
}
array.push_back(v);
}

int cluster[4], count[4];


const int rows = array.size();
const int columns = 2;
const int crows = 2;
const int ccolumns = 2;
float dmin, dpoint[rows][crows];

//jumlah titik

// int point[rows][columns]={{5,5},{2,1},{1,3},{5,4}};
//int group[rows];
int point[rows][columns];
int group[rows];
//group id untuk tiap point
int group_member_count[2]={0,0};
//jumlah anggota untuk tiap group
double centroid [crows][ccolumns];
for(int i =0;i<rows;i++)
{
for(int j=0;j<columns;j++){
point[i][j]= atoi(array[i][j].c_str());
// printf("%d\n",point[i][j]);

}
}
//pilih 2 titik pertama sebagai centroid
for (int i=0;i<2;i++)
{
for(int j=0;j<2;j++)
{
centroid[i][j] = point[i][j];
}
//
printf("Initial centroid group %d :
(%f,%f)\n",i,centroid[i][0],centroid[i][1]);
}
//masukkan semua titik ke group 0
for (int i = 0; i < rows; i++) {
group[i]=0;
}
int group_changing = 2;
while(group_changing>0)
{
group_changing = 0;
//ukur jarak antar titik ke centroid
for (int i = 0; i < rows; i++) {
for (int j = 0; j < 2; j++)
{
dpoint[i][j] = 0.0;
dpoint[i][j] += sqrt(pow((point[i][0] centroid[j][0]),2)+pow((point[i][1] - centroid[j][1]),2));
// printf("Jarak point %d ke centroid %d :
%f\n",i+1,j+1,dpoint[i][j] );
}
}
//masukkan tiap titik kedalam group dengan mengukur jarak centroid yang paling
dekat
int temp_group;
group_member_count[0]=0;
group_member_count[1]=0;
for (int i = 0; i < rows; i++) {
if (dpoint[i][0]<dpoint[i][1])
{
temp_group = group[i];
group[i] = 0;
group_member_count[0]++;
if(temp_group != group[i])
{
group_changing++;
}
}
else if(dpoint[i][0]>dpoint[i][1])
{
temp_group = group[i];
group[i]=1;
group_member_count[1]++;
if(temp_group != group[i])
{
group_changing++;
}
}
else

10

{
temp_group = group[i];
group[i]=0;
group_member_count[0]++;
if(temp_group != group[i])
{
group_changing++;
}
}
}
//hitung posisi centroid baru untuk tiap group
float sumX[2]={0,0},sumY[2]={0,0};
for (int i = 0; i < rows; i++) {
if(group[i] == 0){
sumX[0] += point[i][0];
sumY[0] += point[i][1];
}
else{
sumX[1] += point[i][0];
sumY[1] += point[i][1];
}
}
double newCentroid[crows][ccolumns];
newCentroid[0][0] = sumX[0]/group_member_count[0];
newCentroid[0][1] = sumY[0]/group_member_count[0];
newCentroid[1][0] = sumX[1]/group_member_count[1];
newCentroid[1][1] = sumY[1]/group_member_count[1];
printf("Centroid baru group 0 = (%f,%f) ; dengan sumX = %f, sumY = %f, group
member =
%d\n",newCentroid[0][0],newCentroid[0][1],sumX[0],sumY[0],group_member_count[0]);
printf("Centroid baru group 1 = (%f,%f) ; dengan sumX = %f, sumY = %f, group
member =
%d\n",newCentroid[1][0],newCentroid[1][1],sumX[1],sumY[1],group_member_count[1]);
centroid[0][0]
centroid[0][1]
centroid[1][0]
centroid[1][1]

=
=
=
=

newCentroid[0][0];
newCentroid[0][1];
newCentroid[1][0];
newCentroid[1][1];

}
ofstream myfile;
myfile.open ("D:/TUgas Paralel Final/data_hasil_clustering.csv");
for(int i=0;i<rows;i++)
{

myfile
myfile
myfile
myfile
myfile
myfile

<<
<<
<<
<<
<<
<<

point[i][0];
",";
point[i][1];
",";
group[i];
"\n";

}
myfile.close();
}

Gambar6.KodeProgramSerialKMeansClustering

11

3.3. ParalelProgramming
BerikutinisourcecodedariProgramParalelKMeansClustering
//--------------------------------------------------------------------------------//Program Paralel K-Means Clustering
//Aris Jayandrana (NIM. 23512180)
//Maria Fransiska Sirait (NIM. 23512198)
//Novianto Budi Kurniawan (NIM. 23512176)
//--------------------------------------------------------------------------------#include <stdio.h>
#include <math.h>
#include <string>
#include <sstream>
#include <iostream>
#include <vector>
#include <fstream>
#include <stdlib.h>
#include <omp.h>
using namespace std;
int main()
{
omp_set_num_threads(2);
//baca file
ifstream in("D:/TUgas Paralel Final/mydata10.csv");
string line, field;
vector< vector<string> > array;
vector<string> v;
while ( getline(in,line) )
{
v.clear();
stringstream ss(line);
while (getline(ss,field,','))
{
v.push_back(field);
}
array.push_back(v);
}

int cluster[4], count[4];


const int rows = array.size();
const int columns = 2;
const int crows = 2;
const int ccolumns = 2;
float dpoint[rows][crows];

//jumlah titik

// int point[rows][columns]={{5,5},{2,1},{1,3},{5,4}};
//int group[rows];
int point[rows][columns];
int group[rows];
//group id untuk tiap point
int group_member_count[2]={0,0};
//jumlah anggota untuk tiap group
double centroid [crows][ccolumns];

12

for(int i =0;i<rows;i++)
{
for(int j=0;j<columns;j++){
point[i][j]= atoi(array[i][j].c_str());
// printf("%d\n",point[i][j]);
}
}
//pilih 2 titik pertama sebagai centroid
for (int i=0;i<2;i++)
{
for(int j=0;j<2;j++)
{
centroid[i][j] = point[i][j];
}
// printf("Initial centroid group %d :
(%f,%f)\n",i,centroid[i][0],centroid[i][1]);
}
//masukkan semua titik ke group 0
for (int i = 0; i < rows; i++) {
group[i]=0;
}
int group_changing = 2;
while(group_changing>0)
{
group_changing = 0;
#pragma omp parallel
{
//ukur jarak antar titik ke centroid
#pragma omp parallel for
for (int i = 0; i < rows; i++) {
for (int j = 0; j < 2; j++)
{
dpoint[i][j] = 0.0;
dpoint[i][j] += sqrt(pow((point[i][0] centroid[j][0]),2)+pow((point[i][1] - centroid[j][1]),2));
printf("Jarak point %d ke centroid %d : %f\n",i+1,j+1,dpoint[i][j] );
}
}
}
//masukkan tiap titik kedalam group dengan mengukur jarak centroid yang paling
dekat
int temp_group;
group_member_count[0]=0;
group_member_count[1]=0;
for (int i = 0; i < rows; i++) {
if (dpoint[i][0]<dpoint[i][1])
{
temp_group = group[i];
group[i] = 0;
group_member_count[0]++;
if(temp_group != group[i])
{
group_changing++;
}
}
else if(dpoint[i][0]>dpoint[i][1])

13

{
temp_group = group[i];
group[i]=1;
group_member_count[1]++;
if(temp_group != group[i])
{
group_changing++;
}
}
else
{
temp_group = group[i];
group[i]=0;
group_member_count[0]++;
if(temp_group != group[i])
{
group_changing++;
}
}
// printf("Point %d masuk ke cluster %d\n",i+1,group[i]);
}
//hitung posisi centroid baru untuk tiap group
float sumX[2]={0,0},sumY[2]={0,0};
for (int i = 0; i < rows; i++) {
if(group[i] == 0){
sumX[0] += point[i][0];
sumY[0] += point[i][1];
}
else{
sumX[1] += point[i][0];
sumY[1] += point[i][1];
}
}
double newCentroid[crows][ccolumns];
newCentroid[0][0] = sumX[0]/group_member_count[0];
newCentroid[0][1] = sumY[0]/group_member_count[0];
newCentroid[1][0] = sumX[1]/group_member_count[1];
newCentroid[1][1] = sumY[1]/group_member_count[1];
printf("Centroid baru group 0 = (%f,%f) ; dengan sumX = %f, sumY = %f, group
member =
%d\n",newCentroid[0][0],newCentroid[0][1],sumX[0],sumY[0],group_member_count[0]);
printf("Centroid baru group 1 = (%f,%f) ; dengan sumX = %f, sumY = %f, group
member =
%d\n",newCentroid[1][0],newCentroid[1][1],sumX[1],sumY[1],group_member_count[1]);
centroid[0][0]
centroid[0][1]
centroid[1][0]
centroid[1][1]

=
=
=
=

newCentroid[0][0];
newCentroid[0][1];
newCentroid[1][0];
newCentroid[1][1];

}
}

Gambar7.KodeProgramParalelKMeansClustering

14

Berdasarkan kode program tersebut terlihat bahwa proses paralel menggunakan library OpenMP
diterapkanpadapenghitunganEuclideanDistance(jarak)antarasetiapobjekdatadengancentroid.

#pragma omp parallel


{
//ukur jarak antar titik ke centroid
#pragma omp parallel for
for (int i = 0; i < rows; i++) {
for (int j = 0; j < 2; j++)
{
dpoint[i][j] = 0.0;
dpoint[i][j] += sqrt(pow((point[i][0] centroid[j][0]),2)+pow((point[i][1] - centroid[j][1]),2));
printf("Jarak point %d ke centroid %d : %f\n",i+1,j+1,dpoint[i][j] );
}
}
}

Gambar8.PenerapanParalelPadaKodeProgram

Pada kasus ini jumlah cluster ditetapkan sebanyak 2 (dua) group (K=2), sehingga jumlah

centroid yang ditentukan juga sebanyak 2 (dua) buah. Jumlah objek data yang digunakan diambil
secarabertahapmulaidari10,100,1.000,10.000dan100.000RumahTangga.

4. ANALISISPROGRAMPARALELKMEANSCLUSTERING

ProsesanalisisimplementasiprogramKMeansClusteringdilakukandenganmembandingkan

hasilwaktueksekusiuntukserialdanparaleldengancaramelakukanujicobasebanyak5(lima)kali
terhadap masingmasing training set. Waktu eksekusi proses yang akan dibandingkan disini adalah
rataratawaktueksekusikelimaujicobatersebut.

4.1. WaktuEksekusiProgramSerial
Tabel3.WaktuEksekusiProgramSerial
Jumlah
Objek Data
(N)

Waktu Eksekusi (seconds)


Uji Coba

Rata-rata

10

0.016

0.062

0.016

0.047

0.047

0.0376

100

0.25

0.031

0.016

0.125

0.094

0.1032

1,000

0.296

0.031

0.094

0.047

0.031

0.0998

10,000

0.484

0.499

0.156

0.296

0.156

0.3182

100,000

1.763

1.404

1.451

1.591

1.482

1.5382

15

RatarataWaktuEksekusiPadaSerial
1.8
1.6

seconds

1.4
1.2
1
0.8
0.6
0.4
0.2
0
1

LogN

Gambar9.GrafikRataRataWaktuEksekusiProgramSerial

4.2. WaktuEksekusiProgramParalel

Tabel4.WaktuEksekusiProgramParalel
Jumlah
Objek
Data (N)

Waktu Eksekusi (seconds)


Uji Coba

Rata-rata

10

0.359

0.078

0.031

0.016

0.031

0.103

100

0.156

0.016

0.031

0.031

0.016

0.05

1,000

0.328

0.047

0.031

0.031

0.047

0.0968

10,000

0.39

0.156

0.156

0.14

0.14

0.1964

100,000

1.357

1.139

1.232

1.264

1.186

1.2356

BerdasarkanTabel4terlihatbahwarataratawaktueksekusiKMeansClusteringpadaparalel

memiliki waktu yang lebih cepat dibandingkan serial untuk jumlah objek data diatas 100 Rumah
Tangga, sedangkan untuk jumlah objek data 10 Rumah Tangga, waktu eksekusi serial jauh lebih
cepat dibandingkan paralel. Hal ini wajar mengingat kecepatan waktu eksekusi dengan
menggunakan paralel baru akan terlihat untuk jumlah objek data yang banyak (Dalam kasus ini
diatas100RumahTangga).

16

RatarataWaktuEksekusiPadaParalel
1.4
1.2

seconds

1
0.8
0.6
0.4
0.2
0
1

LogN

Gambar9.GrafikRataRataWaktuEksekusiProgramParalel

Gambar 10 memperlihatkan overlay ratarata waktu eksekusi program KMeans Clustering

untukserialdanpararel.

RatarataWaktuEksekusi
1.8
1.6

seconds

1.4
1.2
1
0.8
0.6
0.4
0.2
0
1

LogN
Serial

Paralel

Gambar10.GrafikRataRataWaktuEksekusiProgramSerialdanParalel

17

Tabel5.Selisihrataratawaktueksekusiantaraprogramparaleldenganserial
Jumlah Objek
Data (N)

Rata-rata waktu Eksekusi (seconds)


Serial

Paralel

Selisih

10

0.0376

0.103

0.0654

100

0.1032

0.05

-0.0532

1,000

0.0998

0.0968

-0.003

10,000

0.3182

0.1964

-0.1218

100,000

1.5382

1.2356

-0.3026

BerdasarkanTabel5tersebut,terlihatbahwaselisihrataratawaktueksekusiantaraprogram

paraleldenganserialpalingsignifikanterlihatuntukjumlahObjekData100.000RumahTanggayang
mencapai0.3026detikataulebihcepat19,67%.Selisihwaktuakanlebihterasa(signifikan)jikaobjek
RumahTanggayangakankitakelompokkanmemilikijumlahdatayangsangatbesar
4.3. SebaranObjekDataBerdasarkanCluster

Berikut ini grafik yang menampilkan sebaran objek data berdasarkan cluster (group) untuk

masingmasingtrainingset.
1.TrainingSet[X,Y]=10RumahTangga

SebaranObjekDataBerdasarkanCluster
1000
900

Pendapatan(Y)

800
700
600
500
400
300
200
100
0
0

100

200

300

400

500

600

700

Pengeluaran(X)
Group1

Group2

CentroidGroup1

CentroidGroup2

Gambar11.GrafikSebaranObjekDataBerdasarkanClusteruntukN:10RT

18

2.TrainingSet[X,Y]=100RumahTangga

SebaranObjekDataBerdasarkanCluster
1400

Pendapatan(X)

1200
1000
800
600
400
200
0
0

100

200

300

400

500

600

700

Pengeluaran(X)
Group1

Group2

CentroidGroup1

Centroid2

Gambar12.GrafikSebaranObjekDataBerdasarkanClusteruntukN:100RT

3.TrainingSet[X,Y]=1000RumahTangga

SebaranObjekDataBerdasarkanCluster
1800

Pendapatan(X)

1600
1400
1200
1000
800
600
400
200
0
0

200

400

600

800

1000

1200

1400

Pengeluaran(X)
Group1

Group2

CentroidGroup1

CentroidGroup2

Gambar13.GrafikSebaranObjekDataBerdasarkanClusteruntukN:1.000RT

19

4.TrainingSet[X,Y]=10.000RumahTangga

Gambar14.GrafikSebaranObjekDataBerdasarkanClusteruntukN:10.000RT

5.TrainingSet[X,Y]=100.000RumahTangga

Gambar15.GrafikSebaranObjekDataBerdasarkanClusteruntukN:100.000RT

20

Berdasarkan grafik persebaran objek data untuk masingmasing training set terlihat bahwa,

datapengeluarandanpendapatanSusenastersebuttermasukkedalamkategoridatayanghomogen,
artinyadatadatapengeluarandanpendapatanbanyakyangsamanilainyauntukRumahTanggayang
menjadi observasi (objek) data. Kondisi masyarakat dan kondisi ekonomi yang homogen dengan
klasifikasipekerjaanyangsejenismenyebabkanpersebarandatanyasepertiitu.

5. KESIMPULAN

Kesimpulan yang dapat diambil dari uji coba program paralel KMeans Clustering adalah

sebagaiberikut:
1. Penerapan program paralel pada KMeans Clustering terbukti mempercepat waktu eksekusi
proses dengan jumlah objek data (pengeluaran dan pendapatan rumah tangga) diatas 100
RumahTanggadanakanterlihatsignifikanuntukjumlahobjekmencapai100.000RumahTangga.
Percepatanwaktueksekusitersebutakanlebihsignifikanterlihatjikajumlahobjekdatayangkita
libatkansemakinbanyak.
2. Program paralel KMeans Clustering didesain untuk menggunakan objek data (training set)
denganjumlahyangbesar,sehinggapemanfaatanparallelcomputationakanlebihsignifikan.Jika
analisishomogenitasdandataaugmentationmenggunakanobjekdata(trainingset)yangkecil,
maka hasil waktu eksekusinya tidak akan terlalu berpengaruh. Hal ini berarti pada algoritma
programparalelKMeansClusteringterdapathubunganpositifantaraukurantrainingsetdengan
waktueksekusi(speedup)yangditentukanoleharsitekturcluster.
3. Algoritma KMeans Clustering walaupun cepat tetapi keakuratannya tidak dijamin. Seringkali
algoritma ini mengalami konvergensi prematur. Pada algoritma di atas juga tidak dijamin jarak
antara masingmasing centroid tidak merentang sehingga jika ada dua atau lebih kelompok
dengantitikpusatmassayangberdekatanmakahasilnyaterlihatkurangmemuaskan.

21

DAFTARPUSTAKA

[1]

[2]

[3]

Beddo,Vanessa,ApplicationofParallelProgramminginStatistics,California:Universityof
LosAngeles,2002.

Liao, Weikeng, Paralel KMeans Data Clustering, [Online]. Available :


(http://users.eecs.northwestern.edu/~wkliao/Kmeans//). Diakses pada tanggal 22 Mei
2013.

Teknomo, Kardi, KMeans Clustering Tutorial, [Online]. Available :


(http://people.revoledu.com/kardi/tutorial/kMean/).Diaksespadatanggal21Mei2013.

22

LAMPIRAN

N=10
UjiCobake5
C1:(35.375,87.50)
C2:(650.0,875.0)
C1:8
C2:2
T:0.031s

N=100
UjiCobake5
C1:(86.725,232.57)
C2:(310.10,716.51)
C1:51
C2:49
T:0.016s

N=1.000
UjiCobake5
C1:(84.65,264.75)
C2:(340.498,940.79)
C1:745
C2:255
T:0.047s

23

N=10.000
UjiCobake5
C1:(58.85,273.93)
C2:(430.87,1045.02)
C1:7.572
C2:2.428
T:0.140s

N=100.000
UjiCobake5
C1:(58.85,273.945)
C2:(430.87,1045.03)
C1:75720
C2:24280
T:1.186s

24

Você também pode gostar