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

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: