Adaptive Neuro-Fuzzy Inference System (ANFIS)


Adaptive Neuro-Fuzzy Inference System (ANFIS) merupakan jaringan syaraf adaptif yang berbasis pada sistem kesimpulan fuzzy (Fuzzy Inference System). Dengan menggunakan metode pembelajaran hybrid, ANFIS dapat memetakan nilai masukan menuju nilai keluaran berdasarkan pada pengetahuan yang dilatihkan dalam bentuk aturan fuzzy.

Berikut merupakan pemrograman MATLAB untuk mengklasifikasi citra daun ke dalam 4 buah kelas (A, B, C, dan D) menggunakan algoritma ANFIS. Pada contoh ini digunakan 40 citra daun yang terdiri dari 10 citra pada masing-masing kelas. Citra tersebut dibagi menjadi dua bagian yaitu sebanyak 28 citra untuk data pelatihan dan 12 citra untuk data pengujian. Contoh citra daun yang digunakan ditunjukkan pada gambar di bawah ini:

untitled-1

Langkah-langkah pemrogramannya adalah sebagai berikut:
1. Mempersiapkan citra latih untuk proses pelatihan
citra-latih

2. Melakukan pelatihan algoritma ANFIS untuk mengklasifikasikan citra daun. Ciri yang digunakan untuk membedakan antara kelas daun yang satu dengan yang lain adalah ciri morfologi dan ciri tekstur. Ciri morfologi yang digunakan yaitu metric dan eccentricity. Sedangkan ciri tekstur yang digunakan yaitu contrast, correlation, energy, dan homogeneity. Keenam ciri tersebut digunakan sebagai masukan dalam algoritma ANFIS untuk mengklasifikasikan citra daun ke dalam 4 buah kelas. Koding program pelatihan adalah sebagai berikut:

clc;clear;close all;warning off all;
 
image_folder = 'data latih';
filenames = dir(fullfile(image_folder, '*.tif'));
total_images = numel(filenames);

feature = zeros(total_images,6);

for n = 1:total_images
    full_name = fullfile(image_folder, filenames(n).name);
    I = imread(full_name);
    Img = im2bw(I,graythresh(I));
    Img = imcomplement(Img);
    Img = imfill(Img,'holes');
    Img = bwareaopen(Img,1000);
    
    % Ekstraksi Ciri Morfologi
    stats = regionprops(Img,'All');
    area = stats.Area;
    perimeter = stats.Perimeter;
    metric = 4*pi*area/(perimeter^2);
    eccentricity = stats.Eccentricity;

    % Ekstraksi Ciri Tekstur
    GLCM = graycomatrix(I,'Offset',[0 1; -1 1; -1 0; -1 -1]);
    stats = graycoprops(GLCM,{'contrast','correlation','energy','homogeneity'});
    contrast = mean(stats.Contrast);
    correlation = mean(stats.Correlation);
    energy = mean(stats.Energy);
    homogeneity = mean(stats.Homogeneity);

    feature(n,1) = metric;
    feature(n,2) = eccentricity;
    feature(n,3) = contrast;
    feature(n,4) = correlation;
    feature(n,5) = energy;
    feature(n,6) = homogeneity;
end

target = zeros(total_images,1);
target(1:7,:) = 1;
target(8:14,:) = 2;
target(15:21,:) = 3;
target(22:28,:) = 4;

trnData = [feature,target];

numMFs = 2;
mfType = 'gbellmf';
error_goal = 1e-6;
epoch = 20;
trnOpt(1) = epoch;
trnOpt(2) = error_goal;

fismat = genfis1(trnData,numMFs,mfType);
[trnfismat,rmse] = anfis(trnData, fismat, trnOpt);
[x,mf] = plotmf(trnfismat,'input',1);
subplot(2,3,1), plot(x,mf)
xlabel('input 1 (gbellmf)')
[x,mf] = plotmf(trnfismat,'input',2);
subplot(2,3,2), plot(x,mf)
xlabel('input 2 (gbellmf)')
[x,mf] = plotmf(trnfismat,'input',3);
subplot(2,3,3), plot(x,mf)
xlabel('input 3 (gbellmf)')
[x,mf] = plotmf(trnfismat,'input',4);
subplot(2,3,4), plot(x,mf)
xlabel('input 4 (gbellmf)')
[x,mf] = plotmf(trnfismat,'input',5);
subplot(2,3,5), plot(x,mf)
xlabel('input 5 (gbellmf)')
[x,mf] = plotmf(trnfismat,'input',6);
subplot(2,3,6), plot(x,mf)
xlabel('input 6 (gbellmf)')
writefis(trnfismat,'trnfismat')

output = round(evalfis(trnData(:,1:6), trnfismat));

error = numel(find(output~=target));
akurasi_pelatihan = (numel(output)-error)/(numel(output))*100

Pada proses pelatihan tersebut digunakan dua buah membership function pada masing-masing input dengan tipe generalized bell membership function (gbell) yang ditunjukkkan pada gambar berikut:
mf

