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