news

Tampilkan postingan dengan label machine learning. Tampilkan semua postingan
Tampilkan postingan dengan label machine learning. Tampilkan semua postingan

Senin, 15 Juni 2020

Apa itu Machine Learning Workflow?



Dalam sebuah project machine learning ada tahapan-tahapan yang perlu dilalui sebelum project tersebut bisa diimplementasi di tahap produksi.

Berikut adalah tahapan-tahapan yang dimaksud menurut buku Hands on Machine Learning karya Aurelien Geron:

  1. Exploratory Data Analysis
    Exploratory data analysis atau EDA bertujuan sebagai analisa awal terhadap data dan melihat bagaimana kualitas data.
  2. Data preprocessing and Data CleaningData preprocessing dan cleaning adalah tahap di mana data diolah lebih lanjut sehingga data siap dipakai dalam pengembangan ML
  3. Model selectionDi tahap ini kita mulai memilih model yang akan dipakai serta melakukan optimasi parameter dari model tersebut.
  4. Model EvaluationKita lalu melakukan evaluasi terhadap model dengan melihat performanya terhadap data testing.
  5. Deployment
    Ketika model dievaluasi, model siap untuk dipakai pada tahap produksi
  6. Monitoring
    Model yang telah dipakai dalam tahap produksi masih harus tetap dimonitor untuk menjaga kualitasnya. Pada tahap produksi model bisa saja menemukan data yang tidak dikenali sehingga performa model dapat menurun.

ML and Business Intelligence

Business Intelligence adalah sebuah bidang yang mengumpulkan data, lalu melihat kenapa sesuatu terjadi di masa lalu.

Contohnya di kasus sebuah perusahan produsen coklat. Dari data tahunan yang dikumpulkan, perusahaan tersebut melihat persediaan coklat selalu habis di bulan Februari.

Dari hasil analisis data lampau tersebut diketahui bahwa penjualan coklat meningkat di bulan tersebut karena adanya Hari Valentine. Maka melihat pola di masa lampau tersebut, perusahaan dapat mengambil keputusan di tahun berikutnya untuk meningkatkan produksi coklat agar meraih lebih banyak profit.
Sedikit berbeda dengan machine learning pada ML jenis regresi, kita membuat model dengan data di masa lampau dan kita menggunakan data tersebut untuk memprediksi apa yang akan terjadi di masa mendatang.

Jadi, dapat disimpulkan bahwa BI adalah bidang yang menjelaskan kenapa suatu hal terjadi di masa lampau dan ML adalah bidang yang mencoba memprediksi apa yang akan terjadi di masa mendatang.
Berikut adalah perbedaan antara BI dan ML yang dirangkum oleh Booz Allen Hamilton.
2020043017240251a058491f59c5cb97d4fcbe8dd971c3.png

ML in Analytic

Di industri, bidang analisis dan machine learning hampir selalu bekerja berdampingan. Analis memungkinkan melihat lebih dalam suatu masalah lalu menentukan apakah masalah tersebut bisa diselesaikan dengan machine learning atau tidak.
Setelah masalah diidentifikasi, maka peran seorang machine learning developer adalah mengimplementasi, mulai dari mengumpulkan data, memilih model yang sesuai, melakukan deployment, dan memonitor model tersebut

Cara Adjustment and re-learning Machine Learning Yang telah Kita Buat


Cara Adjustment and re-learning Machine Learning Yang telah Kita Buat Umumnya sebuah model yang di-deploy kinerjanya akan turun seriring waktu. Kenapa?

Karena model akan terus menemui lebih banyak data-data baru seiring waktu. Hal tersebut akan menyebabkan akurasi model menurun.

Misalnya sebuah model untuk memprediksi harga rumah yang dikembangkan dengan data pada tahun 2010. Model yang dilatih pada data pada tahun tersebut akan menghasilkan prediksi yang buruk pada data tahun 2020.
Untuk mengatasi masalah ini, ada 2 teknik dasar untuk menjaga agar model selalu bisa belajar dengan data-data baru. Dua teknik tersebut yaitu manual retraining dan continuous learning.

Manual Retraining

Teknik pertama adalah melakukan ulang proses pelatihan model dari awal. Dimana data-data baru yang ditemui di tahap produksi, akan digabung dengan data lama dan model dilatih ulang dari awal sekali menggunakan data lama dan data baru.
Bayangkan ketika kita harus melatih ulang model dalam jangka waktu mingguan atau bahkan harian. Sesuai yang Anda bayangkan, proses ini akan sangat memakan waktu.
Namun, manual retraining juga memungkinan kita menemukan model-model baru atau atribut-atribut baru yang menghasilkan performa lebih baik.

Continuous Learning

Teknik kedua untuk menjaga model kita up-to-date adalah continuous learning yang menggunakan sistem terotomasi dalam pelatihan ulang model. Alur dari continuous learning yaitu:
  1. Menyimpan data-data baru yang ditemui pada tahap produksi. Contohnya ketika sistem mendapatkan harga emas naik, data harga tersebut akan disimpan di database.
  2. Ketika data-data baru yang dikumpulkan cukup, lakukan pengujian akurasi dari model terhadap data baru.
  3. Jika akurasi model menurun seiring waktu, gunakan data baru, atau kombinasi data lama dan data baru untuk melatih dan men-deploy ulang model.
Sesuai namanya, 3 proses di atas dapat terotomasi sehingga kita tidak perlu melakukannya secara manual

Belajar Deploy & Feedback Machine Learning

Deployment

Sampai saat ini kita telah belajar bagaimana mengembangkan dan melatih sebuah model pada Colaboratory. Tentunya kita ingin agar model yang telah kita latih dapat terintegrasi dengan perangkat lunak lain.


Misalnya kita ingin agar model kita dapat dipakai pada sebuah ponsel untuk memotret lalu mendeteksi penyakit pada tanaman cabai.

Atau kita ingin membuat sebuah situs untuk mendeteksi jenis hewan pada sebuah gambar dan masalah lain yang lebih kompleks.
Jika Anda memiliki kemampuan membuat website atau sebuah mobile app Anda bisa menggunakan TensorFlow serving agar model dapat dipakai pada software yang Anda kembangkan. Tutorial menggunakan TensorFlow serving dapat dikunjungi di tautan berikut.

Feedback

Ketika model Anda telah di-deploy di tahap produksi, sangat penting untuk selalu memonitor kinerja model Anda.

Memonitor kinerja atau performa model dapat dilakukan dengan teknik yang sama saat kita mengembangkannya.

Pada model klasifikasi, hal yang dimonitor adalah akurasinya terhadap data-data baru yang ditemui. Sedangkan pada model regresi, tingkat erornya yang dimonitor.
Kita juga bisa mendapatkan feedback dari sisi pengguna. Contohnya model kita dipakai pada sebuah aplikasi peminjaman uang untuk menentukan apakah seseorang dapat diberikan pinjaman atau tidak.

Dan ternyata, ada beberapa keluhan dari pengguna yang mengatakan pengajuan pinjaman mereka ditolak padahal mereka orang yang kredibel. Hal seperti inilah yang menunjukkan kenapa memonitor dan mengumpulkan feedback sangat penting setelah sebuah model di-deploy di tahap produksi.

Belajar Learning Tahap Modeling (MLP) Dengan Tensorflow

Learning

Tahap awal sebelum kita membangun sebuah jaringan saraf tiruan adalah mem-framing problem. Pada tahap ini kita menentukan apa masalah yang ingin diselesaikan dan bagaimana implementasi dari jaringan saraf dapat menyelesaikan masalah tersebut.


Tentunya machine learning selalu membutuhkan data. Pada tahap awal kita perlu memahami data kita lebih lanjut.

Beberapa hal yang perlu diketahui adalah format dari data, jumlah sampel, apakah dataset merupakan masalah regresi/klasifikasi, dan berapa jumlah label.
Setelah kita memahami masalah, kemudian kita dapat mengembangkan sebuah MLP sebagai sebuah solusi.

Creating good feature and Building the model

Kode program yang akan diajarkan di sini bisa diunduh di tautan berikut ini, untuk membukanya upload berkasnya dari Google Colab.
Pada latihan kali ini kita akan membuat sebuah model untuk mengklasifikasi gambar sebuah kamar dan memprediksi apakah kamar tersebut rapi atau berantakan. Pada akhir latihan Anda akan dapat menguji coba model ini dengan gambar kamar Anda sendiri. Keren, bukan?

Untuk dataset yang kita gunakan memiliki 200 buah sampel untuk data latih. Terdapat 100 sampel gambar ruangan rapi dan 100 sampel gambar ruangan berantakan.

20200430204545d7406b6b0c0a9070a7bc26ddf43ad0cb.png

Hal pertama yang perlu kita lakukan seperti biasa adalah mengimpor semua library yang dibutuhkan.
import tensorflow as tf
from tensorflow.keras.optimizers import RMSprop
from tensorflow.keras.preprocessing.image import ImageDataGenerator
Kemudian pastikan versi TensorFlow yang Anda gunakan adalah versi 2 ke atas.
print(tf.__version__)
20200501012634ceede09f2aef01dcc7f7a09c4d51b64e.png

Untuk mempersiapkan datanya Anda dapat mengetikkan kode berikut pada cell baru.

!wget --no-check-certificate \
https://dicodingacademy.blob.core.windows.net/picodiploma/ml_pemula_academy/messy-vs-clean-room.zip \
-O /tmp/messy_vs_clean_room.zip

Kode di bawah berfungsi untuk mengekstraksi data yang sebelumnya kita unduh. Lalu kita mendefinisikan nama direktori untuk data latih dan data validasi.

# melakukan ekstraksi pada file zip
import zipfile,os
local_zip = '/tmp/messy_vs_clean_room.zip'
zip_ref = zipfile.ZipFile(local_zip, 'r')
zip_ref.extractall('/tmp')
zip_ref.close()

base_dir = '/tmp/images'
train_dir = os.path.join(base_dir, 'train')
validation_dir = os.path.join(base_dir, 'val')

Kita dapat melihat struktur data yang telah kita unduh di bawah. Dapat Anda lihat bahwa pada direktori data latih dan data validasi masing-masing memiliki sub-direktori clean dan messy. Setiap sub-direktori menyimpan gambar yang sesuai dengan nama sub-direktori tersebut.

Jadi, pada sub-direktori ‘clean’ terdapat gambar-gambar ruangan yang rapi dan pada sub-direktori ‘messy’ terdapat gambar-gambar ruangan yang berantakan.

os.listdir('/tmp/images/train')
os.listdir('/tmp/images/val')
20200501012850f800ab1668de63ad424f6f6948a7fd85.png

Hal selanjutnya adalah kita membuat sub direktori untuk setiap kelas pada direktori latih dan direktori validasi. Pembuatan direktori di sini akan dipakai saat menggunakan objek image data generator.

# membuat direktori ruangan rapi pada direktori data training
train_clean_dir = os.path.join(train_dir, 'clean')

# membuat direktori ruangan berantakan pada direktori data training
train_messy_dir = os.path.join(train_dir, 'messy')

# membuat direktori ruangan rapi pada direktori data validasi
validation_clean_dir = os.path.join(validation_dir, 'clean')

# membuat direktori ruangan berantakan pada direktori data validasi
validation_messy_dir = os.path.join(validation_dir, 'messy')
Langkah selanjutnya adalah kita membuat sebuah objek ImageDataGenerator untuk data training dan data testing.

Image data generator adalah sebuah fungsi yang sangat berguna untuk mempersiapkan data latih dan data testing yang akan diberikan ke model. Beberapa kemudahan yang disediakan Image data generator adalah, preprocessing data, pelabelan sampel otomatis, dan augmentasi gambar.

Kode di bawah menunjukkan proses augmentasi gambar pada setiap sampel di dataset. Augmentasi gambar adalah teknik untuk menciptakan data-data baru dari data yang telah ada.

Contoh augmentasi gambar adalah horizontal flip di mana gambar akan dibalikkan secara horizontal. Detail mengenai augmentasi gambar dengan image data generator dapat Anda temui di tautan berikut.

train_datagen = ImageDataGenerator(
rescale=1./255,
rotation_range=20,
horizontal_flip=True,
shear_range = 0.2,
fill_mode = 'nearest')

test_datagen = ImageDataGenerator(
rescale=1./255,
rotation_range=20,
horizontal_flip=True,
shear_range = 0.2,
fill_mode = 'nearest')

Lalu kita dapat menggunakan objek image data generator sebelumnya untuk mempersiapkan data latih yang akan dipelajari oleh model.

train_generator = train_datagen.flow_from_directory(
train_dir, # direktori data latih
target_size=(150, 150), # mengubah resolusi seluruh gambar menjadi 150x150 piksel
batch_size=4,
# karena kita merupakan masalah klasifikasi 2 kelas maka menggunakan class_mode = 'binary'
class_mode='binary')

validation_generator = test_datagen.flow_from_directory(
validation_dir, # direktori data validasi
target_size=(150, 150), # mengubah resolusi seluruh gambar menjadi 150x150 piksel
batch_size=4, # karena kita merupakan masalah klasifikasi 2 kelas maka menggunakan class_mode = 'binary'
class_mode='binary')
20200501013048b6157bc6304a3a5992ad3f597e29807b.png

Setelah data telah siap,

kita bisa membangun arsitektur sebuah CNN. Sebuah CNN pada keras mirip dengan MLP untuk klasifikasi fashion MNIST yang kita bahas sebelumnya.

Perbedaannya hanya pada terdapatnya 2 lapis layer konvolusi dan max pooling. Anda tentu masih ingat bahwa fungsi dari layer konvolusi adalah untuk mengekstraksi atribut pada gambar.

Sedangkan layer max pooling berguna untuk mereduksi resolusi gambar sehingga proses pelatihan MLP lebih cepat.

model = tf.keras.models.Sequential([
tf.keras.layers.Conv2D(32, (3,3), activation='relu', input_shape=(150, 150, 3)),
tf.keras.layers.MaxPooling2D(2, 2),
tf.keras.layers.Conv2D(64, (3,3), activation='relu'),
tf.keras.layers.MaxPooling2D(2,2),
tf.keras.layers.Conv2D(128, (3,3), activation='relu'),
tf.keras.layers.MaxPooling2D(2,2),
tf.keras.layers.Conv2D(128, (3,3), activation='relu'),
tf.keras.layers.MaxPooling2D(2,2),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(512, activation='relu'),
tf.keras.layers.Dense(1, activation='sigmoid')
])

Setelah membuat arsitektur dari CNN, jangan lupa untuk memanggil fungsi compile pada objek model, dan tentukan loss function serta optimizer.

model.compile(loss='binary_crossentropy',
optimizer=tf.optimizers.Adam(),
metrics=['accuracy'])

Setelah menentukan loss function dan optimizer pada CNN, kita dapat melatih model kita menggunakan metode fit.

Dengan menggunakan image data generator, kita tidak perlu memasukkan parameter gambar dan labelnya. Image data generator secara otomatis melabeli sebuah gambar sesuai dengan direktori di mana ia disimpan.

Contohnya sebuah gambar yang terdapat di direktori clean, secara otomatis akan diberi label “clean” oleh image data generator.

model.fit(
train_generator,
steps_per_epoch=25, # berapa batch yang akan dieksekusi pada setiap epoch
epochs=20,
validation_data=validation_generator, # menampilkan akurasi pengujian data validasi
validation_steps=5, # berapa batch yang akan dieksekusi pada setiap epoch
verbose=2)
20200501013234d5757b1a1714ecabe7c2d392013ae39a.png

Terakhir kita dapat langsung melihat hasil dari model yang telah kita buat. Kode di bawah memungkinkan kita untuk secara interaktif memilih sebuah berkas gambar, kemudian melakukan resize gambar dan mengubahnya menjadi larik numpy. Prediksi dari model kita:

import numpy as np
from google.colab import files
from keras.preprocessing import image
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
%matplotlib inline

uploaded = files.upload()

for fn in uploaded.keys():

# predicting images
path = fn
img = image.load_img(path, target_size=(150,150))
imgplot = plt.imshow(img)
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)

images = np.vstack([x])
classes = model.predict(images, batch_size=10)

print(fn)
if classes==0:
print('clean')
else:
print('messy')

