Senin, 11 November 2019

Deteksi Jenis Kanker Payudara dengan Neural Network


Kasus yang akan kita bahas kali ini yaitu 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

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

Tidak ada komentar: