Anda di halaman 1dari 31

DATA MINING

APLIKASI FUZZY CLUSTERI NG C-MEANS



OLEH :
A.A Primaningrat Gita Puspita 1104505066
I Made Oka Mahendra Putra 1104505068
Swastika Widya Mahasena 1104505069
I Made Dony Trisnanjaya 1104505070




JURUSAN TEKNOLOGI INFORMASI
FAKULTAS TEKNIK
UNIVERSITAS UDAYANA
2014

BAB I
PENDAHULUAN
1.1 Latar Belakang
Clustering adalah suatu alat untuk analisa data, yang memecahkan
permasalahan penggolongan. Obyek nya adalah untuk kasus pendistribusian
(orang-orang, objek, peristiwa dll.) ke dalam kelompok, sedemikian sehingga
derajat tingkat keterhubungan antar anggota cluster yang sama adalah kuat dan
lemah antar anggota dari cluster yang berbeda. Dengan cara ini masing-masing
cluster menguraikan,dalam kaitan dengan kumpulan/koleksi data, class dimana
milik anggota-anggotanya.
Hasil dari analisis cluster mungkin berperan untuk definisi dari suatu
rencana penggolongan yang formal, seperti suatu taksonomi untuk binatang yang
terkait, serangga atau tumbuhan atau menyarankan model statistik yang
menguraikan populasi atau menandai aturan untuk menugaskan kasus yang baru
ke class untuk identifikasi dan tujuan yang diagnostik atau menyediakan ukuran
dari definisi, ukuran dan perubahan dalam konsep sebelumnya yang tidak hanya
luas.
1.2 Tujuan
Adapun beberapa tujuan dari pembuatan program dengan menggunakan
algoritma fuzzy clustering C-Means
1. Dapat membuat sebuah program dengan menggunakan Algoritma fuzzy
Clustring Metode C-Means.
2. Dapat memahami Algoritma fuzzy Clustering C-Means
1.3 Manfaat
Adapun manfaat dari pembuatan program dengan menggunakan metode
C-Means ialah mampu mengimplementasikan metode C-Means ke dalam sebuah
aplikasi dengan bahasa C++.


BAB II
TINJAUAN PUSTAKA

2.1 Fuzzy Clustering
Pendekatan clustering tradisional menghasilkan partisi di mana dalam
sebuah partisi, setiap anggota dimiliki oleh satu dan hanya satu cluster. Demikian,
cluster yang berada dalam golongan hard clustering tidak berhubungan. Fuzzy
clustering memperbaiki hal ini dan menyarankan sebuah skema soft clustering.
Pada kasus ini, setiap pola berasosiasi dengan seluruh kluster yang menggunakan
beberapa urutan dari fungsi keanggotaan, dinamakan setiap kluster adalah
kumpulan fuzzy dari seluruh pola. Nilai keanggotaan yang besar menandakan
kemungkinan tertinggi pada suatu pola dari kluster.

2.2 Fuzzy C-Means
Algoritma clustering fuzzy yang paling terkenal adalah algoritma fuzzy c-
means (FCM). Diperkenalkan oleh Jim Bezdek (1973). Bahkan, ia lebih baik jika
dibandingkan dengan algoritma Hard K-means saat menghindari local minima,
FCM mampu tetap menemukan local minimal pada standar error kuadrat. Desain
dari fungsi keanggotaan ini merupakan masalah yang sangat penting dalam teknik
fuzzy clustering; pilihan yang berbeda meliputi dasar dari dekomposisi yang sama
dan pusat (centroid) dari cluster. Generalisasi dari algoritma FCM telah diusulkan
melalui bagian dari fungsi objektif. Algoritma fuzzy c-shell dan varian adaptif
untuk mendeteksi batas sirkular dan elips juga telah disediakan.
FCM merupakan algoritma yang bersifat iteratif. Tujuan dari FCM adalah
untuk menemukan pusat cluster (centroid) yang menimalkan fungsi
pertidaksamaan.
Berikut langkah-langkah dari FCM:
1. Susunlah matrix X berukuran n x m sebagai tempat dari data yang akan di-
cluster. Di mana n merupakan banyaknya data dan m merupakan banyaknya
atribut dari data tersebut. Xij = data pada sampel ke-i dan atribut ke-j
2. Inisiasikan nilai pada komponen-komponen berikut ini:
(1) Banyaknya cluster yang diinginkan c
(2) Pangkat (pembobot) w
(3) Maksimum Iterasi maxIter
(4) Error terkecil e
(5) Fungsi Objektif awal P0 = 0
(6) Iterasi awal iter = 1;
3. Bangkitkan bilangan acak Uik, dimana banyaknya i sejumlah data dan k
sejumlah cluster
4. Hitunglah pusat cluster dengan rumus


((


(1)
5. Hitung fungsi objektif pada iterasi ke-iter, rumusnya


(* (

+ (


(2)
6. Perbaharui matrix partisi U dengan menggunakan rumus:


* (

* (


(3)
7. Cek kondisi berhenti, jika Piter Piter-1 < e atau iter > maxIter maka proses
perhitungan berhenti. Namun jika keduanya tidak memenuhi, maka iter =
iter+1 dan kembali ke langkah-4

Dengan memperbaharui pusat cluster secara iteratif dan derajat
keanggotaan dari tiap titik data, pengulangan FCM menggerakakkan pusat cluster
ke lokasi yang benar dalam kumpulan data. Meskipun demikian, FCM tidak
menjamin itu menemukan solusi yang optimal. Inisiasi acak dari U bisa jadi
membatalkan efek dari hasil akhir.


2.3 Contoh Kasus
Diberikan data dengan banyak data sejumlah 10 buah dengan 2 atribut.
Tentukan cluster dengan algoritma FCM jika banyaknya cluster yang diinginkan
sejumlah 3 cluster.


Langkah 3




C1 C2 C3


0,361 0,12 0,519 1

0,397 0,241 0,362 1

0,323 0,396 0,281 1

0,17 0,413 0,569 1,152
m
ik
= 0,395 0,385 0,22 1

0,134 0,409 0,457 1

0,55 0,24 0,209 0,999

0,303 0,321 0,375 0,999

0,288 0,449 0,267 1,004

0,45 0,301 0,248 0,999





Q
1
Q
2
Q
3


0,361 0,12 0,519 1

0,397 0,241 0,362 1

0,323 0,396 0,281 1

0,147569444 0,358506944 0,493923611 1

0,395 0,385 0,22 1

0,134 0,409 0,457 1

0,550550551 0,24024024 0,209209209 1

14 19

11 12

18 20

5 14
X= 8 12

9 19

5 2

13 8

3 3

10 8
Langkah 1

jumlah sampel data n = 10
jumlah atribut m = 2

Langkah 2

a. Jumlah kluster c = 3
b. Pangkat w = m = 2
c. Maksimum iterasi MaxIter = 100
d. Error terkecil yang diharapkan x = 1.10
-6

e. Fungsi objektif awal P
0
= 0
f. Iterasi awal t = 1

0,303303303 0,321321321 0,375375375 1

0,28685259 0,447211155 0,265936255 1

0,45045045 0,301301301 0,248248248 1







0,361 0,12 0,519

0,397 0,241 0,362

0,323 0,396 0,281


0,147569444 0,358506944 0,493923611
ik
= 0,395 0,385 0,22

0,134 0,409 0,457

0,550550551 0,24024024 0,209209209

0,303303303 0,321321321 0,375375375

0,28685259 0,447211155 0,265936255

0,45045045 0,301301301 0,248248248



Cluster 1

i1
2

i1
2
* X
i1


i1
2
* X
i2


0,130321 1,824494 2,476099

0,157609 1,733699 1,891308

0,104329 1,877922 2,08658

0,021776741 0,108883705 0,304874373

0,156025 1,2482 1,8723

0,017956 0,161604 0,341164

0,303105909 1,515529544 0,606211817

0,091992894 1,195907619 0,73594315

0,082284408 0,246853225 0,246853225

0,202905608 2,029056083 1,623244866



i1
2



i1
2
* X
i1



i1
2
* X
i2




1,26830556 11,94214918 12,18457843

i1
2
* X
ij

9,415829712 9,606973916

/

i1
2




Cluster 2

i2
2

i2
2
* X
i1

i2
2
* X
i2


0,0144 0,2016 0,2736

0,058081 0,638891 0,696972

0,156816 2,822688 3,13632

0,128527229 0,642636146 1,799381209

0,148225 1,1858 1,7787

0,167281 1,505529 3,178339

0,057715373 0,288576865 0,115430746

0,103247392 1,34221609 0,825979132

0,199997817 0,599993452 0,599993452

0,090782474 0,907824742 0,726259793


i2
2



i2
2
* X
i1



i2
2
* X
i2




1,125073285 10,1357553 13,13097533

i2
2
* X
ij

9,008973394 11,67121778

/

i2
2




Cluster 3

i3
2


i3
2
* X
i1


i2
2
* X
i2

0,269361 3,771054 5,117859

0,131044 1,441484 1,572528

0,078961 1,421298 1,57922

0,243960534 1,219802668 3,415447471

0,0484 0,3872 0,5808

0,208849 1,879641 3,968131

0,043768493 0,218842466 0,087536986

0,140906672 1,831786742 1,12725338

0,070722092 0,212166275 0,212166275

0,061627193 0,616271928 0,493017542


i3
2



i3
2
* X
i1



i3
2
* X
i2





1,297599984
12,99954708 18,15395965

i3
2
* X
ij

10,01814676 13,99041298

/

i3
2





9,415829712 9,606973916

V = 9,008973394 11,67121778


10,01814676 13,99041298



Langkah 5

Fungsi objektif pada iterasi ke-t (Pt)

Cluster 1 Cluster 2 Cluster 3 SubTotal
14,23672949 1,132148094 11,03063391 26,3995115
1,298094413 0,236522367 0,645493862 2,180110643
18,95688923 23,55488799 7,882291082 50,39406831
0,844899008 2,762704913 6,143387044 9,750990964
1,206252306 0,166919887 0,388877553 1,762049746
1,587343679 8,984851428 5,457764236 16,02995934
23,44997177 6,325854274 7,394765728 37,17059177
1,419325408 3,036106564 6,309307108 10,76473908
6,978950041 22,2593129 12,02583635 41,26409929
0,593218913 1,312712191 2,211515043 4,117446147

199,8335668

Langkah 6


Cluster 1 Cluster 2 Cluster 3
((X
ij
- V
1j
)
2
)
-1/w-1
(X
ij
- V
2j
)
2
)
-1/w-1
(X
ij
- V
3j
)
2
)
-1/w-1
Total
17,84412529 0,006039318 0,113415526 17,96358013
0,010623947 0,008631669 0,009326984 0,0285826
1,092135856 0,032407788 0,009768674 1,134312318
0,057921104 0,199780668 0,764915509 1,022617282
0,021666121 0,016298021 0,017262456 0,055226598
0,018199199 4357,692848 0,079697569 4357,790745
0,002937708 0,568863952 0,174370869 0,746172529
0,007456453 0,010072606 0,022338695 0,039867755
0,06316304 0,002695991 0,012275101 0,078134133
0,011301027 0,013250479 0,016485193 0,041036699
19,12952974 4358,550889 1,219856577 4378,900275

Cluster 1 Cluster 2 Cluster 3

((X
ij
- V
1j
)
2
)
-1/w-1
/
Total
(X
ij
- V
2j
)
2
)
-1/w-
1
/Total
(X
ij
- V
3j
)
2
)
-1/w-
1
/Total

0,993350165 0,000336198 0,006313637

0,371692826 0,301990333 0,32631684

0,962817593 0,028570428 0,00861198

0,05664006 0,195362109 0,747997831

0,392313164 0,295111798 0,312575037

4,17624E-06 0,999977535 1,82885E-05

0,003937036 0,762375899 0,233687066

0,18702967 0,25265045 0,560319881

0,808392417 0,03450465 0,157102933

0,275388313 0,322893394 0,401718293

Matriks partisi yang
baru


0,993350165 0,000336198 0,006313637

0,371692826 0,301990333 0,32631684

0,962817593 0,028570428 0,00861198

0,05664006 0,195362109 0,747997831
m
ik
= 0,392313164 0,295111798 0,312575037

4,17624E-06 0,999977535 1,82885E-05

0,003937036 0,762375899 0,233687066

0,18702967 0,25265045 0,560319881

0,808392417 0,03450465 0,157102933

0,275388313 0,322893394 0,401718293

Langkah 7

(|P
t
P
t-1
| = (|P
1
P
0
|) = . dimana x = 1.10
-6


C1 C2 C3
KECENDERUNGA
N CLUSTER
14,23672949 1,132148094 11,03063391
1,298094413 0,236522367 0,645493862
18,95688923 23,55488799 7,882291082
0,844899008 2,762704913 6,143387044
1,206252306 0,166919887 0,388877553
1,587343679 8,984851428 5,457764236
23,44997177 6,325854274 7,394765728
1,419325408 3,036106564 6,309307108
6,978950041 22,2593129 12,02583635
0,593218913 1,312712191 2,211515043



BAB III
PEMBAHASAN

3.1 Listing Program
Berikut listing program Fuzzy C-Means keseluruhan yang telah dibuat
dengan mengunakan bahasa C++.
#include <iostream>
#include <conio.h>
#include <cmath>
#include <cstdlib>
#include <iomanip>

using namespace std;

int main()
{
awal:
cout<<"|--------------------------------------|\n";
cout<<"|------------FUZZY C-MEANS-------------|\n";
cout<<"|-----------------OLEH-----------------|\n";
cout<<"|--------------KELOMPOK 2--------------|\n";
cout<<"|--------------------------------------|\n\n";
int n,m,c,w,maxIter,iterasi,i,j,k;
double e,X[100][100],U[100][100],
V[100][100],Pt[100],Q[100],TW[100],tot;
double
UW[100][100],P[50][50][50],G[100][100],LT[100],FO,tmp,glt,glt2;
cout<<"Input banyaknya data (n) : ";
cin>>n;
cout<<"Input banyaknya atribut (m) : ";
cin>>m;
cout<<"Input banyaknya cluster (c) : ";
cin>>c;
cout<<"Input nilai pangkat/pembobot (w) : ";
cin>>w;
cout<<"Input maksimum iterasi (maxIter) : ";
cin>>maxIter;
cout<<"Input error terkecil : ";
cin>>e;
cout<<endl;

//input nilai matriks sebanyak data X dan atribut
for(i=0; i<n; i++){
for(j=0; j<m; j++){
cout<<"X["<<i+1<<"]["<<j+1<<"] = ";
cin>>X[i][j];
}
}
cout<<endl;

//input nilai matriks partisi U
for(i=0; i<n; i++){
for(k=0; k<c; k++){
cout<<"U["<<i+1<<"]["<<k+1<<"] = ";
cin>>U[i][k];
}
}
cout<<endl<<endl;

//menampilkan data X
cout<<"--------Nilai X : --------"<<endl;
for(i=0; i<n; i++){
for(j=0; j<m; j++){
cout<<X[i][j]<<" ";
}
cout<<endl;
}
//normalisasi terhadap total Q
for(i=0; i<n; i++){
tot=0;
for(k=0; k<c; k++){
tot = tot + U[i][k];
}
Q[i]=tot;
}

//Menampilkan data U
cout<<"--------Nilai U : --------"<<endl;
for(i=0; i<n; i++){
for(k=0; k<c; k++){
cout<<U[i][k]<<" ";
}
cout<<endl;
}
cout<<"--------Hasil normalisasi terhadap matriks U : ------
--"<<endl;
for(i=0; i<n; i++){
for(k=0; k<c; k++){
U[i][k] = U[i][k]/Q[i];
cout<<setprecision(2)<<U[i][k]<<" ";
}
cout<<endl;
}
cout<<"-----------------------------------------------------
---"<<endl;
iterasi=1;
Pt[0]=0;
cout<<endl;

while((iterasi<=maxIter) || (glt2>e)){
cout<<"|***************| Iterasi ke- "<<iterasi<<"
|***************|"<<endl;

//Menghitung U berpangkat W setiap cluster
cout<<"------------Nilai U setelah dipangkatkan dengan
w------------"<<endl;
for(i=0; i<n; i++){
for(j=0; j<c; j++){
UW[i][j] = pow(U[i][j],w);
cout<<setprecision(4)<<UW[i][j]<<" "<<endl;
}
cout<<endl;
}

//Hitung jumlah kuadrat
cout<<endl;
cout<<"------------Jumlah kuadrat : ------------"<<endl;
for(i=0; i<c; i++){
tot = 0;
for(j=0; j<n; j++){
tot = tot + UW[j][i];
TW[i] = tot;
}
cout<<setprecision(4)<<TW[i]<<endl;
}

//Hitung V (Pusat Cluster)
cout<<"------------Pusat cluster : ------------"<<endl;
for(i=0; i<c; i++){
for(j=0; j<m; j++){
tot = 0;
for(k=0; k<n; k++){
tot = tot + (UW[k][i] * X[k][j]);
}
V[i][j] = tot/TW[i];
cout<<setprecision(4)<<V[i][j]<<" "<<endl;
}
cout<<endl;
}
cout<<endl<<endl;

cout<<"------------Mencari hasil kali Xkj dengan Vij
berpangkat 2------------"<<endl;
for(i=0; i<c; i++){
for(j=0; j<m; j++){
for(k=0; k<n; k++){
P[k][j][i] = pow((X[k][j] - V[i][j]),2);
cout<<setprecision(4)<<P[k][j][i]<<"
"<<endl;
}
cout<<endl;
}
cout<<endl<<endl;
}
cout<<endl<<endl;
//hitung fungsi Objektif
FO=0;
for(i=0; i<c; i++){
for(j=0; j<n; j++){
tmp=0;
for(k=0; k<m; k++){
tmp = tmp + P[j][k][i];
}
G[j][i] = tmp * UW[j][i];
FO = FO + G[j][i];
}
}
Pt[iterasi] = FO;
glt = Pt[iterasi] - Pt[iterasi-1];
glt2 = abs(glt);
iterasi = iterasi+1;
cout<<"Fungsi Objektif = "<<Pt[iterasi]<<"\n\n";

//Hitung LT
for(i=0; i<n; i++){
tot=0;
for(j=0; j<m; j++){
for(k=0; k<c; k++){
tot = tot + P[i][j][k];
}
}
LT[i] = tot;
}
cout<<"------------Mencari matriks U yang telah
diperbarui : ------------"<<endl;
for(i=0; i<n; i++){
tot=0;
for(j=0; j<c; j++){
tot = 0;
for(k=0; k<m; k++){
tot = tot + P[i][k][j];
}
U[i][j] = tot/LT[i];
cout<<U[i][j]<<" ";
}
cout<<endl;
}
cout<<endl;
}
char answer;
getch();
cout<<"-----------------------------------------------------
--"<<endl;
cout<<"Coba lagi? Y/T"<<endl;
cout<<"Jawaban anda : ";cin>>answer;
if(answer == 'Y' || answer == 'y'){
system("CLS");
goto awal;
}else{
exit;
}
return 0;
}
Kode Program 3.1 Fuzzy Clustering Means

Untuk penjelasan lengkapnya mengenai kode program 3.1 akan dijelaskan
sebagai berikut.
1. Inisialisasi awal
int n,m,c,w,maxIter,iterasi,i,j,k;
double e,X[100][100],U[100][100],
V[100][100],Pt[100],Q[100],TW[100],tot;
double
UW[100][100],P[50][50][50],G[100][100],LT[100],FO,tmp,glt,glt2;
cout<<"Input banyaknya data (n) : ";
cin>>n;
cout<<"Input banyaknya atribut (m) : ";
cin>>m;
cout<<"Input banyaknya cluster (c) : ";
cin>>c;
cout<<"Input nilai pangkat/pembobot (w) : ";
cin>>w;
cout<<"Input maksimum iterasi (maxIter) : ";
cin>>maxIter;
cout<<"Input error terkecil : ";
cin>>e;
cout<<endl;

Kode Program 3.2 Inisialisasi Awal

Terdapat inisialisasi variabel awal dengan tipe datanya masing-masing.
Variabel n, m, c, w, maxIter, iterasi, i, j, k dengan tipe data integer, berturut-turut
gunanya adalah untuk menampung banyaknya data, banyaknya atribut pada data,
banyaknya cluster, nilai pangkat pembobot, nilai maksimum iterasi yang
diperbolehkan, menampung nilai iterasi yang sedang berjalan, dan untuk i,j,k
digunakan pada saat perulangan. Variabel e, X[100][100], U[100][100],
V[100][100], Pt[100], Q[100], TW[100], tot dengan tipe data double, berturut-
turut gunanya adalah untuk menampung nilai error terkecil yang diperbolehkan,
menampung input-an data matriks X, menampung input-an data matriks partisi U,
menampung pusat cluster, menampung nilai fungsi objektif setiap iterasi yang
berlangsung, menampung jumlah masing-masing data perbaris pada matriks U
yang nantinya digunakan untuk normalisasi terhadap matriks partisi U
sebelumnya, menampung total jumlah kuadrat yang telah di cari setiap clusternya
untuk mendapatkan pusat cluster nantinya, sebagai variabel temporari untuk
menampung total dari operasi aritmatika. Variabel UW[100][100], P[50][50][50],
G[100][100], LT[100], FO, tmp, glt, glt2 dengan tipe data double, berturut-turut
gunanya adalah untuk menampung nilai hasil U yang dipangkatkan dengan w,
menampung nilai kali antara X dengan V dalam mencari fungsi objektif, sebagai
penampung nilai hasil jumlah variabel P[100][100][100] dengan variabel temp
dalam mencari setiap jumlah perbaris percluster, ,menampung hasil fungsi
objektif dalam proses, mencari selisih fungsi objektif antara iterasi sebelumnya
dengan iterasi yang sedang berjalan, mencari nilai absolute dari variabel glt.
User akan diminta untuk meng-input-kan sejumlah data seperti yang
disebutkan diatas, sehingga program dapat berjalan dan melakukan proses
selanjutnya.

2. Meng-input-kan nilai X untuk data matriks X dan nilai U untuk data
matriks partisi U
//input nilai matriks sebanyak data X dan atribut
for(i=0; i<n; i++){
for(j=0; j<m; j++){
cout<<"X["<<i+1<<"]["<<j+1<<"] = ";
cin>>X[i][j];
}
}
cout<<endl;

//input nilai matriks partisi U
for(i=0; i<n; i++){
for(k=0; k<c; k++){
cout<<"U["<<i+1<<"]["<<k+1<<"] = ";
cin>>U[i][k];
}
}
cout<<endl<<endl;
Kode Program 3.3 Meng-input-kan nilai X untuk data matriks X dan nilai U untuk data matriks
partisi U
Terdapat perulangan bagi user untuk meng-input-kan data matriks X dan
U. Untuk data matriks X data yang di-input-kan berdasar banyaknya data dan
atribut yang sudah di-input-kan sebelumnya, dan data matriks partisi U di-input-
kan berdasar banyaknya data dan banyaknya pengelompokan data (cluster) yang
diinginkan yang sudah di-input-kan sebelumnya.
1. Normalisasi terhadap nilai U
//normalisasi terhadap total Q
for(i=0; i<n; i++){
tot=0;
for(k=0; k<c; k++){
tot = tot + U[i][k];
}
Q[i]=tot;
}

...
...
...

cout<<"--------Hasil normalisasi terhadap matriks U : ------
--"<<endl;
for(i=0; i<n; i++){
for(k=0; k<c; k++){
U[i][k] = U[i][k]/Q[i];
cout<<setprecision(2)<<U[i][k]<<" ";
}
cout<<endl;
}

Kode Program 3.3 Normalisasi terhadap nilai U
Pada perulangan pertama, perulangan tersebut digunakan untuk mencari
hasil jumlah perbaris dalam matriks U untuk dilakukan normalisasi agar hasil
jumlah yang lebih dari 1 atau kurang dari 1 dapat dijadikan jumlahnya menjadi 1.
Perulangan selanjutnya digunakan untuk melakukan operasi aritmatika yaitu
pembagian, matriks partisi U akan di bagi dengan total jumlah perbaris yang
diperoleh.

2. Mencari pusat cluster
iterasi=1;
Pt[0]=0;
cout<<endl;

while((iterasi<=maxIter) || (glt2>e)){
cout<<"|***************| Iterasi ke- "<<iterasi<<"
|***************|"<<endl;

//Menghitung U berpangkat W setiap cluster
cout<<"------------Nilai U setelah dipangkatkan dengan
w------------"<<endl;
for(i=0; i<n; i++){
for(j=0; j<c; j++){
UW[i][j] = pow(U[i][j],w);
cout<<setprecision(4)<<UW[i][j]<<" "<<endl;
}
cout<<endl;
}

//Hitung jumlah kuadrat
cout<<endl;
cout<<"------------Jumlah kuadrat : ------------"<<endl;
for(i=0; i<c; i++){
tot = 0;
for(j=0; j<n; j++){
tot = tot + UW[j][i];
TW[i] = tot;
}
cout<<setprecision(4)<<TW[i]<<endl;
}

//Hitung V (Pusat Cluster)
cout<<"------------Pusat cluster : ------------"<<endl;
for(i=0; i<c; i++){
for(j=0; j<m; j++){
tot = 0;
for(k=0; k<n; k++){
tot = tot + (UW[k][i] * X[k][j]);
}
V[i][j] = tot/TW[i];
cout<<setprecision(4)<<V[i][j]<<" "<<endl;
}
cout<<endl;
}
cout<<endl<<endl;
Kode Program 3.4 Mencari pusat cluster
Akan diset nilai iterasi awal dengan nilai 1 dan nilai fungsi objektif untuk
iterasi 1 dengan 0. Digunakan perulangan dengan menggunakan while, jika
kondisi iterasi lebih dari maksimum iterasi atau error terkecil yang diharapkan
lebih dari hasil kurang antara fungsi objektif iterasi sebelumnya dengan iterasi
yang sedang berjalan maka proses akan berlanjut jika kedua kondisi tersebut tidak
terpenuhi maka proses akan berhenti. Tahap awal adalah melakukan perulangan
bertingkat pertama untuk mencari nilai U yang dipangkatkan dengan w.
Perulangan bertingkat kedua digunakan untuk mencari hasi jumlah kuadrat nilai U
yang dipangkatkan dengan w per cluster. Perulangan bertingkat ketiga digunakan
untuk mencari pusat cluster, dimana dicari dahulu hasil jumlah dari hasil kali nilai
U yang telah dipangkat dengan data matrik X, lalu dicari hasil bagi antara jumlah
yang baru saja diperoleh dengan hasil jumlah kuadrat
3. Menghitung fungsi objektif
cout<<"------------Mencari hasil kali Xkj dengan Vij berpangkat
2------------"<<endl;
for(i=0; i<c; i++){
for(j=0; j<m; j++){
for(k=0; k<n; k++){
P[k][j][i] = pow((X[k][j] - V[i][j]),2);
cout<<setprecision(4)<<P[k][j][i]<<"
"<<endl;
}
cout<<endl;
}
cout<<endl<<endl;
}
cout<<endl<<endl;
//hitung fungsi Objektif
FO=0;
for(i=0; i<c; i++){
for(j=0; j<n; j++){
tmp=0;
for(k=0; k<m; k++){
tmp = tmp + P[j][k][i];
}
G[j][i] = tmp * UW[j][i];
FO = FO + G[j][i];
}
}
Pt[iterasi] = FO;
glt = Pt[iterasi] - Pt[iterasi-1];
glt2 = abs(glt);
iterasi = iterasi+1;
cout<<"Fungsi Objektif = "<<Pt[iterasi]<<"\n\n";

Kode Program 3.5 Menghitung fungsi objektif
Melakukan perulangan berdasar 3 kondisi yaitu berdasar banyaknya
cluster, banyaknya atribut, dan banyaknya data yang di-inputkan sebelumnya
untuk memperoleh secara bertahap hasil pangkat 2 antara selisih data (Xkj)
dengan pusat cluster (Vij), yang disimpan ke dalam bentuk matriks 3 dimensi.
Perulangan bertingkat selanjutnya fungsinya untuk menghitung fungsi objektif,
perulangan tersebut berdasar banyaknya cluster, banyaknya data dan banyaknya
atribut, awalny diset nilai fungsi objektif awal (FO) dengan 0, dan pada
perulangan yang berdasar banyaknya data akan diset variabel pembantu (temp)
dengan nilai 0, agar setiap perulangan yang terjadi jika perulangan tersebut
bertambah 1 maka nilai temp akan diset 0 agar diperoleh hasil fungsi objektif. Di
dalam perulangan berdasar banyaknya atribut maka dicari terlebih dahulu total
jumlah dari hasil pangkat Xkj dengan Vkj, lalu hasil total jumlah tersebut yang
telah diperoleh akan di kali dengan hasil pangkat partisi U dengan w, dan
disimpan ke dalam matriks dimensi 2, lalu dicari nilai fungsi objektif paling baru
(FO) yaitu nilai fungsi objektif awal ditambah dengan matriks dimensi 2 yang
menyimpan hasil proses pencarian fungsi objektif selanjutnya.
4. Mencari matriks partisi yang baru
//Hitung LT
for(i=0; i<n; i++){
tot=0;
for(j=0; j<m; j++){
for(k=0; k<c; k++){
tot = tot + P[i][j][k];
}
}
LT[i] = tot;
}
cout<<"------------Mencari matriks U yang telah
diperbarui : ------------"<<endl;
for(i=0; i<n; i++){
tot=0;
for(j=0; j<c; j++){
tot = 0;
for(k=0; k<m; k++){
tot = tot + P[i][k][j];
}
U[i][j] = tot/LT[i];
cout<<U[i][j]<<" ";
}
cout<<endl;
}
cout<<endl;
}//end while

Kode Program 3.6 Mencari matriks partisi yang baru

Pada perulangan bertingkat pertama berfungsi untuk mencari total jumlah
dari hasil pangkat 2 selisih antara Xkj dengan Vkj, yang disimpan ke dalam
matriks 2 dimensi (Lt). Dalam mencari matriks partisi U yang telah diperbarui
dilakukan perulangan bertingkat berdasar banyaknya data, banyaknya cluster, dan
banyaknya atribut, dicari terlebih dahulu total jumlah dari hasil pangkat 2 selisih
antara Xkj dengan Vkj, proses ini sama dengan proses selanjutnya tapi bedanya
pada perulangan bertingkat pertama bertujuan untuk mencari total jumlah
sebanyak banyaknya data terhadap banyaknya atribut dan banyaknya cluster jadi
di cari terlebih dahulu hasil tambah semua cluster, sedangkan perulangan
bertingkat kedua dicari hasilnya berdasar banyaknya atribut. Setelah diperoleh
total maka dicari hasil bagi antara hasil total pada perulangan bertingkat ke 2 (tot)
dengan hasil total pada perulangan bertingkat ke 3 (Lt) dan disimpan ke dalam
matriks 2 dimensi.
Perulangan while akan berhenti jika kondisi maksimum iterasi lebih dari
input-an maksimum iterasi yang diinginkan atau error terkecil yang diperoleh
melalui proses setiap iterasi melebihi error terkecil yang diharapkan.
3.2 Uji Coba Program
Berikut akan ditampikan hasil uji coba program pada code block C++
program algortima Fuzzy clustering C-Means.

Gambar 3.1 Input Data (a)
Pada gambar 3.1 merupakan tampilan awal dari program fuzzy c-mens
kelompok 2. Dimana didalamnya terdapat input banyak data (n), Input banyak
atribut (m), input banyak cluster (c), input nilai pangkat (w), input maksimum
iterasi (maxIter) dan input error terkecil.

Gambar 3.2 Input Data (b)

Pada gambar 3.2 merupakan tampilan pada saat input data u lanjutan pada
Gambar 3.1.

Gambar 3.3 Hasil Pada Iterasi ke-100, Nilai U Setelah Dipangkatkan Dengan w
Pada gambar 3.3 merupakan tampilan hasil dari iterasi ke 100 yang
dimana dilai u telah dipangkatkan dengan W ( input nilai pangkat ) dengan jumlah
2.

Gambar 3.4 Hasil Pada Iterasi ke-100, Hasil Jumlah Kuadrat Pusat Cluster dan Hasil Pangkat
2 Selisih Xkj dengan Vkj (a)
Pada gambar 3.4 merupakan tampilan dari hasil iterasi ke 100 yang
dimana terdapat hasil jumlah kuadrat , nilai pusat cluster dan hasil pangkat 2 dari
Xkj dengan Vkj.

Gambar 3.5 Hasil Pada Iterasi ke-100, Hasil Jumlah Kuadrat Pusat Cluster dan Hasil Pangkat
2 Selisih Xkj dengan Vkj (b)
Pada gambar 3.5 merupakan tampilan dari hasil iterasi lanjutan dari
gambar 3.4 sebelumnya.

Gambar 3.6 Hasil Pada Iterasi ke-100, Hasil Fungsi Objektif Matriks U yang Telah Diperbarui
Pada gambar 3.6 merupakan tampilan dari iterasi ke 100 dimana pada
tampilan diatas hasil dari fungsi U telah mengalami perbarui seperti pada data
pertama yaitu 0.02993 , 0.02993 , 09401.

Gambar 3.7 Hasil Pada Iterasi ke-100, Nilai U Setelah Dipangkatkan Dengan w

Pada gambar 3.7 merupakan tampilan program hasil iterasi ke 100 dimana
nilai U telah dipangkatkan dengan W.

Gambar 3.8 Hasil Pada Iterasi ke-101, Hasil Jumlah Kuadrat Pusat Cluster dan Hasil Pangkat
2 Selisih Xkj dengan Vkj (a)
Pada gambar 3.8 merupakan tampilan dari hasil iterasi ke 101, yang
berisikan hasil jumlah kuadrat , pusat cluster dan hasil pangkat 2 dari selisih Xkj
dan Vkj.

Gambar 3.9 Hasil Pada Iterasi ke-101, Hasil Jumlah Kuadrat Pusat Cluster dan Hasil Pangkat
2 Selisih Xkj dengan Vkj (b)
Pada gambar 3.9 merupakan tampilan dari hasil iterasi ke 101, yang
berisikan hasil jumlah kuadrat , pusat cluster dan hasil pangkat 2 dari selisih Xkj
dan Vkj.

Gambar 3.10 Hasil Pada Iterasi ke-100, Hasil Fungsi Objektif Matriks U yang Telah Diperbarui
Pada gambar 3.10 merupakan tampilan hasil pada iterasi ke 100 dimana
hasil fungsi objektifnya adalah 2.132e-321 dan nilai matriks U yang telah
mengalami perbaruan















BAB IV
PENUTUP

4.1 Kesimpulan
Pada tulisan yang berjudul Aplikasi Fuzzy Clustering C-Means ini dapat
disimpulkan bahwa :
1. Tujuan dari FCM adalah untuk menemukan pusat cluster (centroid) yang
menimalkan fungsi pertidaksamaan.
2. Fuzzy C-Means (FCM) Merupakan suatu teknik pengclusteran data dimana
tiap-tiap data dalam suatu cluster ditentukan oleh derajat keanggotaannya.





















DAFTAR PUSTAKA
en.wikipedia.org/wiki/Fuzzy C-Means. Diakses tanggal 17 Juni 2014
CodePlex. JSON.Net Serialize All The Things. (2012). Diakses tanggal 17 Juni
2014, dari http://json.codeplex.com.
http://www.bandmservices.com/ClusteringExample. Diakses tanggal 17 Juni 2014

Anda mungkin juga menyukai