Algoritma Fuzzy k-NN (k-Nearest Neighbors) 4


Algoritma Fuzzy k-NN (k-Nearest Neighbors) adalah salah satu algoritma yang digunakan untuk pengambilan keputusan. Contoh yang dibahas kali ini adalah menentukan kelompok hasil jual tipe sepeda motor baru berdasarkan kelompok data yang sudah ada.
Secara singkat, algoritma ini merupakan penggabungan dari Algoritma Fuzzy Logic dan Algoritma k-NN (k-Nearest Neighbors) yang sudah dijelaskan sebelumnya. Nilai hasil akan dikonversi menjadi beberapa nilai biner, untuk kemudian dicari pembobotannya menggunakan teknik Fuzzy. Sehingga setelah menemukan titik tetangga terbaik, akan dilakukan perhitungan bobot untuk menemukan jawaban akhir.



Diasumsikan ada 4 tipe motor yang sudah diketahui datanya, yaitu Motor A,B,C,D
Masing-masing tipe motor memiliki kriteria, yaitu harga, jarak tempuh per liter, cc, dan memiliki hasil jual yaitu Laris / Tidak Laris
Diasumsikan data dari 4 tipe motor tersebut adalah sebagai berikut:

MotorHargaJarak tempuh per literccHasil Jual
Motor A10.000.00035110Laris
Motor B12.000.00045125Laris
Motor C11.000.00040150Tidak Laris
Motor D14.000.00037.5125Tidak Laris

Contoh data awal adalah sebagai berikut:
Untuk kriteria hasil jual:
Nilai Laris dilambangkan dengan angka 1
Nilai Tidak Laris dilambangkan dengan angka 2

contohData = [10000000 35 110; ...
              12000000 45 125; ...
              11000000 40 150; ...
              14000000 37.5 125];

hasilContohData = [1; ...
				   1; ...
				   2; ...
				   2]';

Selanjutnya ada 4 buah motor lagi, yaitu E,F,G,H, yang baru akan diluncurkan, sehingga tidak diketahui hasil jualnya
Maka tentukan data-data ini nantinya akan termasuk dalam kelompok hasil jual Laris / Tidak Laris
Diasumsikan data awalnya adalah sebagai berikut:

MotorHargaJarak tempuh per litercc
Motor E13.000.00045125
Motor F12.000.00047110
Motor G10.500.00043110
Motor H13.500.00035125

Contoh data yang baru adalah sebagai berikut:

dataBaru = [13000000 45 125; ...
            12000000 47 110; ...
            10500000 43 110; ...
            13500000 35 125];



Sebelum masuk kedalam langkah-langkah pembahasan algoritma, ada beberapa konstanta atau parameter yang harus diketahui, yaitu:
* Tentukan parameter k, yaitu banyak jumlah titik tetangga yang diperhitungkan
Karena ada 4 data pada contoh awal, maka nilai K adalah 1 / 2 / 3 / 4
Diasumsikan dalam kasus ini, nilai K adalah 3, brarti hanya 3 titik tetangga terdekat yang diperhitungkan dalam setiap perhitungan

k = 3;

Langkah-langkah penggunaan algoritma ini adalah

* Lakukan perhitungan menggunakan metode Fuzzy k-NN (k-Nearest Neighbors)
Penjelasan tentang fungsi ini akan dijelaskan pada perhitungan dibawah ini (poin 1 – 3)

[hasilData,jarakKeMasing2Hasil] = FuzzyKNN(contohData, hasilContohData, dataBaru, k);

Memasuki perhitungan pada fungsi FuzzyKNN

1. Tentukan faktor skala dalam pembobotan fuzzy
Dalam kasus ini bernilai 2 karena hanya ada 2 nilai hasil, yaitu Laris dan Tidak Laris

m = 2;

2. Lakukan konversi nilai hasil contoh data menjadi 2 nilai biner
Untuk hasil jual Laris, maka akan dikonversi menjadi 1 0
Untuk hasil jual Tidak Laris, maka akan dikonversi menjadi 0 1

maksHasilContohData = max(hasilContohData);
temp = zeros(length(hasilContohData),maksHasilContohData);
for i=1:jumlahContohData
    temp(i,:) = [zeros(1, hasilContohData(i)-1) 1 zeros(1,maksHasilContohData - hasilContohData(i))];
end
hasilContohData = temp;

3. Lakukan perhitungan pada masing-masing data baru (poin 3a – 3g)

for i=1:jumlahDataBaru
. . .

3a. Hitung jarak dari data baru pada masing-masing data contoh
Perhitungan jarak menggunakan rumus Euclidean, yaitu akar dari (jumlah dari (kuadrat dari (dataBaru – contohData)))
Untuk efisiensi, proses akar memang tidak dilakukan agar tidak perlu lagi mengkuadratkan pada proses selanjutnya

jarak = (repmat(dataBaru(i,:), jumlahContohData,1) - contohData).^2;
jarak = sum(jarak,2)';

3b. Lakukan pengurutan jarak dari yang paling dekat ke jarak yang paling jauh

[~, idxTerurut] = sort(jarak);

3c. Contoh data terpilih adalah contoh data dengan jarak yang paling minimal sebanyak parameter k

idxContohDataTerpilih = idxTerurut(1:k);

3d. Lakukan perhitungan bobot menggunakan metode fuzzy
Normalnya, nilai bobot dihitung dengan menggunakan rumus:
bobot = jarak(idxContohDataTerpilih).^(-2/(m-1));
Tetapi karena nilai jarak diatas tidak dilakukan proses akar,
Maka nilai bobotnya dihitung dengan rumus:
bobot = sqrt(jarak(idxContohDataTerpilih)).^(-2/(m-1));
Dengan menghilangkan proses akar dan kuadrat yang terjadi bersamaan,
maka bobot dapat dihitung dengan rumus:
bobot = jarak(idxContohDataTerpilih).^(-1/(m-1));

bobot = jarak(idxContohDataTerpilih).^(-1/(m-1));

3e. Jika terdapat nilai bobot yang mendekati tak terhingga (infinity),
maka nilai bobot ini akan dikembalikan menjadi angka 1

if max(isinf(bobot))
	warning(['Terdapat bobot dengan nilai tak terhingga: ' num2str(i) '. Sehingga nilai bobot dikembalikan menjadi 1.']);
	bobot(isinf(bobot)) = 1;
end

3f. Lakukan perkalian nilai bobot dengan 2 nilai biner hasil konversi dari nilai hasil pada contoh data
Kemudian lakukan normalisasi dengan cara membagi bobot tersebut dengan semua jumlah bobot yang ada

bobotPerMasing2Hasil = bobot * hasilContohData(idxContohDataTerpilih,:) / (sum(bobot)) ;
jarakKeMasing2Hasil(i,:) = bobotPerMasing2Hasil;

3g. Tentukan nilai bobot yang paling tinggi,
Kemudian catat indeks bobot tersebut sebagai jawaban akhir

[~, idxMaks] = max(bobotPerMasing2Hasil');
hasilDataBaru(i) = idxMaks;

4. Lakukan konversi nilai hasil kembali seperti semula
Jika nlai hasil adalah 1, maka termasuk dalam kelompok hasil jual Laris
Jika nlai hasil adalah 2, maka termasuk dalam kelompok hasil jual Tidak Laris

if hasilData(i,1) == 1
	status = 'Laris';
elseif hasilData(i,1) == 2
	status = 'Tidak Laris';
end

Hasil akhir adalah:

Algoritma Fuzzy k-NN (k-Nearest Neighbors)
Contoh: menentukan kelompok hasil jual tipe sepeda motor baru berdasarkan kelompok data yang sudah ada
Diasumsikan ada 4 tipe motor yang sudah diketahui datanya, yaitu Motor A,B,C,D
Masing-masing tipe motor memiliki kriteria, yaitu harga, jarak tempuh per liter, cc, dan memiliki hasil jual yaitu Laris / Tidak Laris
Diasumsikan data dari 4 tipe motor tersebut adalah sebagai berikut:
Motor  , Harga     , Jarak tempuh per liter, cc , hasil jual
Motor A, 10.000.000, 35                    , 110, Laris
Motor B, 12.000.000, 45                    , 125, Laris
Motor C, 11.000.000, 40                    , 150, Tidak Laris
Motor D, 14.000.000, 37.5                  , 125, Tidak Laris


Selanjutnya ada 4 buah motor lagi, yaitu E,F,G,H, yang baru akan diluncurkan, sehingga tidak diketahui hasil jualnya
Maka tentukan data-data ini nantinya akan termasuk dalam kelompok hasil jual Laris / Tidak Laris
Diasumsikan data awalnya adalah sebagai berikut:
Motor  , Harga     , Jarak tempuh per liter, cc
Motor E, 13.000.000, 45                    , 125
Motor G, 12.000.000, 47                    , 110
Motor F, 10.500.000, 43                    , 110
Motor H, 13.500.000, 35                    , 125


Hasil Perhitungan dengan metode Fuzzy k-NN (k-Nearest Neighbors)
Motor  , Harga     , Jarak tempuh per liter, cc , Jarak ke hasil jual Laris, Jarak ke hasil jual Tidak Laris, kesimpulan
Motor E, 13000000  , 45                    , 125, 0.44                     , 0.56                           , Tidak Laris
Motor F, 12000000  , 47                    , 110, 1                        , 0                              , Laris
Motor G, 10500000  , 43                    , 110, 0.53                     , 0.47                           , Laris
Motor H, 13500000  , 35                    , 125, 0.1                      , 0.9                            , Tidak Laris

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 *

4 pemikiran di “Algoritma Fuzzy k-NN (k-Nearest Neighbors)

  • Adi Sunardy

    Hi,

    Saya sedang mengerjakan thesis dan menggunakan algoritma k-NN. Thesis saya tentang indoor positioning menggunakan BLE. Saya menggunakan python untuk komputansi nya. Sebagai pembanding akurasinya, saya hendak menggunakan algoritma fuzzy k-NN.

    Kendala saya adalah, saya belum sepenuhnya memahami secara detail algoritma fuzzy k-NN ini. Jurnal-jurnal dan paper-paper yang saya download belum ada yang memberikan informasi yang saya perlukan.

    Saya mempelajari algoritma fuzzy k-NN pada postingan ini, dan mencoba memahami logika yang disampaikan melalui code Matlab di atas. Namun masih ada beberapa pertanyaan yang masih perlu jawaban.

    Apakah saudara dapat membantu saya? Mungkin bisa masuk hitungan jasa bimbingan skripsi/thesis? Saya hanya butuh bantuan memahami algoritma dan contoh implementasi fuzzy k-nn ini untuk multi class (6 kelas).Berapakah biayanya?

    Thanks.