Aplikasi Deteksi Kanker Payudara dengan Jaringan Syaraf Tiruan

By | January 14, 2021
1,770 Views

Sinopsis

Setelah kalian membaca buku belajar machine learning / jaringan syaraf tiruan menggunakan Matlab, tentu ingin sekali mempraktekan algoritma tersebut kedalam dataset yang real/sungguhan.  Pembahasan ini untuk menentukan jenis kanker payudara dengan 9 jenis parameter yang mempunyai rentang nilai 1 sampai dengan 10

https://archive.ics.uci.edu/ml/datasets/Breast+Cancer+Wisconsin+(Original)

  1. Clump Thickness: 1 – 10
  2. Uniformity of Cell Size: 1 – 10
  3. Uniformity of Cell Shape: 1 – 10
  4. Marginal Adhesion: 1 – 10
  5. Single Epithelial Cell Size: 1 – 10
  6. Bare Nuclei: 1 – 10
  7. Bland Chromatin: 1 – 10
  8. Normal Nucleoli: 1 – 10
  9. Mitoses: 1 – 10

Dengan 2 kelas yaitu

  1. nilai 2 for benign
  2. nilai 4 for malignant

Kalian bisa mempelajari terlebih dahulu  buku belajar machine learning / jaringan syaraf tiruan menggunakan Matlab agar lebih paham, karena tulisan ini hanya menampilkan hasil saja. Tidak dibahas cara loading data dan banyak lainnya untuk  mencegah pembahasan yang berulang-ulang. Tapi kalau kalian ingin tahu cara kerjanya/code nya bisa kirim email kesini

Dataset Kanker Payudara

Arsitektur Jaringan

Adapun untuk arsitektur yang digunakan seperti berikut

 

Normalisasi Dataset

Langkah selanjutnya berupa desain dataset yaitu menggunakan fungsi training berupa logsig dengan batasan nilai 0 sampai dengan 1, sehingga dataset diatas perlu dilakukan normalisasi dari skala 1 sampai dengan 10 menjadi 0 sampai dengan 1, sedangkan kelas terdiri dari 0 dan 1. Rumus untuk normalisasi yaitu

menjadi

Hasil Pelatihan

Maka dengan rumus confusion matrix berikut

http://www.softscients.web.id/2019/10/cara-menghitung-confussion-matrix.html

Kode Lengkapnya yaitu

clc;clear all;close all;
%baca dataset
dataset = readtable('dataset utama.csv');
disp(dataset)
data = dataset.Variables;
%ambil paramater input
P = data(:,1:end-1);
%ambil paramater target/kelas
T = data(:,end);
 
%lakukan normalisasi
P_norm = (P-1)/9;
T_norm = T;
T_norm(T_norm==2)=0;
T_norm(T_norm==4)=1;
 
data_norm = [P_norm,T_norm];
disp(array2table(data_norm,'VariableNames',dataset.Properties.VariableNames));
epoch = 10000;
lr = 0.25;
node_hidden = 20;
 
jaringan = latihjaringan(P_norm,T_norm,epoch, node_hidden,lr);
 
prediksi = round(simulasijaringan(jaringan,P_norm));
disp('hasil akhir:')
disp(table(T_norm,prediksi));
 
figure
plot(jaringan.error)
xlabel('epoch','fontsize',16)
ylabel('error','fontsize',16),grid on
title('Error Per Epoch','FontSize',16)
set(legend(['Last error: ' num2str(jaringan.error(end))]),'FontSize',16)

 
 
[akurasi,sensifitas,spesifitas,presisi] = hitungakurasi(T_norm,prediksi)
 
function [akurasi,sensifitas,spesifitas,presisi]=hitungakurasi(t,p)
    t(t==0)=-1;
    t(t==1)=+1;
    
    t = t(:);
    p = p(:);
    data = [t,p];
    
    true_positif = [1,1];
    true_negatif = [-1,-1];
    false_positif = [1,-1];
    false_negatif = [-1,1];
    
    
    %jumlah kondisi negatif yang terprediksi benar
    a = (data==true_negatif);
    a = sum(a(:,1).*a(:,2));
 
    %jumlah kondisi negatif yang terprediksi salah
    b = (data==false_negatif);
    b = sum(b(:,1).*b(:,2));
 
    %jumlah kondisi positif yang terprediksi salah
    c = (data==false_positif);
    c = sum(c(:,1).*c(:,2));
    
    %jumlah kondisi positif yang terprediksi benar
    d = (data==true_positif);
    d = sum(d(:,1).*d(:,2));
 
    akurasi = (a+d)/(a+b+c+d);
    sensifitas = d /(c+d);
    spesifitas = a /(a+b);
    presisi = d /(b+d);
 
end

hasil

akurasi =

    0.9755


sensifitas =

     1


spesifitas =

     0


presisi =

    0.9755

Dengan hasil yang cukup baik, maka model diatas dapat disimpan dengan properties berikut

>> jaringan

jaringan = 

  struct with fields:

             wh: [9×20 double]
             bh: [1×20 double]
           wout: [20×1 double]
           bout: 18.7103
          error: [1×10000 double]
    node_hidden: 20

Keterangan Model

  1. wh : bobot input ke hidden
  2. bh :  bias input ke hidden
  3. wout : bobot hidden ke output
  4. bout : bias hidden ke output
  5. node_hidden : jumlah node pada hidden

Kode diatas menggunakan bahasa pemrograman Matlab, berikut hasil tampilkan aplikasi berbasis GUI