Anda di halaman 1dari 22

ANALISIS KLASIFIKASI MUSIC BERDASARKAN JENIS

DENGAN FORMAT WAV


MENGGUNAKAN ALGORITMA K-MEANS

A. Pendahuluan
Perkembangan musik dewasa ini sudah begitu pesat. Banyak sekali macam musik
yang ada. Hal ini menyebabkan lagu yang ada menjadi sangat banyak. Untuk
memudahkan proses penyimpanan, saat ini banyak yang disimpan dalam bentuk
elektronik. Keadaan ini kadang kala menyebabkan proses pencarian terhadap sebuah lagu
menjadi sulit. Kadang kala bahkan musik yang disimpan tidak diketahui judul Salah satu
solusi yang bisa digunakan untuk menangani masalah ini adalah dengan membuat suatu
klasifikasi terhadap lagu tersebut berdasarkan atas kriteria tertentu sesuai dengan
keperluan. Klasifikasi yang dilakukan diharapkan dapat membantu proses pencarian
terhadap suatu lagu tertentu. Proses klasifikasi musik dapat dilakukan berdasarkan
kriteria-kriteria tertentu, misalnya nama artis, judul lagu, jenis lagu dan sebagainya. Salah
satu kriteria yang digunakan adalah dengan berdasarkan jenis musik. Klasifikasi
berdasarkan jenis musik. Pada makalah ini dikembangkan sebuah sistem yang
melakukan klasifikasi terhadap file musik berdasarkan atas jenis musiknya. Jenis file
yang menjadi inputan adalah file WAVE. Untuk proses pengenalan musik program ini
dibagi dalam dua fase, yaitu fase ekstraksi fitur dan fase klasifikasi musik.
B. Teori
1. pengenalan Pola
Pola adalah entitas yang terdefinisi dan dapat diidentifikasi melalui ciri-cirinya (features).
Ciri-ciri tersebut digunakan untuk membedakan suatu pola dengan pola lainnya. Ciri yang
bagus adalah ciri yang memiliki daya pembeda yang tinggi, sehingga pengelompokan pola
berdasarkan ciri yang dimiliki dapat dilakukan dengan keakuratan yang tinggi. Pengenalan
pola bertujuan menentukan kelompok atau kategori pola berdasarkan ciri- ciri yang dimiliki
oleh pola tersebut. Dengan kata lain terdapat dua pendakatan yang dilakukan dalam
pengenalan pola, pendekatan secara statistik dan pendekatan secara sintatik atau struktural.
Struktur pengenalan pola dapat dilihat dari gambar berikut (gambar 1) :

Gambar 1.Struktur Pengenalan Pola


1

a. Input Transducer
Menganalisa sinyal elektronik yang diinput. Alat yang digunakan : scanner
b. Preprocessor
Melakukan penambahan kondisi sinyal, termasuk fungsi penguatan sinyal, analisa
spektrum dan konversi analog ke digital.
c. Feature Extractor
Sebagai distriminator, dengan membandingkan kecocokan template.
d. Response selector
Algoritma untuk memilih input pattern dengan data pattern yang sudah ada di software
dengan menggunakan teknik pencarian, sortir, least-squares analysis.
e. Output System
Output system mungkin berupa suara, gambar atau video yang sesuai dengan hasil
proses aplikasi.
2. File WAVE
Merupakan salah satu format data yang digunakan untuk menyimpan suara.
Dengan menggunakan format tertentu maka suara baik berupa ucapan orang maupun
bunyi yang dihasilkan dari alat musik dapat tersimpan, sehingga sewaktu waktu dapat
dijalankan kembali. Musik sendiri merupakan hasil karya seni dalam bentuk suara
tersusun atas satuan waktu, perpaduan dari seseorang atau beberapa pemusik beserta
dengan alat musiknya. Metode penyimpanan file WAVE menggunakan sistem Pulse
Code Manupulation (PCM) untuk mengkodekan suara dari bentuk analog menjadi bentuk
digital. Gambaran mengenai format file WAVE bisa dilihat pada Gambar 1.

Gambar 2. Gambaran Format File WAV

Sebuah file WAVE terdiri dari kelompokkelompok data yang disebut chunk (Sapp,
2003). Dalam sebuah chunk terdapat bagian header dan data. File WAVE biasanya
terdiri dari sebuah chunk yang mengandung dua sub-chunks.
3. Ekstraksi Ciri
Untuk mendapatkan data yang akurat dan konsisten dari setiap sampel, digunakan
suatu metode ekstraksi ciri sinyal suara dengan domain waktu dan domain frekuensi.
Pada tugas ini penulis hanya menggunakan masing- masing dua metode untuk tiap
domain. Adapun metode yang digunakan adalah Time Domain. Time domain adalah
pemaparan teknik sinyal audio dasar, dimana sinyal digambarkan sebagai amplitudo
dengan satuan waktu, sinyal dapat bernilai positif atau negatif tergantung pada tekanan
suara.
Everage Energi
Menandakan kekerasan suara pada waktu yang pendek
Dimana,

AE adalah Sort time energy


N = Jumlah Sampel
X(n) = Nilai sinyal dari sampel

Zero Crossing Rate


Sampel berurutan pada sebuah sinyal digital memiliki perbedaan tanda, ukuran
dari noise sebuah sinyal pada fitur domain
Dimana,

ZC = Zero crosing rate


sgn x(n) = nilai dari x(n) , bernilai 1 jika x(n) positif, -1 jika x(n) negatif
N = Jumlah Sampel

4. Pengklasteran K_Means
Data Clustering merupakan salah satu metode Data Mining yang bersifat tanpa
arahan (unsupervised). Ada dua jenis data clustering yang sering dipergunakan dalam
proses pengelompokan data yaitu hierarchical (hirarki) data clustering dan nonhierarchical (non hirarki) data clustering.
Kmeans merupakan salah satu metode data clustering non hirarki yang berusaha
mempartisi data yang ada ke dalam bentuk satu atau lebih cluster/kelompok. Metode ini
mempartisi data ke dalam cluster/kelompok sehingga data yang memiliki karakteristik
yang sama dikelompokkan ke dalam satu cluster yang sama dan data yang mempunyai
karakteristik yang berbeda dikelompokkan ke dalam kelompok yang lain. Adapun tujuan
dari data clustering ini adalah untuk meminimalisasikan objective function yang diset
dalam proses clustering, yang pada umumnya berusaha meminimalisasikan variasi di
dalam suatu cluster dan memaksimalisasikan variasi antar cluster.
Data clustering menggunakan metode K-Means ini secara umum dilakukan
dengan algoritma dasar sebagai berikut :
1. Tentukan jumlah cluster
3

2. Alokasikan data ke dalam cluster secara random


3. Hitung centroid/rata-rata dari data yang ada di masing-masing cluster
4. Alokasikan masing-masing data ke centroid/ratarata terdekat
5. Kembali ke Step 3, apabila masih ada data yang berpindah cluster atau apabila
perubahan nilai centroid, ada yang di atas nilai threshold yang ditentukan atau apabila
perubahan nilai pada objective function yang digunakan di atas nilai threshold yang
ditentukan.
C. Langkah-langkah Analisa Data
Pada analisa klasisfikasi musik dan pengklasteran ke dalam k-means ini, kita
lakukan langkah-langkah sebagai berikut :
1. Pre Prosessing
pada Pre Prosessing yang dilakukan adalah mengconvert file MP3 ke dalam File
Wav , yaitu kita akan mengambil file tersebut dengan durasi 10 detik, dengan
mneggunakan software convert. Yaitu dalam hal ini menggunakan cool editpro, setelah
diperoleh file wav yang telah di potong durasinya menjadi 10 detik maka file tersebut
disimpan kedalam path dari pada matlab.
Membaca File WAV
langkah selanjutnya adalah dilakukan pembacaan file atau sinyal suara music
yang telah di potong dengan durasi 10 detik dan diconvert ke wav tersebut.
Frame Blocking
Frame blocking merupakan pembagian sinyal suara menjadi beberapa frame dan satu
frame terdiri dari beberapa sampel. Pengambilan sampel tersebut tergantung dari tiap
detik suara akan disampel dan berapa besar frekuensi samplingnya. Dalam tugas ini
menggunakan frekuensi sampling 8000 Hz dan pengambilan sampel tiap 10 detik. Yang
mana akan di blok setiap 1 detik sehingga setiap blok mempunyai sampling sebesar
8000Hz, maka isi seluluh data adalah 8000x10 maka jumlahnya adah 80.000 untuk
keseluruhan. Contoh bentuk sinyal pada sebuah data adalah pada gambar 2 :
Gambar 2. sinyal satu data sampel 10 detik
2. Proses Sampling
Sinyal suara merupakan sinyal yang tidak terbatas dalam domain waktu (infinite
timeinterval). Suara akan menghasilkan sinyal analog yang terus kontinyu. Untuk
keperluan pemrosesan maka sinyal suara harus dibentuk dalam potongan potongan waktu
yang terbatas (finite time interval). Karena itu sinyal yang ada dipotong-potong dalam
slot-slot interval waktu tertentu. Sinyal suara seperti terlihat pada gambar 3
Gambar 3. Pembagian sinyal pada suara
4

3. Penghitung Time Domain


perhitungan ini bertujuan untuk mencari nilai dari data, sehingga data dapat
dianalisa dan di klusternakan ke dalam suatu pengklasteran.
Everage Energi
Dalam menghitung Average Energi pertama akan dihitung average energi setiap data
sampling yaitu jika dalam satu data terdapat 10 sampling maka dan setiap sampling
terdiri dari sepuluh plot atau potongan sehingga akan dihitung sebesar 10 (data
sampel) x 10 (data sampling ) sehingga jumlah semuanya adalah 100 data average
Energi. Karena setiap data terdiri dari 10 sampling dan data sejumlah 10 data. Hasil
Average energi setiap data dapat digambarkan dalam bentuk grafik. Lihat gambar 4.
Gambar 4. Sinyal data Average Energi 10 sampel data
Zero Crossing Rate
setelah menghitung AE (Average Energi ) pada setiap sampel maka selanjutnya akan
dihitung Zero Crossing Rate. Sama halnya pada perhitungan AE, pada ZCR akan
dihitung berdasarkan jumlah sampel yang ada. Jika dilihat grafik dari datanya yang
sudah diperoleh maka seperti pada gambar 5.

Gambar 5. grafik pada data ZCR dari seluruh data


5. Penaklasteran K_means
Implementasi Algoritma dilakukan dengan membangun algoritma K-Means
dalam suatu bahasa pemrograman dan melakukan pengujian terhadap sebaran data yang
telah ada. Implementasi Algoritma Clustering K-Means pada tulisan ini menggunakan
Matalab 2008 dengan data yang akan diambil sebagai pengujian sebanyak 100 data. Pada
implementasi algoritma K-Means ini terdapat ketentuan seperti :
Jumlah Cluster yang diinginkan 3 (K = 3)
Maximum iterasi yang terjadi adalah 100 (menjaga agar tidak terjadi infinite loop /
MaxIter = 100)
Threshold pergeseran pusat cluster terbaru dengan pusat cluster yang terbentuk sebelum
pusat cluster terbaru adalah nol (Threshold = 0)
Data yang diterima untuk ditrain dua atribut atau dua vektor (AE dan ZCR)
Pengambilan titik pusat cluster awal yang dilakukan secara acak dilakukan tanpa
pengacakan sistem namun menggunakan penentuan awal yang ditentukan oleh
pembangun program atau penulis, dengan cara menuliskan pada program sebagai berikut
:

program untuk K-means :


[maxRow, maxCol]=size(m)
if maxRow<=k,
y=[m, 1:maxRow]
else
% initial Nilai sembarang K
if isRand,
p = randperm(size(m,1));
% inisialisasi random
for i=1:k
c(i,:)=m(p(i),:)
end
else
for i=1:k
c(i,:)=m(i,:)
% sequential initialization
end
end
temp=zeros(maxRow,1); % inisialisasi nilai nol (vector)
while 1,
d=DistMatrix(m,c); % Hitung jarak centroid
[z,g]=min(d,[],2); % Cari anggota/ group matrix g
if g==temp,
break;
% ITERASI Berhenti
else
temp=g;
% Pindahkan group matrix ke temporary variable
end
for i=1:k
f=find(g==i);
if f
% Hanya menghitung titik centroid bila f tidak kosong
c(i,:)=mean(m(find(g==i),:),1);
end
end
end
y=[m,g];
end

sehingga setelah melakukan proses pada program maka diperoleh hasil akhir sebagai :

Tabel 1. hasil Cluster Akhir

lanjutan :

lanjutan

10

11

12

Lampiran
terlampir

lampiran 1 : Program mencari AE dan ZCR


clear;
[y1,FS1] = wavread('pop1.wav');
[y2,FS2] = wavread('pop2.wav');
[y3,FS3] = wavread('pop3.wav');
[y4,FS4] = wavread('pop4.wav');
[y5,FS5] = wavread('mozart1.wav');
[y6,FS6] = wavread('mozart2.wav');
[y7,FS7] = wavread('mozart3.wav');
[y8,FS8] = wavread('rock1.wav');
[y9,FS9] = wavread('rock2.wav');
[y10,FS10] = wavread('rock3.wav');
AE=[];
y1 = y1(1:80000,1);
y2 = y2(1:80000,1);
y3 = y3(1:80000,1);
y4 = y4(1:80000,1);
y5 = y5(1:80000,1);
y6 = y6(1:80000,1);
y7 = y7(1:80000,1);
y8 = y8(1:80000,1);
y9 = y9(1:80000,1);
y10 = y10(1:80000,1);
%jadikan y ke dalam matrix
y = [y1 y2 y3 y4 y5 y6 y7 y8 y9 y10];
AE1 = zeros(10,1);
AE2 = zeros(10,1);
AE3 = zeros(10,1);
AE4 = zeros(10,1);
AE5 = zeros(10,1);
AE6 = zeros(10,1);
AE7 = zeros(10,1);
AE8 = zeros(10,1);
AE9 = zeros(10,1);
AE10 = zeros(10,1);
%mencari nilai Zero Crossing Rate
sign_y=[];
sig_y=[];
for i =1 : 10
sign_y1_1 = y(:,i)>=0;

13

sign_y1_2 = (y(:,i)<0) * -1;


sign_y(:,i) = sign_y1_1 + sign_y1_2;
y_n_1 = zeros(80000,1);
y_n_1(2:80000)=sign_y(1:79999,i);
sig_y(:,i)=abs(sign_y(:,i) - y_n_1);
end
sign_y(1,:)=0;
signal =0;
for k = 1 : 10
for i = 0 : 9
strt=((i*FS1)+1); stop= (i+1)*FS1;
zcr(k,i+1)=(sum(sign_y(strt:stop,k)))/(2*FS1);
end
end
%nilai akhir ZCR
zcr = reshape(zcr,100,1);
% ZCR dalam matrik Transpose
for i = 0 : 9
for j= (i*FS1)+1 : (i+1)*FS1
AE1(i+1) = (AE1(i+1) + y1(j)^2)/FS1;
AE2(i+1) = (AE2(i+1) + y2(j)^2)/FS1;
AE3(i+1) = (AE3(i+1) + y3(j)^2)/FS1;
AE4(i+1) = (AE4(i+1) + y4(j)^2)/FS1;
AE5(i+1) = (AE5(i+1) + y5(j)^2)/FS1;
AE6(i+1) = (AE6(i+1) + y6(j)^2)/FS1;
AE7(i+1) = (AE7(i+1) + y7(j)^2)/FS1;
AE8(i+1) = (AE8(i+1) + y8(j)^2)/FS1;
AE9(i+1) = (AE9(i+1) + y9(j)^2)/FS1;
AE10(i+1) = (AE10(i+1) + y10(j)^2)/FS1;
end;
end;
AE=[AE1;AE2;AE3;AE4;AE5;AE6;AE7;AE8;AE9;AE10;];
ez=[AE zcr];
%menampilkan (AE,zcr,'.');
figure(1);
subplot(121)
plot(AE,'+')
subplot(122)
plot(zcr,'*')
save data1.txt AE -ascii
Nilai AE dari data :
>> AE
0.0044; 0.0031; 0.0564; 0.0044;

0.1027;

0.0009;

14

0.0001;

0.0122;

0.0003;

0.0002;

0.0257;

0.0005;

0.0957;

0.0037;

0.0000;

0.0001;

0.0907;

0.0060;

0.0407;

0.0191;

0.0009;

0.0110;

0.0044;

0.0155;

0.1250;

0.0206;

0.0000;

0.0064;

0.0206;

0.0248;

0.0028;

0.0011;

0.0034;

0.0004;

0.0009;

0.0022;

0.0013;

0.0000;

0.0005;

0.0001;

0.0176;

0.0005;

0.0000;

0.0001;

0.0005;

0.0009;

0.0004;

0.0001;

0.0011;

0.0001;

0.0044;

0.0000;

0.0031;

0.0002;

0.0009;

0.0004;

0.0000;

0.0005;

0.0006;

0.0001;

0.0004;

0.0000;

0.0025;

0.0578;

0.0564;

0.0198;

0.0044;

0.0396;

0.0000;

0.0002;

0.0604;

0.0161;

0.0154;

0.1009;

0.0564;

0.0009;

0.0154;

0.0083;

0.0002;

0.0022;

0.0169;

0.0198;

0.0006;

0.0104;

0.0022;

0.0155;

0.0011; 0.0005 ; 0.0198; 0.0034;

0.0000;

0.0000;

0.0008; 0.0000; 0.0020; 0.0008; 0.0044 ; 0.0088; 0.0011; 0.0020


>> plot (AE)

>> zcr
maka akan menampilkan data sejumlah seratus buah,
0.0199; -0.0011;

0.0056;

0.0118;

0.0148;

0.2284; -0.1426; -0.0096; -0.0403;

0.0079;

0.0182; -0.0136; -0.0131;

0.0071;

0.0130; -0.1049; -0.0046; -0.0180; -0.0105; -

0.0022;

0.0182;

0.0004; -0.0006;

0.0090;

0.0679; -0.1336; -0.0025; -0.0283; -0.0069; -

0.0100;

0.0015;

0.0040; -0.0073;

0.0100;

0.0715; -0.1144; -0.0056; -0.0129; -0.0109; -

0.0075;

-0.0120;

0.0086;

0.0113;

-0.0089;

0.0961;

-0.0681;

-0.0116;

-0.0115;

0.0003;

0.0069;

-0.0196;

-0.0041;

0.0420;

0.0020;

0.0806;

-0.1601;

-0.0066;

-0.0089;

0.0060;

0.0018;

-0.0299;

-0.0140;

-0.0040;

0.0125;

0.0796;

-0.1812;

-0.0071;

0.0019;

0.0027;

0.0008; -0.0151;

0.0045;

0.0154;

0.0055;

0.0044;

-0.0077;

0.0121;

0;

0.0116;

0.0099; -0.0011;

0.0049;

0.0626; -0.1471; -0.0029; -0.0016; -0.0011; -

-0.0061;

0.0041;

0.0071; -

0.0684;

-0.1510;

0.0030;

-0.0124;

0.0735; -0.0884; -0.0125; -0.0086;-0.0090

>> plot (zcr)

15

0.0113;

menampilkan nilai AE dan ZCR yang disini diveriabelkan ez :


4.39544783128239e-06

0.0199375000000000

3.05183507728578e-06

-0.00106250000000000

5.64315426712628e-05

0.00556250000000000

4.39508074780519e-06

0.0118125000000000

0.000102662235620635 0.0148125000000000
9.23160610687499e-07

0.228437500000000

1.22185829201360e-07

-0.142562500000000

1.22090493054793e-05

-0.00956250000000000

2.74735462665796e-07

-0.0403125000000000

1.94889354865317e-07

0.00706250000000000

2.56674804889002e-05

-0.00787500000000000

4.88327981948853e-07

0.0182500000000000

9.57120987922032e-05

-0.0136250000000000

3.69379530442549e-06

-0.0131250000000000

7.63034927858417e-09

0.00712500000000000

1.22094158650652e-07

0.0130000000000000

9.06530851422602e-05

-0.104875000000000

5.98275100720310e-06

-0.00462500000000000

4.06624085457040e-05

-0.0180000000000000

1.90751687169147e-05

-0.0105000000000000

9.23157846466071e-07

-0.00225000000000000

1.10243999987993e-05

0.0182500000000000

4.39544775441327e-06

0.000375000000000000

1.54508295929317e-05

-0.000625000000000000

0.000125005655005663 0.00900000000000000

16

2.06307993321448e-05

0.0678750000000000

4.20628087059336e-10

-0.133625000000000

6.41723728193021e-06

-0.00250000000000000

2.06321727390808e-05

-0.0282500000000000

2.47925768234540e-05

-0.00687500000000000

2.75432683480954e-06

-0.0100000000000000

1.09894184160829e-06

0.00150000000000000

3.36594014656557e-06

0.00400000000000000

1.54529574395776e-05

-0.00725000000000000

1.09871007728578e-06

0.0100000000000000

4.88662767420352e-07

0.0715000000000000

1.98459017200604e-05

-0.114375000000000

3.36511237336212e-06

-0.00562500000000000

3.06549549181620e-08

-0.0128750000000000

1.37475154462167e-10

-0.0108750000000000

3.73840333104149e-07

-0.00750000000000000

9.23317912221685e-07

-0.0120000000000000

2.20505621063747e-06

0.00862500000000000

1.28942871522909e-06

0.0112500000000000

3.05786563396502e-08

-0.00887500000000000

4.88315585255682e-07

0.0961250000000000

6.86731343270689e-08

-0.0681250000000000

1.75798074035647e-05

-0.0116250000000000

4.88525536689301e-07

-0.0115000000000000

7.70664227081844e-09

0.000250000000000000

1.22085571409002e-07

0.00687500000000000

17

4.88282251363995e-07

-0.0196250000000000

9.23272147300378e-07

-0.00412500000000000

3.73864174962059e-07

0.0420000000000000

1.22117048382819e-07

0.00200000000000000

1.09894181740290e-06

0.0806250000000000

1.22131347775593e-07

-0.160125000000000

4.39499285519147e-06

-0.00662500000000000

7.64465522772077e-09

-0.00887500000000000

3.05179214584851e-06

0.00600000000000000

1.90743446350098e-07

0.00175000000000000

9.23343701486126e-07

-0.0298750000000000

3.74027286654130e-07

-0.0140000000000000

3.05414258247018e-08

-0.00400000000000000

4.88396656513587e-07

0.0125000000000000

6.18058210492671e-07

0.0796250000000000

1.22078899860755e-07

-0.181250000000000

3.73864174366012e-07

-0.00712500000000000

3.05213929416091e-08

0.00187500000000000

2.47234452059640e-06

0.00275000000000000

5.77523957597361e-05

0.000750000000000000

5.64281058694250e-05

-0.0151250000000000

1.98441020518607e-05

0.00450000000000000

4.39517593493582e-06

0.0153750000000000

3.95527126712892e-05

0.00487500000000000

3.05263425703202e-08

0.0626250000000000

1.91430096182370e-07

-0.147125000000000

18

6.04376568910766e-05

-0.00287500000000000

1.61443949015409e-05

-0.00162500000000000

1.54495249028469e-05

-0.00112500000000000

0.000100908472656967 -0.00550000000000000
5.64289337112919e-05

0.00437500000000000

9.25937774768427e-07

-0.00775000000000000

1.54497680835757e-05

0.0116250000000000

8.31613548711396e-06

-0.00612500000000000

2.06117294329779e-07

0.0683750000000000

2.21162444353178e-06

-0.151000000000000

1.68535194439948e-05

0.00300000000000000

1.98467347722848e-05

-0.0123750000000000

6.20560399230137e-07

0.0112500000000000

1.04448557101522e-05

0.0121250000000000

2.20508196652150e-06

7.63034859188334e-07

0.00987500000000000

7.62939453220371e-09

-0.00112500000000000

1.95404152871347e-06

0.00412500000000000

7.62986183166519e-07

0.0735000000000000

4.39469243061580e-06

-0.0883750000000000

8.81969547462644e-06

-0.0125000000000000

1.09905340004624e-06

-0.00862500000000000

1.95324041795744e-06

-0.00900000000000000

Lampiran 2 : Klastring- Kmeans


>> y=kMeansCluster(m,k,isRand)

19

%m adalah matrix [ae,zcr];


m = [0 0.02
0 0
0.06 0.01
0 0.01
0.1 0.01
0 0.23
0 -0.14
0.01 -0.01
0 -0.04
0 0.01
0.03 -0.01
0 0.02
0.1 -0.01
0 -0.01
0 0.01
0 0.01
0.09 -0.1
0.01 0
0.04 -0.02
0.02 -0.01
0 0
0.01 0.02
0 0
0.02 0
0.13 0.01
0.02 0.07
0 -0.13
0.01 0
0.02 -0.03
0.02 -0.01
0 -0.01
0 0
0 0
0.02 -0.01
0 0.01
0 0.07
0.02 -0.11
0 -0.01
0 -0.01
0 -0.01
0 -0.01
0 -0.01
0 0.01
0 0.01
0 -0.01
0 0.1
0 -0.07
0.02 -0.01
0 -0.01
0 0
%menentukan Jumlah kluster
k=3;
isRand=0;

0 -0.02
0 0
0 0.04
0 0
0 0.08
0 -0.16
0 -0.01
0 -0.01
0 0.01
0 0
0 -0.03
0 -0.01
0 0
0 0.01
0 0.08
0 -0.18
0 -0.01
0 0
0 0
0.06 0
0.06 -0.02
0.02 0
0 0.02
0.04 0
0 0.06
0 -0.15
0.06 0
0.02 0
0.02 0
0.1 -0.01
0.06 0
0 -0.01
0.02 0.01
0.01 -0.01
0 0.07
0 -0.15
0.02 0
0.02 -0.01
0 0.01
0.01 0.01
0 0
0 0.01
0 0
0 0
0 0.07
0 -0.09
0.01 -0.01
0 -0.01
0 -0.01]
0 0.01

20

% menghitung jumlah baris dan kolom pada matrik.


[maxRow, maxCol]=size(m)
if maxRow<=k,
y=[m, 1:maxRow]
else
% initial Nilai sembarang K
if isRand,
p = randperm(size(m,1));
% inisialisasi random
for i=1:k
c(i,:)=m(p(i),:)
end
else
for i=1:k
c(i,:)=m(i,:)
% sequential initialization
end
end
temp=zeros(maxRow,1); % inisialisasi nilai nol (vector)
while 1,
d=DistMatrix(m,c); % Hitung jarak centroid
[z,g]=min(d,[],2); % Cari anggota/ group matrix g
if g==temp,
break;
% ITERASI Berhenti
else
temp=g;
% Pindahkan group matrix ke temporary variable
end
for i=1:k
f=find(g==i);
if f
% Hanya menghitung titik centroid bila f tidak kosong
c(i,:)=mean(m(find(g==i),:),1);
end
end
end
y=[m,g];
end
%Menghitung jarak 2 buah vector
function d=DistMatrix(A,B)
[hA,wA]=size(A);
[hB,wB]=size(B);
if wA ~= wB, error('DImensi tidak sama'); end
for k=1:wA
C{k}= repmat(A(:,k),1,hB);
D{k}= repmat(B(:,k),1,hA);
end

21

S=zeros(hA,hB);
for k=1:wA
S=S+(C{k}-D{k}').^2;
end
d=sqrt(S);

Sehingga dari program tersebut kita dapat TAMPILAN SEPERTI PADA LAMPIRAN 3.
menentukan jumlah Baris dan Kolom dari matrix
menentukan titik pusat kluster dilakukan secara random sehingga di peroleh sebagai berikut :
hasil titik pusat cluster pertama :
hasil titik pusat cluster ke dua :

hasil titik pusat cluster ketiga :


yang ke tiga titik pusat kluster sudah tidak berpindah lagi sehingga program langsung
menampilkan data kluster terakhir sebagaimana pada Tabel 1. hasil Cluster Akhir ,sehingga jika
kita tampilkan grafik klusternya adalah sebagai berikut :

22

Anda mungkin juga menyukai