• Tidak ada hasil yang ditemukan

Implementasi Function Fuzzy C-Means Clustering

BAB IV ANALISIS DAN HASIL

4.1.2 Implementasi Program

4.1.2.2 Implementasi Function Fuzzy C-Means Clustering

Program 4.1 Tampilkan Data

Program diatas ini pengguna di arahkan untuk menginputkan file yang ingin dipakai. Dimana pertama-tama function pushbuttonTampilkanData ini mendeklarasikan data sebagai variable global agar semua fungsi yang ada di dalamnya bisa mengakses nilai dari variable tersebut. Kemudian menggunakan filename,pathname untuk membaca file dari direktori yang dipilih. Kemudian ada uigetfile dimana untuk mengambil file dalam direktori yang mana file tersebut berformat xls dan xlsx. Lalu menggunakan xlsread untuk membaca file excel tersebut. Kemudian menampilkan data excel tersebut pada table dengan menggunakan fungsi set (handles.tabledata,’data’,data).

4.1.2.2 Implementasi Function Fuzzy C-Means Clustering

Implementasi fuzzy c-means clustering ini ada beberapa langka yang harus dibuat, langka pertama dimana membuat sebuah baris dan kolom matriks seperti dibawah ini:

function pushbuttonTampilkanData_Callback(hObject, eventdata,handles)

global data;

[filename,pathname]=uigetfile([{'*.xlsx','XLSX

Only'};{'* .xls','XLS Only'}],'Select Excel Input File');

data = xlsread(strcat(pathname,filename));

set(handles.tableData,'data', data);

Program 4.2 Menyiapkan Baris dan Kolom Matriks

Bagian program ini membuat atribut data kemudian membuat array yang terdapat baris dan kolom yang berisikan size atau ukuran dari data yang nanti akan diclusterkan.

Program 4.3 Menyiapkan Nilai-nilai Awal Perhitungan

Langka yang berikut atau kedua ini yang dilihat pada program diatas dimana untuk membaca input parameter dari gui yang diawali dengan membaca banyak cluster yang diambil dari gui bagian editcluser yang bertipe string kemudian diubah menggunakan str2num menjadi numerik, lalu membaca indeks untuk popmenuPangkat yang bertipe value selanjutnya bagian pangkats yang bertipe string, kemudian bagian pangkat yang dimana berisikan membaca bagian indeks terus membaca bagian pangkats kemudian diubah dari string ke numerik dengan menggunakan str2num, selanjutnya pada bagian fungsiobjektif awal dimana dimulai dari angka 0 sedangkan perhitungan iterasinya dimulai dari 1.

banyakcluster = str2num(get(handles.editCluster,'String')) indeks = get(handles.popupmenuPangkat,'Value');

pangkats = get(handles.popupmenuPangkat,'String');

pangkat = str2num(pangkats{indeks}) iterasimaksimal =

str2num(get(handles.editIterasi,'String'))

errorterkecil = str2num(get(handles.editError,'String')) fungsiobjektifawal = 0

penghitungiterasi = 1 data

[baris kolom] = size(data)

Program 4.4 Membangkitkan Bilangan Random

Langka ketiga ini untuk membangkitkan sebuah nilai random dalam matriks partisi awal. Pertama membuat atau menginisialisikan matrikspartisiawal ke dalam array, selanjutnya membuat perulangan yang berisikan perhitungan baris yang dibuat 1 dibanding baris kemudian membuat variable matriksacak yang dimana berikan nilai random dari banyak cluster yang tersedia, selanjutnaya membagikan matriksacak yang tadi dengan jumlah yang didapat dari matriksacak kemudian menambahkan matriksacak kedalam matrikspartisiawal menggunakan matrikspartisiawal = [matrikspartisiawal;

matriksacak]; lalu di akhiri dengan end dan menampilkan dicommand windows dengan membuat matrikspartisiawal dibagian

matrikspartisiawal = [];

for penghitungbaris = 1 : baris

matriksacak = rand(1, banyakcluster);

matriksacak = matriksacak / sum(matriksacak);

matrikspartisiawal = [matrikspartisiawal;

matriksacak];

end

matrikspartisiawal

matrikspartisiberpangkat = matrikspartisiawal.^pangkat jumlahkolomberpangkat = sum(matrikspartisiberpangkat, 1) reratakolomberpangkat = mean(matrikspartisiberpangkat, 1) errorperhitungan = 1000000000

bawah end. Kemudian membuat matriks partisi berpangkat yang berisikan matrikspartisiawal .^pangkat disini terjadi proses hasil dari partisi awal tadi dipangkatkan dimana pangkatnya nanti tergantung dari pengguna entah itu 1, 2 ataupun 3. Kemudian di tahap 3 ini juga menjumlahkan nilai tiap baris hasil matrikspartisiberpangkat tadi dengan menggunakan perintah jumlahkolomberpangkat = sum(matrikspartisiberpangkat,1), selanjutnya mencari rata rata setiap kolom dari matrikspartisiberpangkat menggunakan perintah reratakolomberpangkat = mean(matrikspartisiberpangkat,1 dan membuat error perhitungan dengan nilai 1000000000 agar bisa menangani error dengan nilai yang besar.

Program 4.5 Menghitung Pusat Cluster

while 1

penghitungiterasi

daftarpusatklusterbaru = [];

for penghitungcluster = 1 : banyakcluster penghitungcluster

hasilsemuabaris = [];

pengaliklaster =

matrikspartisiberpangkat(:,penghitungcluster) for penghitungbaris = 1 : baris

penghitungbaris

pengalibaris = pengaliklaster(penghitungbaris) dataperbaris = data(penghitungbaris,:) hasilperbaris = dataperbaris * pengalibaris hasilsemuabaris = [hasilsemuabaris; hasilperbaris];

end

hasilsemuabaris

Langka keempat ini terjadi proses perulangan dimana proses perulangan tersebut akan berhenti jika sudah mencapai kondisi dimana error perhitungan atau iterasi terbanyak tercapai.

Didalam proses perulangan terdapat perhitunganiterasi yang nanti ditampilkan di command windows, kemudian membuat atau menyediakan tempat untuk daftarpusatcluster dalam bentuk array, lalu menggunakan for untuk perulangan perhitunganclusternya, kemudian membuat lagi tempat untuk hasil semuabaris dalam bentuk array lalu membuat pengaliklaster yang berisikan hasil dari matriks partisi berpangkat. Selanjutnya menggunakan for yang keduan untuk perulangan perhitungan baris didalamnya terdapat pengalibaris yang dimana ambil dari pengaliklaster yang berisikan perhitungan baris jadi akan mengikuti perhitungan baris ketika perhitungan baris bernilai 1 maka dia akan melihat pengali kluster yang bagian baris pertama yang akan dimunculkan dibagian pengalibaris, kemudian memunculkan data perbaris dengan menggunakan perintah data(perhitunganbaris,:). Setelah itu membuat hasilperbaris dengan mengalikan dataperbaris dengan pengali baris dan menambahkan hasil perbaris tadi kedalam hasilsemua baris dengan menggunakan perintah hasilsemuabaris

= [hasilsemuabaris; hasilperbaris]; lalu akhiri dengan end hasil perulangan dan memunculkan hasilsemuabaris pada commandwindows.

Program 4.6 Hitung Jumlah Setiap Kolom

jumlahkolom = sum(hasilsemuabaris) pusatklusterbaru = jumlahkolom /

jumlahkolomberpangkat(penghitungcluster)

daftarpusatklusterbaru = [daftarpusatklusterbaru;

pusatklusterbaru];

end

daftarpusatklusterbaru

Bagian ini untuk menghitung jumlah dari setiap kolom diambil dari hasil semua baris. Kemudian membuat pusat cluster terbaru menggunakan jumlahkolom dibagi jumlahkolomberpangkat yang diambil dari perhitungan cluster. Selanjutnya membuat daftarpusatcluster dimana menggunakan daftarpusatklusterbaru = [daftarpusatklusterbaru;pusatklusterbaru]; untuk menambahkan hasilpusatclusterterbaru kedalam daftarpusatclusterterbaru.

Program 4.7 Perhitungan Nilai Fungsi Objektif

Langka kelima ini dimana untuk mengitung fungsi objektif . pertama-tama menyediakan tempat daftarjumlahcluster dlam bentuk arrat kemudian masuk kedalm proses perulangan menggunakan for yang yang berisikan pusatclusterbaru yang yang mengambil dari daftarpusatclusterbaru yang berisikan perhitungancluster kemudian membuat atau menghitung selisih setiap elemen dari data dengan pusat cluster yang baru

daftarjumlahkuadrat = [];

for penghitungcluster = 1 : banyakcluster penghitungcluster

pusatklusterbaru = daftarpusatklusterbaru (penghitungcluster, :)

selisih = data - repmat(pusatklusterbaru, baris, 1) selisihkuadrat = selisih.^2

jumlahkuadrat = sum(selisihkuadrat, 2)

daftarjumlahkuadrat = [daftarjumlahkuadrat jumlahkuadrat];

end

daftarjumlahkuadrat fungsiobjektifcluster =

sum(daftarjumlahkuadrat.*matrikspartisiberpangkat,2) fungsiobjektif = sum(fungsiobjektifcluster)

dengan menggunakan selisih = data - repmat(pusatklusterbaru, baris, 1) lalu untuk melihat selisih kuadratnya menggunakan selisih.^2.

Kemudian menjumlahkan selisihkuadrat secara horinzontal untuk mendapatkan jumlah kuadratnya kemudian hasil dari jumlahkudrat tadi dimasukkan kedalam daftar jumlah kuadrat dengan perintah daftar jumlah kuadrat = [daftarjumlahkuadrat jumlahkuadrat]; lalu akhiri proses perulangan dengan end kemudian memunculkan hasil dari daftarjumlah kuadrat pada command windows. Kemudian untuk fungsiobjektifclusternya itu di dapat dari jumlah daftar jumlahkuadrat dikalikan dengan matrikspartisiberpangkat dan pada tahap ini dimana diakhiri dengan menemukan fungsiobjektif dari jumlah fungsiobjektif cluster.

Program 4.8 Menghitung Perubahan Matriks Partisi matrikspartisisementara = [];

for penghitungcluster = 1 : banyakcluster nilaibaru =

(daftarjumlahkuadrat(:,penghitungcluster).^(-1/(pangkat-1)))

matrikspartisisementara = [matrikspartisisementara nilaibaru]; end

matrikspartisisementara jumlahbarismatrikspartisisementara = sum(matrikspartisisementara, 2) matrikspartisiawal =

matrikspartisisementara./repmat(jumlahbarismatrikspartisisem

entara, 1, banyakcluster)

fungsiobjektif

fungsiobjektifawal

errorperhitungan = abs(fungsiobjektif - fungsiobjektifawal) fungsiobjektifawal = fungsiobjektif

disp('Siapkan matriks untuk iterasi berikutnya ---');

matrikspartisiawal

matrikspartisiberpangkat = matrikspartisiawal.^pangkat jumlahkolomberpangkat = sum(matrikspartisiberpangkat, 1) reratakolomberpangkat = mean(matrikspartisiberpangkat, 1)

Langka keenam ini dimana untuk menghitung peerubahan matriks partisi. Dimana pada bagian awal menyedikan tempat dalam berbentuk array untuk matrikspartisisementara, kemudian masuk ke proses perulangan yang berisikan nilaibaru dimana nialibaru didapatkan dari daftarjumlahkuadrat (:,penghitungcluster).^(-1/(pangkat-1))) kemudian mengakhirinya dengan end lalu memunculkan hasil matrikspartisisementara di command windows.

Kemudian membuat jumlahbarismatrikspartisisementra yang didapatkan dari hasil penjumlahan matrikspartisisementara secara horizontal, selanjutnya membuat atau menampilkan hasil matrikspartisiawal lalu memunculkan fungsi objektif dan fungsiobjektifawal pada command windows dan pada error pehitungan didapat dari hasil absolut ( fungsiobjektif – fungsiobjektifawal ) dan dibawahnya dimana fungsiobjektifawal berisikan fungsi objektif. Pada program diatas menggunakan disp untuk menampilkan tulisan ‘ siapkan matriks untuk iterasi berikutnya ‘. Kemudian memunculkan matrikspartisiawal, lalu membuat matrikspartisiberpangkat untuk memangkatkan matriks partisi, kemudian membuat jumlahkolomberpangkat yang didapatkan dari penjumlahan matriks partisi berpangkat secara vertical berguna untuk hitung jumlah setiap kolom, selanjutnya hitung rata-rata setiap kolom dengan menggunakan reratakolomberpangkat = mean(matrikspartisiberpangkat, 1).

Program 4.9 Mengecek Kondisi Berhenti

Langka ketujuh ini dimana untuk mengecek kondisi berhenti. dilihat dari program diatas ketika kondisinya perhitunganiterasi sudah lebih atau sama dengan iterasimaksimal maka dia akan berhenti dan menampilkan iterasi maksimal tercapai dan menampilkan perhitungan akutasinya jika tidak maka dia akan mengecek lagi apakah error perhitungan kurang dari error terkecil jika benar maka akan menampilkan error terkecil tercapai, perhitungan akurasi serta errorperhitungannya jika belum menemukan maka dia akan mencari terus mencari kemudian mengulangi langka ke empat sampai ketemu iterasi dan error yang diinginkan.

Program 4.10 Menentukan Cluster

if penghitungiterasi >= iterasimaksimal

disp('Iterasi maksimal tercapai');

penghitungiterasi break;

end

if errorperhitungan < errorterkecil disp('Error terkecil tercapai');

penghitungiterasi errorperhitungan break;

end

penghitungiterasi = penghitungiterasi+1 end

[nilai,indeks] = max(matrikspartisiawal,[],2) [~,nomorcluster] =

ind2sub(size(matrikspartisiawal(1,:)),indeks) ; nomor = [1:size(matrikspartisiawal,1)]' ; hasilclustering = [nomor nomorcluster]

Langka kedelapan ini dimana untuk program diatas berguna untuk menentukan cluster. Dimana dimulai dengan mencari tertinggi, kemudian pada baris keduan untuk menentukan nomor cluster, selanjutnya untuk mendapatkan nomor dari data dan pada baris terakhir menentukan bahwa nomor data tertentu merupakan cluster tersebut.

Program 4.11 Menambahkan Hasil Cluster ke Tabel

Bagian ini dimana untuk menambahkan hasil cluster kedalam table.dimana mengembalikan nilai dari table data kemudian melakukan proses perulangan yang berisikan table yang didapatkan dari hasil clustering dan menghentikan proses perulangan jika sudah mendapatkan clusternya lalu memunculkan hasilnya dengan menggunakan set (handles.tableData, 'Data', tabel);

Program 4.12 Tampilkan Hasil Clustering

tabel = get(handles.tableData, 'Data');

for penghitungbaris = 1 : baris

tabel(penghitungbaris, 9) = hasilclustering(penghitungbaris, 2);

end

set(handles.tableData, 'Data', tabel);

appendText('Hasil Clustering', handles);

appendText('', handles);

appendText(strcat('Banyak data:',num2str(baris)), handles);

appendText(strcat('Banyakcluster:',num2str(banyakcluster)), handles);

appendText(strcat('Pangkat:',num2str(pangkat)), handles);

appendText(strcat('Iterasimaksimal:',num2str(iterasimaksima l)), handles);

appendText(strcat('Errorterkecil:',num2str(errorterkecil)), handles);

appendText('', handles);

appendText(strcat('Berhenti pada iterasi ke:',num2str(penghitungiterasi)), handles);

appendText(strcat('Errorperhitungan:',num2str(errorperhitun gan)), handles);

appendText('', handles);

Setelah melakukan beberapa langka tadi sekarang masuk pada program untuk menampilkan hasil clustering pada edithasil. Pada program diatas memuculkan hasil banyak data, banyak cluster, pangkat, iteasi maksimul, error terkecil, berhenti pada iterasi ke berapa dan error dari perhitungan tersebut yang dimasukkan pada bagian hasil dalam gui.

Program 4. 13 Mengelompokan Data Kedalam Cluster

Bagian program diatas ini dimana untuk mengelompokan data ke dalam cluster.

clusters = {};

for penghitungcluster = 1 : banyakcluster cluster = {};

for penghitungbaris = 1 : baris

if hasilclustering(penghitungbaris, 2) ==

penghitungcluster

cluster = [cluster; penghitungbaris];

end end

clusters{penghitungcluster} = cluster;

end clusters

Program 4.14 Tampilkan Anggota Kluster ke Bagian Hasil

Program diatas ini untuk menampilkan hasil cluster serta anggota yang ada di dalamnya ke hasil pada bagian gui.

Dokumen terkait