Klasifikasi Sell Darah Penyakit Malaria Menggunakan Artificial Neural Network “PART 1”

Original article was published by Yasril Imam on Artificial Intelligence on Medium


Klasifikasi Sell Darah Penyakit Malaria Menggunakan Artificial Neural Network “PART 1”

Hello teman-teman Data Scientist! 🙂

Apa sih Artificial Neural Network itu ?

Artificial Neural Network merupakan cabang ilmu multi disiplin yang meniru cara kerja otak manusia. Salah satu struktur yang ditiru adalah bentuk neuronnya (sel saraf). Jaringan saraf tiruan ANN dapat menyelesaikan persoalan rumit/tidak mungkin jika diselesaikan dengan menggunakan komputasi kovensional.

Algoritma ANN lahir dari gagasan seorang psikolog Warren McCulloch dan Walter Pitts pada 1943 yang menjelaskan cara kerja jaringan syaraf dengan perangkat jaringan elektronik.

Secara sederhana, dapat digambarkan arsitektur ANN adalah sebagai berikut

Ilustrasi Arsitektur ANN

Arsitektur Artificial Neural Network

Ilustrasi pada arsitektur di atas bahwa jaringan saraf tiruan (ANN) terdiri atas kumpulan grup saraf yang tersusun dalam lapisan sebagai berikut

  1. Lapisan Input (Input Layer) berfungsi sebagai penghubung jaringan ke dunia luar (sumber data). Saraf-saraf ini tidak melakukan apapun pada data, hanya meneruskan data ini kelapisan berikutnya.
  2. Lapisan Tersembunyi (Hidden Layer). Suatu jaringan dapat memiliki lebih dari satu hidden layer atau bahkan tidak bisa punya sama sekali. Jika jaringan memiliki beberapa lapisan tersembunyi, maka lapisan tersembunyi paling bawah yang menerima dari input dari input layer.
  3. Lapisan Output (Output Layer). Prinsip kerja pada lapisan ini sama dengan prinsip kerja pada hidden layer dan ini juga digunakan fungsi sigmoid. Tetapi keluaran dari lapisan ini sudah dianggap dari keluaran proses.

Implementasi ANN Pada Datasets Sell Darah Penyakit Malaria

Pada soal kali ini anda diminta untuk membuat model ANN untuk melakukan klasifikasi dari dataset gambar sell darah dengan kasus penyakit Malaria. dataset: https://ceb.nlm.nih.gov/proj/malaria/cell_images.zip. Dataset berikut merupakan kumpulan gambar sel darah yang sudah disegmentasi berjumlah 27,558 gambar cell, dimana label yang dimiliki ada 2 jenis yaitu sel darah yang terinfeksi sel parasit (Parasitized), dan sel darah tidak terinfeksi parasit (Uninfected)

Unduh Datasets

!wget --no-check-certificate \
https://ceb.nlm.nih.gov/proj/malaria/cell_images.zip \
-O /content/cell_images.zip

Ektraksi Datasets dan memastikan format gambar

import os
import zipfile

local_zip = '/content/cell_images.zip'
zip_ref = zipfile.ZipFile(local_zip, 'r')
zip_ref.extractall('/content/')
zip_ref.close()
base_dataset = "/content/cell_images"
class_dir = ['Parasitized','Uninfected']
for class_item in class_dir:
cur_dir = base_dataset+"/"+class_item
dataset = os.listdir(cur_dir)
for item in dataset:
if not item.endswith(".png"):
os.remove(os.path.join(cur_dir, item))

Sebelum melakukan split data terlebih dahulu memastikan isi folder hanya berupa gambar berformat png

Split data dan membentuk directory struktur

import os
import shutil

Parasitized_original = "/content/cell_images/Parasitized"
Parasitized_train = "/content/model_cell_images/train/Parasitized"
Parasitized_validation = "/content/model_cell_images/validation/Parasitized"

files = os.listdir(Parasitized_original)

# memindahkan 70% file
for file in files[0:int(len(files) * .7)]:
new_path = shutil.move(f"{Parasitized_original}/{file}", Parasitized_train)
files2 = os.listdir(Parasitized_original)

# memmindahkan sisa(seluruh file)
for file in files2:
new_path = shutil.move(f"{Parasitized_original}/{file}", Parasitized_validation)
Uninfected_original = "/content/cell_images/Uninfected"
Uninfected_train = "/content/model_cell_images/train/Uninfected"
Uninfected_validation = "/content/model_cell_images/validation/Uninfected"

filesUn = os.listdir(Uninfected_original)

# memindahkan 70% file
for file in filesUn[0:int(len(filesUn) * .7)]:
new_path = shutil.move(f"{Uninfected_original}/{file}", Uninfected_train)
files2Un = os.listdir(Uninfected_original)

# memmindahkan sisa(seluruh file)
for file in files2Un:
new_path = shutil.move(f"{Uninfected_original}/{file}", Uninfected_validation)
file_train_Para = os.listdir(Parasitized_train)
file_Val_Para = os.listdir(Parasitized_validation)
file_train_Un = os.listdir(Uninfected_train)
file_Val_Un = os.listdir(Uninfected_validation)

print(file_train_Para[0:int(len(file_train_Para) * .001)])
print("data Parasitized train : " + str(len(file_train_Para)))
print("data Parasitized validation : " + str(len(file_Val_Para)))
print("data Uninfected train : " + str(len(file_train_Un)))
print("data Uninfected validation : " + str(len(file_Val_Un)))

Fungsi untuk mendapatkan jumlah train gambar

train_len_func = lambda x: int(70/100*len(x))

Folder baru untuk training dan validasi path untuk data train dan data validation

base_dir = ‘model_cell_images’

Hasil dari pemindahan sehingga membentuk directory struktur berikut

model_cell_images/training/Parasitized/*file gambar training parasit

model_cell_images/training/Uninfected/*file gambar training uninfected

model_cell_images/validation/Parasitized/*file gambar validation parasit

model_cell_images/validation/Uninfected/*file gambar validation uninfected

Hasil Print data train dan validation dari Parasitized dan Uninfected

Hasil Print

Visuliasasi Parasitized dan Uninfected

import matplotlib.pyplot as plt
import matplotlib.image as mping

Parasitized_dir=os.path.join('/content/model_cell_images/train/Parasitized')
Uninfected_dir=os.path.join('/content/model_cell_images/train/Uninfected')

Parasitized_image = os.listdir(Parasitized_dir)
Uninfected_image = os.listdir(Uninfected_dir)

fname1 = [os.path.join(Parasitized_dir,fname)
for fname in Parasitized_image[:4]]

fname2 = [os.path.join(Uninfected_dir,fname)
for fname in Uninfected_image[:4]]

ncolu = 4
nrow = 2
fig = plt.gcf()
fig.set_size_inches(ncolu*4,nrow*4)
for i,fname in enumerate(fname1):
sp = plt.subplot(2,4,i+1)
sp.axis('off')
img = mping.imread(fname)
plt.title('Parasitized')
plt.imshow(img)
plt.show()

ncolu = 4
nrow = 2
fig = plt.gcf()
fig.set_size_inches(ncolu*4,nrow*4)
for i,fname in enumerate(fname2):
sp = plt.subplot(2,4,i+1)
sp.axis('off')
img = mping.imread(fname)
plt.title('Uninfected')
plt.imshow(img)

plt.show()
Visualisasi

Di lanjutkan di Part 2 ya teman-teman sambil menunggu tutorial Youtube nya jadi okeee 🙂

Baris kode diatas dapat anda temukan di github saya. https://github.com/yasrilimam98

Lebih jelas lagi bisa langsung kunjungi Youtube Channel saya

https://www.youtube.com/channel/UCpAIJbuXwvwQf6F4h7fLQaQ