Showing posts with label machine learning. Show all posts
Showing posts with label machine learning. Show all posts
Monday, June 15, 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 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”.