Hasil keluaran dari proses pelatihan ditunjukkan pada tabel di bawah ini:
hasil-latih

Pada tabel di atas tampak bahwa seluruh citra diklasifikasikan sesuai dengan target kelas yang sebenarnya. Sehingga diperoleh akurasi hasil proses pelatihan adalah sebesar 28/28*100 = 100%

3. Mempersiapkan citra uji untuk proses pengujian
citra-uji

4. Melakukan pengujian algoritma ANFIS menggunakan fuzzy inference system yang dihasilkan dari proses pelatihan. Koding program untuk proses pengujian adalah:

clc;clear;close all;warning off all;
 
trnfismat = readfis('trnfismat');
image_folder = 'data uji';
filenames = dir(fullfile(image_folder, '*.tif'));
total_images = numel(filenames);

feature = zeros(total_images,6);

for n = 1:total_images
    full_name = fullfile(image_folder, filenames(n).name);
    I = imread(full_name);
    Img = im2bw(I,graythresh(I));
    Img = imcomplement(Img);
    Img = imfill(Img,'holes');
    Img = bwareaopen(Img,1000);
    
    % Ekstraksi Ciri Morfologi
    stats = regionprops(Img,'All');
    area = stats.Area;
    perimeter = stats.Perimeter;
    metric = 4*pi*area/(perimeter^2);
    eccentricity = stats.Eccentricity;

    % Ekstraksi Ciri Tekstur
    GLCM = graycomatrix(I,'Offset',[0 1; -1 1; -1 0; -1 -1]);
    stats = graycoprops(GLCM,{'contrast','correlation','energy','homogeneity'});
    contrast = mean(stats.Contrast);
    correlation = mean(stats.Correlation);
    energy = mean(stats.Energy);
    homogeneity = mean(stats.Homogeneity);

    feature(n,1) = metric;
    feature(n,2) = eccentricity;
    feature(n,3) = contrast;
    feature(n,4) = correlation;
    feature(n,5) = energy;
    feature(n,6) = homogeneity;
end

target = zeros(total_images,1);
target(1:3,:) = 1;
target(4:6,:) = 2;
target(7:9,:) = 3;
target(10:12,:) = 4;

testData = [feature,target];
output = round(evalfis(testData(:,1:6), trnfismat));

error = numel(find(output~=target));
akurasi_pengujian = (numel(output)-error)/(numel(output))*100

Hasil yang diperoleh pada proses pengujian ditunjukkan pada tabel berikut:
hasil-uji

Berdasarkan tabel di atas, dari 12 citra yang diujikan, terdapat tiga citra yang diklasifikasikan tidak sesuai dengan target kelas daun sebenarnya. Sehingga akurasi yang dihasilkan pada proses pengujian adalah sebesar 9/12*100 = 75%. Hasil ini menunjukkan bahwa algoritma ANFIS cukup baik digunakan untuk mengklasifikasikan daun berdasarkan ciri morfologi dan ciri tekstur.

Source algoritma ANFIS di atas beserta citra daun dapat diunduh pada laman berikut: link

  1. mas, kalo training anfis menggunakan citra berwarna gimana mas?

  2. Mas Adi, itu nanti outputnya berupa apa mas ? Apa tabel hasil klasifikasinya tercetak di layar ? Thx

  3. Mas Adi, saya udh coba jalankan file percobaan.m nya, tapi yg keluar cuma akurasinya aja.. Tabel hasil klasifikasinya ga ada. Bagaimana cara melihat klasifikasi masing-masingnya cocok atau engga. Thx

  4. Mas Adi, saya sudah training data, hasil akurasinya 90% tapi pas pengujian hasilnya cuma 35%. Itu kenapa begitu ya mas ? Lalu saya punya 5 kelas target di training dan pengujian, tapi pas di jalankan pengujiannya ada feature yg masuk ke kelas 6 padahal saya deklarasikan 5 kelas saja. Solusinya gimana ya mas? Thx

  5. Mas Adi saya mau tanya, saya punya data training sebanyak 281 dan data uji sebanyak 20. Untuk data ujinya apa mesti merupakan bagian dari data training ? Atau data ujinya bisa berbeda dari data training ? Karena jika data uji merupakan bagian data training, hasil pengujiannya 100% tapi kalo data ujinya berbeda dari data training, hasil pengujiannya hanya 40%.

  6. sesuai dengan materi di atas, pengujian menggunakan data training menghasilkan akurasi pelatihan
    pengujian menggunakan data testing (data di luar data training) menghasilkan akurasi pengujian

  7. mas adi untuk citra berwarna segmentasi citranya pake yg mana? mohon bantuannya dengan menyantumkan linknya ya mas. terima kasih

  8. rini jayanti

    Assalamualaikum
    mau tanya kalau untuk sinyal suaranya menggunakan metode anfis gimana ya?

  9. rini jayanti

    mas adi tanya lagi
    parameter apa aja yang diperlukan untuk metode anfis?

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: