Algoritma K-Medoids Clustering


Algoritma K-Medoids Clustering adalah salah satu algoritma yang digunakan untuk klasifikasi atau pengelompokan data. Contoh yang dibahas kali ini adalah mengenai penentuan jurusan siswa berdasarkan nilai skor siswa.
Algoritma ini memiliki kemiripan dengan Algoritma K-Means Clustering, tetapi terdapat beberapa perbedaan utama, dimana apabila pada Algoritma K-Means Clustering, nilai tengah dihitung dengan rata-rata (mean) dan perhitungan jarak dihitung dari data pada masing-masing mean, sedangkan pada algoritma ini, data akan digunakan sebagai nilai tengah / disebut dengan medoid, dan perhitungan jarak dihitung dari jarak antar masing-masing data.



Diasumsikan ada 20 orang siswa, yaitu siswa A sampai dengan T
Masing-masing siswa memiliki rata-rata nilai IPA, IPS, dan Bahasa yang berbeda-beda
Maka tentukan semua siswa tersebut akan masuk ke dalam jurusan apa berdasarkan nilai skor yang dimiliki
Diasumsikan data awal nilai siswa adalah sebagai berikut

Nama SiswaNilai IPANilai IPSNilai Bahasa
Siswa A506070
Siswa B658073
Siswa C727065
Siswa D836580
Siswa E408273
Siswa F957185
Siswa G607496
Siswa H757592
Siswa I835570
Siswa J916065
Siswa K929155
Siswa L768059
Siswa M756574
Siswa N747689
Siswa O637969
Siswa P589376
Siswa Q825080
Siswa R816588
Siswa S767470
Siswa T777155

Langkah pertama adalah memasukkan data-data yang digunakan.
Contoh data awal adalah sebagai berikut:

data=[50, 60, 70; ...
    65, 80, 73; ...
    72, 70, 65; ...
    83, 65, 80; ...
    40, 82, 73; ...
    95, 71, 85; ...
    60, 74, 96; ...
    75, 75, 92; ...
    83, 55, 70; ...
    91, 60, 65; ...
    92, 91, 55; ...
    76, 80, 59; ...
    75, 65, 74; ...
    74, 76, 89; ...
    63, 79, 69; ...
    58, 93, 76; ...
    82, 50, 80; ...
    81, 65, 88; ...
    76, 74, 70; ...
    77, 71, 55]';



Sebelum masuk kedalam langkah-langkah pembahasan algoritma, ada beberapa konstanta atau parameter yang harus diketahui, yaitu:
* Tentukan Jumlah Cluster
Jumlah Cluster adalah jumlah dari pengelompokan data yang ingin dilakukan
Jumlah Cluster nilainya harus diantara 2 dan jumlah data
Diasumsikan dalam kasus ini, jumlah pengelompokan data ada 3 kelompok, yaitu jurusan IPA, jurusan IPS, jurusan Bahasa

jumlahCluster = 3;

Langkah-langkah penggunaan algoritma ini adalah

* Lakukan proses pengelompokan dengan metode K-Medoids Clustering
Penjelasan tentang fungsi ini akan dijelaskan pada perhitungan dibawah ini (poin 1 – 6)

daftarCluster = kMedoids(data,jumlahCluster);

Memasuki perhitungan utama pada fungsi kMedoids

1. Hitung jumlah data pada matriks data

jumlahData = size(data,2);

2. Hitung matriks v
Lakukan perkalian matriks data dengan dirinya sendiri
dan jumlahkah nilai yang terdapat dalam masing-masing dimensi untuk setiap data

v = dot(data,data,1);

3. Hitung matriks jarak, yang disimbolkan dengan D
Lakukan penjumlahan nilai baris matriks v dengan nilai kolom dari transpos matriks v
Kemudian kurangkan dengan 2 kali dari matriks data dikali dengan transpos matriks data

D = bsxfun(@plus,v,v')-2*(data'*data);

for i=1:jumlahData,
    D(i,i) = 0;
end

4. Tentukan medoid awal mula, yang diisi dengan nilai acak dari angka 1 sampai jumlah data, sebanyak jumlah cluster
Ambil semua nilai dari masing-masing baris data pada nilai acak tersebut
Kemudian bandingkan nilai minimal dari masing-masing data untuk membentuk daftar cluster mula-mula

[~, daftarCluster] = min(D(randsample(jumlahData,jumlahCluster),:),[],1);

5. lakukan perhitungan selama masih ada data yang berpindah cluster (poin 5a -5c)

daftarClusterTerakhir = 0;
while any(daftarCluster ~= daftarClusterTerakhir)
	. . .

5a. Ambil daftar cluster lama sebagai daftar cluster terakhir

daftarClusterTerakhir = daftarCluster;    

5b. Tentukan data acak selain medoid lama untuk menggantikan nilai medoid lama
Lakukan pencatatan indeks cluster yang lama
Lakukan perkalian indeks tersebut dengan matriks D
Kemudian cari indeks data yang nilai minimal pada masing-masing cluster

[~, idxD] = min(D*sparse(1:jumlahData,daftarCluster,1,jumlahData,jumlahCluster,jumlahData),[],1);

5c. Ambil semua nilai dari masing-masing baris data pada indeks yang telah ditentukan sebelumnya
Kemudian hitung nilai minimal dari matriks indeks D untuk mendapatkan nilai minimal dan daftar cluster yang baru

[nilaiMinimal, daftarCluster] = min(D(idxD,:),[],1);

6. Jika diperlukan, hitung penjumlahan nilai minimal yang didapatkan pada matriks D akhir

nilaiEnergi = sum(nilaiMinimal);

* Tampilkan semua data yang sudah dimasukan ke dalam cluster
Hitung nilai skornya untuk masing-masing kriteria dalam cluster tersebut
Ambil nilai skor tertinggi sebagai jawaban jurusan yang seharusnya diambil

data = data';
jumlahCluster = size(daftarCentroid,2);
st = zeros(1,size(data,2),'uint8');

for k = 1:jumlahCluster
    if cellfun('length',daftarDataPerCluster(k)) > 1,
        skor = zeros(1,size(data,2),'double');
        for i = 1:size(data,1)
            s = '';
            if daftarCluster(i) == k,
                s = strcat([s, 'Siswa ', char(i + 64), '   ']);
                for j = 1:size(data,2)
                    s = strcat([s, ' ', num2str(data(i,j)), ' ']);

                    if st(j) == 0, skor(j) = skor(j) + data(i,j); end;
                end
                disp(s);
            end;
        end;

        maks = -inf;
        idxmaks = -1;
        for i = 1:size(data,2)
            if maks < skor(i),
                maks = skor(i);
                idxmaks = i;
            end
        end

        disp(['Kelompok ini memiliki skor terbanyak pada kolom ke ' , num2str(idxmaks + 1) , ...
            ' , -> kelompok data ' , char(atribut(idxmaks))]);
        disp('------------------------------');

        st(idxmaks) = 1;
    end;    
end;

Hasil akhir adalah:

Algoritma K-Medoids Clustering
Contoh: Penentuan jurusan siswa berdasarkan nilai skor siswa
Diasumsikan ada 20 orang siswa, yaitu siswa A sampai dengan T
Masing-masing siswa memiliki rata-rata nilai IPA, IPS, dan Bahasa yang berbeda-beda
Maka tentukan semua siswa tersebut akan masuk ke dalam jurusan apa berdasarkan nilai skor yang dimiliki
Diasumsikan data awal nilai siswa adalah sebagai berikut
Nama Siswa, Nilai IPA, Nilai IPS, Nilai Bahasa
Siswa A   ,        50,        60,           70
Siswa B   ,        65,        80,           73
Siswa C   ,        72,        70,           65
Siswa D   ,        83,        65,           80
Siswa E   ,        40,        82,           73
Siswa F   ,        95,        71,           85
Siswa G   ,        60,        74,           96
Siswa H   ,        75,        75,           92
Siswa I   ,        83,        55,           70
Siswa J   ,        91,        60,           65
Siswa K   ,        92,        91,           55
Siswa L   ,        76,        80,           59
Siswa M   ,        75,        65,           74
Siswa N   ,        74,        76,           89
Siswa O   ,        63,        79,           69
Siswa P   ,        58,        93,           76
Siswa Q   ,        82,        50,           80
Siswa R   ,        81,        65,           88
Siswa S   ,        76,        74,           70
Siswa T   ,        77,        71,           55


Jumlah Cluster = 3


Data yang sudah dikelompokkan:
------------------------------
Siswa C 72 70 65
Siswa J 91 60 65
Siswa K 92 91 55
Siswa L 76 80 59
Siswa T 77 71 55
Kelompok ini memiliki skor terbanyak pada kolom ke 1 , -> kelompok data IPA
------------------------------
Siswa D 83 65 80
Siswa F 95 71 85
Siswa G 60 74 96
Siswa H 75 75 92
Siswa I 83 55 70
Siswa M 75 65 74
Siswa N 74 76 89
Siswa Q 82 50 80
Siswa R 81 65 88
Kelompok ini memiliki skor terbanyak pada kolom ke 3 , -> kelompok data Bahasa
------------------------------
Siswa A 50 60 70
Siswa B 65 80 73
Siswa E 40 82 73
Siswa O 63 79 69
Siswa P 58 93 76
Siswa S 76 74 70
Kelompok ini memiliki skor terbanyak pada kolom ke 2 , -> kelompok data IPS
------------------------------

Contoh modul / source code menggunakan Matlab dapat didownload disini:



Jika membutuhkan jasa kami dalam pembuatan program, keterangan selanjutnya dapat dilihat di Fasilitas dan Harga
Jika ada yang kurang paham dengan langkah-langkah algoritma diatas, silahkan berikan komentar Anda.
Selamat mencoba.

Tinggalkan sebuah komentar

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *