Implementasi Kelas Fuzzy C-Means

4. Counter isi dari record dari ArrayList untukmenegtahui banyak record. 5. Buat array bertipe String untuk menyimpan data hasil poin 3 dan 4. Buat tabel model baru dan isi dengan array dari poin 5 untuk menampilkan isi tabel distribusi.

4.2.4 Implementasi Kelas Fuzzy C-Means

Kelas Fuzzy C-Means merupakan kelas utama pada sistem ini. Kelas ini berisi sintak-sintak algoritma Fuzzy C-Means yang dibagi menjadi 7 methods, antara lain: method konstruktor FuzzyCMeans, method matriksAwal, method hitungPusatKlaster, method fObjektif, matriksUBaru, method getMaxValue dan method tampilHasil. Penjelasannya sebagai berikut. Method kontsruktor adalah method yang akan dijalankan bersamaan dengan dipanggilnya kelas FuzzyCMeans. Parameter yang melekat pada method konstruktor, kemudian digunakan oleh method lain sebagai variabel maupun objek dalam proses clustering. Sedangkan method-method utama untuk proses clustering, dapat dilihat pada sintaks berikut. public class FuzzyCMeans { …….. fungsi konstruktor dengan parameter k,w,dan input public FuzzyCMeansint k, int w, double[][] input { this.k = k; this.w = w; this.input = input; ambil nilai baris dan kolom dari var input baris = input.length; kolom = input[0].length; inisialisasi var objektif sebanyak baris data input objektif = new double[baris]; } fungsi untuk membuat matriks keanggotaan di awal secara acak public double[][] matriksAwal{ barisnya sebanyak data input dan kolomnya sebanyak jumlah klaster matriksU = new double[baris][k]; Random generator = new Random; membuat random nilai dengan nilai desimal 1 dibelakang koma for int i=0;ibaris;i++{ for int j=0;jk;j++{ matriksU[i][j] = Math.roundgenerator.nextDouble100.0100.0; } } cetak matrik keanggotaan System.out.printlnMatrik U awal : ; for int i=0;ibaris;i++{ for int j=0;jk;j++{ System.out.printmatriksU[i][j] +\t; } System.out.println; } return matriksU; } fungsi untuk menghitung pusat klaster public double[][] hitungPusatKlaster{ double[] jumU = new double[k]; double[][] hitungUW = new double[baris][k]; for int i=0;ibaris;i++{ for int j=0;jk;j++{ var hitung menyimpan pemangkatan matriks keanggotaan dengan pembobot w hitungUW[i][j]=Math.powmatriksU[i][j],w; var jumU untuk menyimpan jumlah dari var hitungUW jumU[j] += hitungUW[i][j]; } } System.out.println; instansiasi var v untuk menyimpan pusat klaster v = new double[k][kolom]; double[][] sem = new double[k][kolom]; for int i=0; ibaris;i++{ panjang baris matrik input for int j=0; jk;j++{ panjang kolom matrik keanggotaan forint l=0;lkolom;l++{ panjang kolom matrik input var sem digunakan untuk menyimpan sementara jumlah perhitungan Uikw Xij, excel baris 30 sem[j][l] += hitungUW[i][j]input[i][l]; } … cetak pusat klaster System.out.printlnPusat Kluster = ; for int i=0;ik;i++{ for int j=0;jkolom;j++{ System.out.printdf.formatv[i][j]+\t; } System.out.println; } System.out.println; return v; } fungsi menghitung fungsi objektif public double fObjektif{ totalP = new double[baris][v.length]; double[][] semP = new double[baris][v.length]; double Pbaru = 0; System.out.printlnFungsi Objektif = ; for int i=0;ibaris;i++{ for int j=0;jv.length;j++{ for int l=0;lv[0].length;l++{ var totalP menyimpan jumlah Xij-Vkj2, excel baris 52 totalP[i][j] += Math.powinput[i][l]- v[j][l],2; } var semP untuk meyimpan hasil perkalian Uikw P semP[i][j] = totalP[i][j] Math.powmatriksU[i][j], w; objektif[i] += semP[i][j]; System.out.printsemP[i][j]+\t; } var Pbaru untuk menyimban fungsi objektif baru Pbaru += objektif[i]; System.out.println; } System.out.printlnPbaru; System.out.println; return Pbaru; } fungsi untuk membuat matriks keanggotaan baru public double[][] matriksUBaru{ double pemangkat = -1w-1; double[] jum = new double[baris] ; double[][] UBaru = new double[baris][k]; df = new DecimalFormat.; System.out.printlnMatriks U Baru = ; for int i=0;ibaris;i++{ for int j=0;jk;j++{ var jum untuk menyimpan jumlah matriks keanggotaan yg dipangkatkan jum[i] += Math.powtotalP[i][j], pemangkat; jum[i] += Math.powtotalP[i][j], pemangkat; } for int j=0;jk;j++{ var Ubaru menyimpan nilai untuk matriks keanggotaan yang baru hasil pembagian totalPjum UBaru[i][j] = Math.powtotalP[i][j], pemangkatjum[i]; System.out.printdf.formatUBaru[i][j]+\t; } System.out.println; } matriksU = UBaru; return matriksU; } mendapatkan nilai maksimal dari data array public Data getMaxValueData[] listdata{ Data maxValue = listdata[0]; forint i=1;i listdata.length;i++{ iflistdata[i].getIsi maxValue.getIsi{ maxValue = listdata[i]; } } return maxValue; } menampilkan hasil ke teks areaconsole sistem public Tabel[] tampilHasildouble[][] hasil,Tabel[] t{ System.out.printlnHasil Klaster data sebagai berikut : ; Data [] listdata = new Data[hasil[0].length]; Integer [] klaster = new Integer[hasil.length]; Data akhir; for int i=0;ihasil.length;i++{ for int j=0;jhasil[0].length;j++{ Data sem = new Data; sem.setPosisij+1; sem.setIsihasil[i][j]; listdata[j]=sem; } akhir = getMaxValuelistdata; klaster[i]=akhir.getPosisi; } forint i=0;iklaster.length;i++{ t[i].setPosisi+klaster[i]; } ArrayListInteger b = new ArrayList; Collections.addAllb, klaster; forint i=1;i=hasil[0].length;i++{ System.out.printlnBanyak Klaster +i+ = +Collections.frequencyb,i; System.out.printlnIsi Klaster +i+ = ; ifCollections.frequencyb,i=0{ for Tabel t1 : t { if Integer.parseIntt1.getPosisi == i {

4.2.5 Implementasi Kelas ScatterAdd