Prediksi dari model kita akan ditampilkan seperti di bawah. Keren bukan. Silakan foto kamar Anda sendiri dan lihat hasil prediksi dari model yang telah Anda buat.

20200430204624cfa50482fd05a15f50f51cba8ee865d2.png

Apa itu Keras Library?


Keras adalah API untuk mengembangkan jaringan saraf tiruan. Dengan Keras kita dapat membuat sebuah multi layer perceptron dan convolutional neural network dengan sangat mudah.

Aplikasi dari Keras sangat luas di mana kita dapat membangun jaringan saraf tiruan untuk klasifikasi gambar, pemrosesan bahasa alami, pengenalan suara, dan prediksi time series.

Komponen inti pembangun sebuah jaringan saraf tiruan dalam Keras adalah layer. Sebuah layer pada Keras, sama dengan sebuah layer pada MLP yang memiliki beberapa perseptron.
Pada Keras misalnya, kita ingin melakukan klasifikasi pada dataset fashion MNIST seperti contoh di bawah.

Dataset Fashion MNIST memiliki label 10 kelas yang terdiri dari baju, sepatu, tas dan sebagainya. Dataset ini berguna untuk mengklasifikasikan sebuah objek fashion.
20200430203920cccf9b3cd7bb07034523fc2aa76ef829.png
Dengan Keras, kita dapat membuat sebuah model ML hanya dengan beberapa baris kode seperti di bawah.
20200430223645db4ba4b40cd18a68e3f302826cde7704.png
Mari kita bahas kode di atas satu per satu. Hal yang paling pertama adalah kita perlu mempersiapkan data kemudian membaginya menjadi data latih dan data uji. Data fashion MNIST bisa kita dapatkan dengan mudah dari library datasets yang disediakan Keras.
20200430223654119fce2de6e9d9cc5d2b7f34f199d737.png
Dalam klasifikasi gambar, setiap piksel pada gambar memiliki nilai dari 0 sampai 255. Kita perlu melakukan normalisasi dengan membagi setiap pixel pada gambar dengan 255. Dengan nilai yang telah dinormalisasi, jaringan saraf dapat belajar dengan lebih baik.
20200430223659dfd300812dbd48914ddf1f0a823ec595.png
Pada langkah berikutnya kita mendefinisikan arsitektur dari jaringan saraf yang akan kita latih.
202004302237045fa6c778daf7e9e1e76de9fa3b1624f7.png
Sama dengan yang kita pelajari pada modul sebelumnya, guna membuat sebuah MLP kita hanya perlu mendefinisikan sebuah input layer, hidden layer, dan sebuah output layer.

Untuk membuat sebuah model MLP di Keras kita bisa memanggil fungsi tf.keras.models.Sequential([...]) dan menampungnya pada sebuah variabel.

Model sequential pada keras adalah tumpukan layer-layer, yang sama seperti pada sebuah MLP. 
Berikut kita mendefinisikan 3 layer utama pada model sequential:
  • Input layer : Adalah layer yang memiliki parameter ‘input_shape’. Input_shape sendiri adalah resolusi dari gambar-gambar pada data latih. Dalam hal ini sebuah gambar MNIST memiliki resolusi 28x28 pixel. Sehingga input shape nya adalah (28, 28). Sebuah layer Flatten pada Keras akan berfungsi untuk meratakan input. Meratakan di sini artinya menguba gambar yang merupakan matriks 2 dimensi menjadi larik 1 dimensi. Pada kasus kita, sebuah gambar MNIST yang merupakan matriks 28x 28 elemen akan diubah menjadi larik/array satu dimensi sebesar 784 elemen.
  • Hidden layer : Dense layer pada Keras merupakan layer yang dapat dipakai sebagai hidden layer dan output layer pada sebuah MLP. Parameter unit merupakan jumlah perseptron pada sebuah layer. Masih ingat bukan, activation function adalah fungsi aktivasi yang telah kita pelajari pada modul 5. Kita dapat menggunakan fungsi aktivasi relu (rectified linear unit) atau fungsi aktivasi lain untuk hidden layer kita.
  • Output layer : Ini didefinisikan dengan membuat sebuah Dense layer. Jumlah unit menyesuaikan dengan jumlah label pada dataset. Untuk fungsi aktivasi pada layer output, gunakan fungsi aktivasi Sigmoid ketika hanya terdapat 2 kelas/label pada dataset. Untuk dataset yang memiliki 3 kelas atau lebih, gunakan fungsi aktivasi Softmax. Fungsi aktivasi softmax akan memilih kelas mana yang memiliki probabilitas tertinggi. Untuk data fashion MNIST kita akan menggunakan fungsi aktivasi softmax karena terdapat 10 kelas.
Setelah membuat arsitektur dari MLP, model kita belum bisa melakukan apa-apa. Agar model kita bisa belajar, kita perlu memanggil fungsi compile pada model kita dan menspesifikasikan optimizer dan loss function.

Hal ini sama seperti penjelasan dari propagasi balik pada modul sebelumnya.
Untuk optimizer kita bisa menggunakan Adam. Selanjutnya untuk loss function kita dapat menggunakan sparse categorical entropy pada kasus klasifikasi 3 kelas atau lebih.

Untuk masalah 2 kelas, loss function yang lebih tepat adalah binary cross entropy. Parameter metrics berfungsi untuk menampilkan metrik yang dipilih pada proses pelatihan model.
202004302237187b2abdacf9ae53119c71f3282ee01cb4.png
Setelah membuat arsitektur MLP dan menentukan optimizer serta loss functionnya, kita dapat melatih model kita pada data training. Parameter epoch merupakan jumlah berapa kali sebuah model melakukan propagasi balik.
20200430223724166d990576813fc05c0e4d1c2db92d7e.png
Begitulah bagaimana kita membuat sebuah jaringan saraf dengan Keras. Sangat mudah, bukan? Pada submodul-submodul selanjutnya kita akan belajar menggunakan data yang sedikit lebih kompleks dari Kaggle

Apa Itu Tensorflow?



TensorFlow(TF) adalah sebuah library open source populer untuk komputasi kompleks dan juga cocok untuk pengembangan ML berskala besar. Cara kerja dasar TensorFlow sangat sederhana.


Pertama kita tentukan sebuah komputasi graf untuk diselesaikan seperti gambar di bawah. Selanjutnya TensorFlow akan mengeksekusinya secara efisien dengan kode C++ yang teroptimasi.
202004301951488e27959270ddba1304f1b44355c19a38.png
Kelebihan dari TensorFlow adalah ia mampu membagi graf di atas menjadi beberapa bagian dan menjalankannya secara paralel menggunakan CPU dan GPU.

Dengan kemampuan tersebut, kita dapat melakukan pelatihan sebuah model jaringan saraf yang sangat besar hingga mencakup ratusan server, secara paralel.

Hal ini tidak mengejutkan karena TF dikembangkan oleh tim Google Brain, dan dipakai dalam banyak layanan Google berskala besar. Seperti Google Cloud SpeechGoogle Photos, dan Google Search.
Pada modul ini kita akan belajar menggunakan library Keras yang dibangun di atas backend TensorFlow untuk membuat sebuah image classifier

Apa Itu Convolutional Neural Network?


Salah satu bidang menarik yang muncul dari perkembangan machine learning adalah Computer Vision. Computer Vision adalah bidang yang memberi komputer kemampuan untuk ‘melihat’ seperti manusia.

Salah satu contoh implementasi dari computer vision adalah pada pengenalan wajah, bahkan deteksi penyakit. Dan salah satu bidang yang mulai populer yaitu self driving cars seperti di bawah ini.
20200430190410fbc8a1559d36c869b36d72856dd23576.png

Bagaimana komputer melihat?

Komputer adalah sebuah mesin yang hanya bisa membaca angka. Sebuah gambar dalam komputer adalah matriks yang berisi nilai dari setiap pixel di gambar. Pada gambar hitam putih, gambar merupakan matriks 2 dimensi, dan pada gambar berwarna gambar merupakan matrix 2 kali 3 dimensi di mana, 3 dimensi terakhir adalah jumlah kanal dari gambar berwarna yaitu RGB (red, green, blue). 

202004301904445a9becbca585de3e779b3df734ffd9a6.png

Klasifikasi Gambar

Peran machine learning dalam computer vision adalah dalam klasifikasi gambar. Contohnya, kita punya label yaitu nama beberapa presiden Amerika Serikat. Kita ingin memprediksi siapa presiden di gambar. Pada jaringan saraf seperti di bawah adalah probabilitas dari siapa presiden di dalam foto.
202004301905012e5d11b2ac0b56a244a237d15060193d.png
Untuk mengklasifikasikan siapa presiden dalam gambar dengan benar, model kita harus mampu untuk mengenali ciri-ciri unik yang terdapat pada wajah Lincoln, Washington, Jefferson, dan Obama.
20200430190519e3f7004819bb556b5fc825544f79602b.png
Setiap objek dari gambar memiliki atribut unik. Seperti pada gambar di atas, objek orang memiliki atribut hidung, mata, dan mulut. Pada objek gambar terdapat atribut roda, lampu, dan plat nomor.
Convolutional layer berfungsi untuk mengenali atribut-atribut unik pada sebuah objek.

Convolutional Layer

Sebuah jaringan saraf biasa mengenali gambar berdasarkan piksel-piksel yang terdapat pada gambar.

Teknik yang lebih optimal adalah dengan menggunakan convolutional layer di mana alih alih mengenali objek berdasarkan piksel-piksel, jaringan saraf dapat mengenali objek berdasarkan atribut-atribut yang memiliki lebih banyak informasi.
Convolutional layer membantu jaringan saraf untuk mengenali objek seperti orang berdasarkan atribut-atributnya. Atribut-atribut yang lebih rendah membentuk atribut lebih tinggi contohnya atribut wajah dibentuk dari atribut mata, telinga, dan hidung. Atribut mata dibentuk dari garis, lengkungan dan bintik hitam.
202004301905352425fc2219ac2cf38568dca51c98100c.png

Filter

Convolutional layer dapat mengenali atribut pada objek menggunakan filter. Filter hanyalah sebuah matriks yang berisi angka-angka.

Pada gambar di bawah terdapat 3 buat filter masing-masing merupakan matriks 3x3 dan sebuah objek yaitu gambar berisi huruf X.

Filter yang berada di sebelah kiri digambarkan dapat mengenali garis yang terdapat pada kotak hijau. Setiap filter berbeda dapat mengenali atribut yang berbeda seperti, filter di kanan dapat mengenali atribut objek x yang berada di kotak merah.
2020043019054613382960f9ab53487804209da4423c14.png
Contoh lain dari filter dapat Anda lihat di bawah. Pada sebuah gambar perempuan, aplikasi dari filter yang berbeda menghasilkan gambar yang berbeda.
Kita dapat membedakan seekor kuda dan manusia berdasarkan bentuknya bukan? Nah, dengan filter seperti pada gambar yang paling kanan, kita dapat mendeteksi garis-garis yang bisa menunjukkan apakah seseorang merupakan kuda atau manusia berdasarkan bentuk garisnya.
20200430190558a4987ad87585c076dccb3ce822e0cd4d.png

Proses Konvolusi

Proses konvolusi adalah proses yang mengaplikasikan filter pada gambar. Pada proses konvolusi ada perkalian matriks terhadap filter dan area pada gambar.

Pada ilustrasi di bawah terdapat sebuah gambar, filter, dan hasil dari proses konvolusi terhadap gambar. Animasi selanjutnya menunjukkan bagaimana proses konvolusi pada ilustrasi sebelumnya dikerjakan.
20200430190613594e19c611768972321a6acfb504e085.png
202004301917451751ef57208c03adc179cc0fab983a94.gif
Ketika proses konvolusi selesai, hasil dari konvolusi tersebut dapat dijadikan masukan untuk sebuah MLP.

Max Pooling

Pada sebuah jaringan saraf tiruan, umumnya setelah proses konvolusi pada gambar masukan, akan dilakukan proses pooling.

Pooling adalah proses untuk mengurangi resolusi gambar dengan tetap mempertahankan informasi pada gambar.

Contohnya seperti pada gambar berikut di mana ketika resolusi dikurangi sampai batas tertentu kita masih bisa mendapatkan informasi mengenai objek pada gambar.
20200430190636a467a693b3bab36f0513d9b56e6cf627.png
Salah satu contoh dari pooling adalah max pooling. Pada max pooling, di antara setiap area dengan luas piksel tertentu, akan diambil satu buah piksel dengan nilai tertinggi. Hasilnya akan menjadi gambar baru.

Animasi di bawah menunjukkan contoh max pooling dengan ukuran 2x2 piksel pada gambar berukuran 4x4 piksel. Hasil dari max pooling adalah gambar dengan ukuran 2x2 piksel.
202004301917205057b8caf2e91311f1fde304a0ebd50e.gif
Proses max pooling dipakai karena pada praktiknya, jumlah filter yang digunakan pada proses konvolusi berjumlah banyak. Ketika kita menggunakan 64 filter pada konvolusi makan akan menghasilkan 64 gambar baru. Max pooling membantu mengurangi ukuran dari setiap gambar dari proses konvolusi

Convolutional Neural network

Arsitektur CNN adalah sebuah jaringan saraf yang menggunakan sebuah layar konvolusi dan max pooling. Pada arsitektur CNN di bawah, sebuah gambar masukan dideteksi atribut/fitur nya dengan menggunakan konvolusi 3 filter.

Lalu setelah proses konvolusi akan dilakukan max pooling yang menghasilkan 3 buah gambar hasil konvolusi yang memiliki resolusi lebih kecil. Terakhir, hasil max pooling dapat dimasukkan ke dalam sebuah hidden layer MLP.
20200430190659530366fdaaea8739bc337a84aa554d3d.pngKita juga dapat menggunakan beberapa lapis konvolusi dan max pooling sebelum mulai memasukkannya ke hidden layer sebuah MLP. Cara kerjanya sederhana. Kita bisa melakukan proses konvolusi dan max pooling setelah lapisan max pooling sebelumnya. Pada contoh di bawah terdapat 2 kali proses konvolusi dan max pooling sebelum hasilnya dimasukkan ke dalam hidden layer.
20200430190708902a461c94c542ba9d39b48f5d091c79.png
Dengan beberapa lapis proses konvolusi, makin detail fitur yang dapat dikenali dari gambar.

Contohnya pada proses konvolusi pertama dapat mendeteksi wajah pada dari seorang manusia.

Lalu pada proses konvolusi kedua, wajah hasil konvolusi pertama dapat dideteksi fitur yang lebih detail seperti hidung, mata, dan telinganya. Jika Anda ingin mengetahui lebih detail mengenai CNN, Anda dapat mengunjungi tautan berikut yah.
Selamat!. Sekarang Anda paham cara kerja CNN dan fungsinya dalam deteksi gambar. Di modul berikutnya kita akan praktik mengembangkan sebuah CNN dengan TensorFlow

Apa itu Neural Network di Machine Learning?


Pada modul-modul sebelumnya telah dibahas tentang beberapa model machine learning seperti decision treesupport vector machine, dan sebagainya. Model-model tersebut merupakan pengembangan dari model statistik untuk mencari pola pada data.
Pada modul ini akan dibahas mengenai neural network, sebuah model machine learning yang terinspirasi dari cara kerja otak manusia.

Di modul ini akan dibahas mengenai artificial neural networkmulti layer perceptron, dan convolutional neural network. Setelah mempelajari modul ini Anda akan memahami bagaimana neural network dapat dipakai dalam bidang yang rumit untuk dikerjakan oleh model machine learning biasa, seperti computer vision

Teori Dasar Adding/reducing features dalam Machine Learning


Nah pada submodul ini kita akan membahas lebih lanjut mengenai feature engineering.

Andrew Ng, seorang profesor kecerdasan buatan dari Stanford dan pencetus Google Brain mengatakan bahwa “Menciptakan fitur-fitur yang baik adalah pekerjaan yang sulit, memakan waktu, dan membutuhkan pengetahuan seorang pakar di bidang terkait. Machine learning terapan pada dasarnya adalah rekayasa fitur.”

Berdasarkan pernyataan dari Andrew maka dapat disimpulkan, bahwa tahap rekayasa fitur merupakan salah satu tahapan yang memakan banyak waktu. Jadi, rekayasa fitur itu pastinya penting ya.
Nah, di submodul ini Anda akan dikenalkan dengan beberapa teknik lain dalam rekayasa fitur yang sudah dibahas pada modul 1.

Binning

Binning adalah pengelompokan nilai sesuai dengan batas besaran yang ditentukan. Pada binning, data dikelompokkan dalam tiap ‘bin’ sesuai dengan nilai yang cocok dengan bin tersebut. Bin sederhananya adalah sebuah kategori yang menampung nilai-nilai tertentu.
Ada beberapa jenis binning di mana salah satu contohnya adalah binning jarak. Pada binning jarak, nilai-nilai dari sebuah atribut akan dikategorikan ke dalam jumlah bin tertentu yang memiliki interval sama besar. Pada gambar dibawah dapat dilihat contoh kumpulan nilai yang dibagi menjadi 4 bin8 bin, dan 16 bin.
20200430175945f4cc1fc6bf54a840308a61a945d1ffd6.png
Binning bisa membantu untuk menghindari overfitting.

Namun binning juga mengorbankan informasi yang terkandung dari sebuah atribut sehingga, penggunaanya perlu dilakukan dengan teliti. Di bawah adalah contoh untuk melakukan binning pada dataframe Pandas.
20200430180039851092ea094e1a8c9ad20fa63fe1cbe7.png
Kunjungi tautan berikut untuk membaca binning dan jenis-jenisnya lebih lanjut ya.

Splitting

Memisahkan sebuah atribut menjadi atribut-atribut baru juga merupakan salah satu cara yang berguna. Dengan splitting, kita membuat atribut lebih dipahami sebuah model machine learning.

Contoh kasusnya adalah sebuah atribut dengan judul “ram_hardisk” yang berisi informasi mengenai besar ram dan penyimpanan dari harddisk. Kita dapat memisahkan atribut tersebut menjadi “ram” dan “storage” untuk memudahkan model mendapatkan informasi lebih banyak dari atribut baru.

Interaction feature

Kita juga bisa menciptakan atribut baru dari atribut-atribut yang ada. Contohnya kita memiliki 2 atribut yaitu “penjualan_pena_biru” dan “penjualan_pena_hitam”. Kita bisa membuat atribut baru dari dua atribut sebelumnya yaitu “penjualan_pena” ketika kita hanya membutuhkan informasi tentang penjualan pena semua warna

Mengenal Model Selection dalam Machine Learning


Sebuah model machine learning memiliki parameter yang dapat di tuning. Pada modul 2 dan 3, kamu sudah melihat contoh menggunakan parameter pada sebuah model machine learning. Contohnya ketika kamu memasukkan parameter “n_cluster” pada model K-Means.
202004301732466d6c95f7b7df543d9b49b6605663c731.png
Ketika mengembangkan model K-Means seperti di atas, mengubah parameter - dalam hal ini memilih jumlah n_cluster - merupakan bentuk dari tuning parameter.
Tuning Parameter adalah istilah yang digunakan untuk meningkatkan performa model machine learning. Proses ini mirip dengan proses tweak. Misalnya pada komputer di mana kita mengganti komponen komputer sehingga peranti tersebut memiliki performa lebih tinggi demi kinerja efisien.

Pada model K-means di atas, jumlah cluster yang kurang atau terlalu banyak akan menyebabkan hasil pengklasteran kurang optimal. Tuning parameter dalam hal ini adalah bereksperimen mencari parameter terbaik untuk model K-Means tersebut.
Tujuan melakukan tuning pada model yaitu agar model memiliki tingkat eror yang lebih kecil atau akurasi yang lebih baik.

Sebuah contoh dari tuning parameter adalah pada kasus spam filter, di mana model spam filter yang telah di-tuning akan lebih akurat dalam mendeteksi email spam, dan melakukan lebih sedikit kesalahan dalam memprediksi email spam yang bukan spam.
Berbagai model machine learning dari library SKLearn memiliki parameter-parameter yang bisa kita ubah untuk meningkatkan performa dari sebuah model tersebut.

Contohnya pada decision tree terdapat beberapa parameter seperti di bawah. Kalau Anda tertarik mengetahui berbagai jenis model machine learning dan parameter setiap model tersebut, kunjungi tautan berikut yah.
2020043017315919187a186828fe71570a1bcc95e1e5ac.png
Ada salah satu teknik untuk menguji beberapa parameter sekaligus. Teknik ini disebut dengan Grid Search.

Grid Search

Grid search memungkinkan kita menguji beberapa parameter sekaligus pada sebuah model. Contohnya kita bisa menguji beberapa jumlah cluster untuk sebuah model K-Means dan melihat bagaimana performa model K-Means terhadap nilai K yang berbeda.

Untuk lebih memahami grid search, kita akan mencoba grid search menggunakan SKLearn

Belajar Support Vector Machine Classifier



Untuk memahami bagaimana algoritma support vector machine atau SVM bekerja, bayangkan kita memiliki sebuah kebun binatang mini.

Di kebun binatang tersebut terdapat dua jenis binatang yaitu, ayam hias dan ular. Sebagai seorang ML engineer, kita ingin mengembangkan sebuah model yang mampu membedakan antara ayam dan ular piton agar bisa menempatkan kedua hewan tersebut di kandang yang berbeda.

Kita tentunya tak mau menyatukan ayam dan ular dalam satu kandang yang sama ya.

20200430211407abf877502e0606f62edde8f3e9bdcb14.png
Kita bisa membuat sebuah model klasifikasi yang memisahkan antara kedua kelas tersebut menggunakan Support Vector Machine. Menurut Aurelien Geron dalam buku Hands on Machine Learning, SVM bekerja dengan membuat decision boundary atau sebuah bidang yang mampu memisahkan dua buah kelas. Pada masalah ini decision boundary yang mampu memisahkan kelas ayam dan kelas ular adalah sebuah garis lurus yang dapat dilihat pada gambar.
202004302114162a52be1db49f19aa86d590c75fc76367.png
Lalu, bagaimana SVM membuat sebuah decision boundary tersebut?
Pertama SVM mencari support vector pada setiap kelas. Support vector adalah 2 sampel dari tiap kelas yang memiliki jarak paling dekat. Pada contoh dataset bola basket dan bola kaki di bawah, support vector adalah bola basket dan bola kaki yang memiliki warna biru.
20200430211432f1655cf90c316926434dcf93e74cd45b.png
Setelah support vector ditemukan, SVM menghitung margin. Margin bisa kita anggap sebagai jalan yang memisahkan dua kelas. Margin dibuat berdasarkan support vector dimana, support vector bekerja sebagai batas tepi jalan, atau sering kita kenal sebagai bahu jalan. SVM mencari margin terbesar atau jalan terlebar yang mampu memisahkan kedua kelas.
Pada dataset bola basket dan bola kaki di atas, SVM akan memilih margin di sebelah kanan karena, ‘jalan’ atau margin pada gambar sebelah kanan lebih lebar dari ‘jalan’ di sebelah kiri.
Kembali lagi ke kasus klasifikasi ayam dan ular, sampel ayam dan ular yang berada dalam lingkaran merah adalah support vector. Kemudian kita mencari jalan terlebar dari 2 support vector. Setelah menemukan jalan terlebar, decision boundary lalu digambar berdasarkan jalan tersebut.
202004302114418a9f0636f38334dcfd216f220b238a82.png
Decision boundary adalah garis yang membagi jalan atau margin menjadi 2 bagian yang sama besar. Selamat, sekarang Anda sudah paham bagaimana support vector machine bekerja dalam masalah klasifikasi.

SVM Klasifikasi non Linier

Sebelumnya kita sudah belajar tentang support vector classifier. Support vector classifier bekerja dengan mencari margin terbesar, atau jalan terlebar yang mampu untuk memisahkan 2 buah kelas. Lantas bagaimana jika data yang kita miliki terlihat seperti ini?.
202004302115251ddcb97c8f23e10fa34132c8c798c561.png
Data di atas merupakan data yang tidak bisa dipisahkan secara linier. Untuk data seperti di atas, Support Vector Classifier menggunakan sebuah metode yaitu “kernel trick” sehingga data dapat dipisahkan secara linier. Apa itu trik kernel? Ia adalah sebuah metode untuk mengubah data pada dimensi tertentu ke dalam dimensi yang lebih tinggi agar dapat dipisahkan secara linier.
Animasi berikut dapat membantu kita untuk melihat bagaimana data 2 dimensi - seperti pada gambar sebelumnya- diubah ke dalam ruang 3 dimensi, sehingga data dapat dipisahkan secara linier.
202004302115496388b5a7ef3619c14e247272b38f0a48.gif
SVM adalah support vector classifier yang menggunakan trik kernel untuk memisahkan data non linier. Agar lebih paham bagaimana trik kernel bekerja, lihat contoh berikut.
202004302120524b2e946499ea49ac5e77a0419e2252b5.png
Data di atas hanya memiliki 1 buah atribut atau data 1 dimensi, dan 2 buah kelas yaitu dokter dan polisi. Data di atas bukan data linier karena kita tak dapat menggambar satu garis lurus untuk memisahkan 2 kelas.
Bagaimana cara kita bisa menggambar garis lurus yang bisa memisahkan 2 kelas tersebut?. Betul, kita akan menggunakan trik kernel untuk mengubah data tersebut ke dalam dimensi yang lebih tinggi seperti ke dalam bidang 2 dimensi.
20200430212059287c539aa14c5b64cb588d3744b5cc63.png
Ketika data sudah diubah ke dalam bidang 2 dimensi, sebuah garis lurus bisa digambar untuk memisahkan 2 kelas. Trik kernel menggunakan fungsi matematis yang bisa mengubah data dengan dimensi tertentu, ke dimensi yang lebih tinggi sehingga kelas-kelas pada data dapat dipisah secara linier.
Ada beberapa kernel yang populer yaitu:
  • Linear
  • Polinomial
  • RBF
  • Sigmoid
Tertarik mengetahui tentang fungsi matematis di balik kernel? Kunjungi tautan berikut yah.

SVM untuk klasifikasi multi kelas

SVM sejatinya merupakan binary classifier atau model untuk klasifikasi 2 kelas. Namun, SVM juga dapat dipakai untuk klasifikasi multi-kelas menggunakan suatu teknik yaitu “One-vs-rest” yang akan dibahas pada paragraf selanjutnya.
Pada masalah klasifikasi multi-kelas, SVM melakukan klasifikasi biner untuk masing-masing kelas. Misalnya, jika ada 3 buah kelas: donat, ayam, dan burger. SVM akan melakukan 3 kali klasifikasi. Pertama, membangun pemisah antara kelas donat, dan kelas bukan donat.
2020043021222079d9cede7dc7887943d66af77fe4ea86.png
Kemudian membangun pemisah antara kelas ayam dan kelas bukan ayam, lalu pemisah antara kelas burger dan bukan kelas burger. Teknik inilah yang disebut dengan “One-vs-Rest”.