Machine Learning Workflow
Machine Learning Workflow
Machine Learning (ML), menurut Arthur Samuel, seorang ilmuwan komputer yang
mempelopori kecerdasan buatan, adalah sebuah bidang yang memberi komputer
kemampuan untuk belajar tanpa diprogram secara eksplisit
Apa contoh sederhana dari Machine Learning? Filter spam pada layanan email,
contohnya. Saat kita menandai satu email sebagai spam, maka program akan
mempelajari anatomi email tersebut untuk mengantisipasi email-email masuk
berikutnya spam atau bukan. Jika mirip, sebuah email baru akan masuk kategori spam,
dan sebaliknya.
Uniknya, Machine Learning bukanlah hal yang baru. Filter email spam tersebut telah
ada sejak tahun 1990-an saat internet boom. Alhasil, hidup jutaan orang pengguna
email, jadi lebih mudah. Kita jadi tak perlu sering menandai sebuah email jika itu adalah
spam.
Setelah itu mulai muncul ratusan implementasi dari ML yang sekarang kita gunakan
sehari-hari saat ini. Merentang dari rekomendasi video di Youtube, hingga kontrol suara
seperti pada Google Assistant. Yup, itu semua adalah bentuk Machine Learning.
Selain Machine Learning, Anda juga pasti pernah mendengar yang namanya artificial
intelligence atau kecerdasan buatan sering dikaitkan dengan machine learning. Lalu,
apa hubungan antara AI dan ML?.
Machine learning adalah sebuah cabang dari AI. Kecerdasan buatan memiliki
pengertian yang sangat luas, umumnya memiliki arti bagaimana komputer bisa memiliki
kecerdasan seperti manusia. Sedangkan ML memiliki arti lebih spesifik yaitu
menggunakan metode statistika untuk membuat komputer dapat mempelajari pola pada
data. Jadi, ketika Anda ditanya tentang hubungan AI dan ML di kemudian hari, Anda
bisa menjawabnya seperti itu ya.
Mengapa Machine Learning?
Bayangkan jika kita bertugas mengembangkan sebuah aplikasi filter spam dengan
pemrograman tradisional. Seperti inilah langkah-langkah konvensionalnya:
1. Pertama kita akan mendefinisikan bagaimana sebuah email termasuk kategori spam
atau tidak. Misalnya kita mengidentifikasi bahwa pada email spam umumnya terdapat
kata-kata seperti “gratis”, “kaya”, “instan”, dan “murah”.
2. Kita kemudian menulis algoritma untuk setiap pola yang kita temukan pada email spam.
Program pun akan menandai sebuah email spam jika menemui pola terkait.
3. Terakhir kita akan mengulangi langkah 1 dan 2 sampai program kita cukup baik untuk
diluncurkan.
Karena kita menulis program menggunakan cara tradisional, hasilnya tentu daftar
panjang berisi aturan-aturan rumit yang sulit maintain.
Supervised Learning
Pada supervised learning, dataset yang digunakan memiliki label. Label adalah tag atau
pengenal dari sebuah data. Misalnya sebuah buah memiliki atribut berwarna hijau, berat
lebih dari 500 gram, kulitnya keras, berduri, memiliki bau yang menyengat, dan daging
buahnya manis. Buah yang memiliki karakteristik seperti yang disebutkan dikenali
sebagai durian, maka label dari atribut tersebut adalah durian. Klasifikasi email spam
adalah contoh dari supervised learning.
Unsupervised Learning
Pada unsupervised learning, dataset yang digunakan tidak memiliki label.
Model unsupervised melakukan belajar sendiri untuk melabeli atau mengelompokkan
data. Contoh kasus unsupervised adalah dari data 100 pengunjung sebuah website,
model akan belajar sendiri untuk mengelompokkan pengunjung. Mungkin berdasarkan
waktu kunjungan, lama kunjungan, jumlah klik, dan sebagainya.
Semi Supervised Learning
Semi Supervised merupakan gabungan dari supervised learning dan unsupervised
learning. Pada model semi supervised, dataset untuk pelatihan sebagian memiliki label
dan sebagian tidak. Implementasi dari model semi supervised yang sering kita gunakan
misalnya pada Google Photos. Pada Google Photos kita bisa memberi tag untuk setiap
orang yang terdapat pada sebuah foto. Alhasil, ketika kita mengunggah foto baru
dengan wajah orang yang sudah kita beri tag sebelumnya, Google Photos akan secara
otomatis mengenali orang tersebut. Salah satu contoh dari model semi supervised
adalah Deep Belief Network (DBN).
Reinforcement Learning
Reinforcement Learning adalah model yang belajar menggunakan
sistem reward dan penalties. Model belajar agar terus mendapatkan reward dan
menghindari penalties. Alpha Go adalah contoh terkenal dari reinforcement learning.
Alpha Go adalah sebuah program yang dikembangkan Google DeepMind untuk
memainkan permainan Go, sebuah permainan papan yang berasal dari Cina. Alpha Go
mempelajari setiap langkah dalam jutaan permainan go untuk terus mendapatkan
reward yaitu memenangkan sebuah permainan. Alpha Go menjadi terkenal setelah
menjadi program komputer pertama yang berhasil mengalahkan pemain profesional.
Data Processing
Pada materi sebelumnya kita telah belajar tentang pengenalan Machine Learning (ML).
Namun, harus dimulai dari manakah jika kita ingin memulai proyek ML? Data
processing adalah tahap paling awal dalam setiap proyek ML. Pada tahap ini data akan
diambil dari sumber tertentu, dimasukkan pada suatu environment, dan diproses agar
bisa diolah oleh model machine learning.
Machine learning sama seperti mengajari seorang anak kecil. Ketika mengajari anak
kecil membedakan antara buah apel dan buah jeruk, kita tinggal memperlihatkan
buahnya dan memberi tahu mana apel dan mana jeruk. Namun demikian, komputer
saat ini belum secanggih itu sehingga kita perlu mempersiapkan data dengan data
processing agar bisa dimengerti komputer.
Salah satu library yang paling populer untuk pengolahan data dalam machine learning
adalah Pandas Library. Pandas Library adalah salah satu library yang wajib Anda
kuasai dalam bidang machine learning.
Pandas Library
Pandas adalah sebuah library open source yang dipakai untuk menganalisis dan
memanipulasi data. Pandas dibangun menggunakan bahasa pemrograman Python
yang menawarkan struktur data dan operasi untuk manipulasi tabel numerik dan time
series. Tabel numerik adalah tabel yang berisi bilangan numerik, dan Tabel time series
adalah tabel yang berubah seiring waktu, misalnya tabel yang memuat perubahan nilai
pasar saham untuk setiap menitnya.
Berbagai jenis data yang umum dipakai dalam ML seperti CSV dan SQL dapat diubah
menjadi dataframe pandas. Dataframe adalah sebuah tabel yang terdiri dari kolom dan
baris dengan banyak tipe data di dalamnya. Pandas terintegrasi dengan library machine
learning yang populer seperti Scikit Learn (SKLearn) dan Numpy.
Pandas mendukung banyak jenis data yang dapat dipakai dalam sebuah project
machine learning. Berikut adalah beberapa contoh data yang dapat diolah dengan
pandas.
CSV
CSV adalah sebuah format data di mana elemen dari setiap baris dipisahkan dengan
koma. CSV sendiri adalah singkatan dari Comma Separated Value.
SQL
Standard Query Language adalah sebuah data yang berasal dari sebuah relational
database. Format data ini berisi sebuah tabel yang memiliki format data seperti integer,
string, float, dan biner.
EXCEL
Excel adalah berkas yang didapat dari spreadsheet seperti Microsoft Excel atau Google
Spreadsheet. File Excel biasanya memuat data numerik.
SPSS
SPPS atau Statistical Package for the Social Science adalah sebuah berkas dari
perangkat lunak yang biasa dipakai untuk statistik dan pengolahan data. File spss
disimpan dalam dan memiliki ekstensi file .sav.
JSON
JSON atau Javascript Object Notation adalah salah satu format data yang
menggunakan sistem Key - Value di mana sebuah nilai disimpan dengan key tertentu
untuk memudahkan mencari data.
Pada kelas ini kita hanya akan menggunakan data berjenis csv, karena data tipe ini
mudah didapat di situs penyedia data Machine Learning, contohnya seperti Kaggle.
Google Colab
Google Colaboratory atau sering juga disebut “Colab” adalah sebuah tools dari Google
yang dibuat untuk keperluan mengolah data, belajar, dan bereksperimen khususnya
dalam bidang Machine Learning. Colab berjalan sepenuhnya pada Cloud dengan
memanfaatkan media penyimpanan Google Drive.
Agar dapat mengerjakan latihan-latihan pada kelas ini, pastikan Anda memahami
bagaimana dasar-dasar menggunakan Colab. Untuk mengetahui lebih lanjut tentang
Colab, Anda dapat mengunjungi tautan berikut.
Setelah sebelumnya kita mengenal library Pandas, sekarang kita akan belajar
menggunakan library tersebut.
1. import pandas as pd
Colab memiliki direktori yang menyimpan berkas-berkas umum yang dapat dipakai
untuk berbagai keperluan. Berkas-berkas bawaan tersebut disimpan dalam sebuah
direktori bernama ‘sample_data’.
Untungnya, notebook pada Colab kita memiliki berkas csv yang dapat kita pakai untuk
mencoba library pandas. Anda juga bisa melihat beberapa berkas bawaan yang
disediakan Colab dengan menggunakan library os.
1. import os
2. os.listdir('sample_data')
1. df = pd.read_csv('sample_data/california_housing_train.csv')
2. df.head()
Jika keluaran dari cell seperti di bawah, maka selamat, Anda berhasil melakukan
konversi.
Data Cleaning
Sebuah model Machine Learning tidak mampu untuk langsung / seketika mengolah
data yang kita temukan dari berbagai sumber. Ada istilah Garbage In - Garbage
Out yang berarti hasil dari machine learning akan buruk jika input yang Anda masukkan
juga buruk. Tidak seluruh data yang kita dapat dari berbagai sumber siap untuk
langsung diberikan ke sebuah model machine learning. Perolehan data memiliki
banyak kekurangan, sehingga perlu Anda olah terlebih dahulu.
Berikut adalah beberapa hal yang umum yang harus diperhatikan dalam proses data
cleaning:
1. Konsistensi Format
Sebuah variabel mungkin tidak memiliki format yang konsisten seperti penulisan tanggal
10-Okt-2020 versus 10/10/20. Format jam yang berbeda seperti 17.10 versus 5.10 pm.
Penulisan uang seperti 17000 versus Rp 17.000. Data dengan format berbeda tidak
akan bisa diolah oleh model machine learning. Solusinya, format data harus konsisten.
2. Skala Data
Jika sebuah variabel memiliki jangka dari 1 sampai 100, pastikan tidak ada data yang
lebih dari 100. Untuk data numerik, jika sebuah variabel merupakan bilangan positif,
maka pastikan tidak ada bilangan negatif.
3. Duplikasi data
Data yang memiliki duplikat akan mempengaruhi model machine learning, apalagi data
yang duplikat memiliki jumlah yang besar. Untuk itu kita harus memastikan tidak ada
data yang terduplikasi.
4. Missing Value
Missing value terjadi ketika data dari sebuah record tidak lengkap. Missing value sangat
mempengaruhi performa model machine learning. Ada dua opsi untuk mengatasi
missing value, yaitu menghilangkan data missing value atau mengganti nilai yang hilang
dengan nilai lain, seperti rata-rata dari kolom tersebut atau nilai yang paling sering
muncul.
5. Skewness
Skewness adalah kondisi di mana dataset cenderung memiliki distribusi data yang tidak
seimbang. Skewness akan mempengaruhi data dengan menciptakan bias terhadap
model. Apa itu bias? Sebuah model cenderung memprediksi sesuatu karena ia lebih
sering mempelajari hal tersebut. Misalkan ada sebuah model untuk pengenalan buah di
mana jumlah jeruk 92 buah dan apel 8 buah. Distribusi yang tidak imbang ini akan
mengakibatkan model lebih cenderung memprediksi jeruk daripada apel.
Cara paling simpel untuk mengatasi skewness adalah dengan menyamakan proporsi
kelas mayoritas dengan kelas minoritas. Untuk teknik lebih lanjut dalam mengatasi
skewness atau imbalance data, Anda bisa membacanya di tautan ini.
Data Preparation
Setelah dataset dibersihkan masih ada beberapa tahap yang perlu dilakukan agar
dataset benar-benar siap untuk diproses oleh model machine learning.
Umumnya beberapa model machine learning tidak dapat mengolah data kategorik,
sehingga kita perlu melakukan konversi data kategorik menjadi data numerik. Data
kategorik adalah data yang berupa kategori dan berjenis string. Contoh data kategorik
adalah sebuah kolom pada dataset yang berisi jenis binatang seperti anjing, kucing,
dan harimau. Contoh lain dari data kategorik adalah merek mobil seperti Ford, Honda,
Toyota, dan BMW.
Outlier Removal
Dalam statistik, outlier adalah sebuah nilai yang jauh berbeda dari kumpulan nilai
lainnya dan dapat mengacaukan hasil dari sebuah analisis statistik. Outlier dapat
disebabkan kesalahan dalam pengumpulan data atau nilai tersebut benar ada dan
memang unik dari kumpulan nilai lainnya.
Dapat dilihat dengan jelas bahwa terdapat satu sampel yang jauh berbeda dengan
sampel-sampel lainnya. Setelah mengetahui bahwa di data kita terdapat outlier, kita
dapat mencari lalu menghapus sampel tersebut dari dataset.
Normalization
Normalization adalah salah satu teknik yang dipakai dalam data preparation. Tujuan
dari normalisasi adalah mengubah nilai-nilai dari sebuah fitur ke dalam skala yang
sama. Normalization memungkinkan kenaikan performa dan stabilitas dari sebuah
model machine learning.
Contoh dari normalization adalah ketika kita memiliki dataset seperti di atas yang
memiliki fitur umur dengan skala 23 sampai 45 tahun, dan fitur penghasilan dengan
skala 4.000.000 sampai 35.000.000. Di sini kita melihat bahwa fitur penghasilan sekitar
satu juta kali lebih besar dari fitur umur dan menunjukkan kedua fitur ini berada pada
skala yang sangat jauh berbeda.
Ketika membangun model seperti regresi linear, fitur penghasilan akan sangat
mempengaruhi prediksi dari model karena nilainya yang jauh lebih besar daripada
umur. Walaupun, tidak berarti fitur tersebut jauh lebih penting dari fitur umur.
Pada cell selanjutnya kita buat object scaler dan panggil fungsi fit() pada data. Fungsi fit
adalah fungsi untuk menghitung nilai minimum dan maksimum pada tiap kolom.
1. scaler = MinMaxScaler()
2. scaler.fit(data)
Terakhir kita panggil fungsi transform yang akan mengaplikasikan scaler pada data.
1. print(scaler.transform(data))
Setiap nilai dari kolom gaji dan umur telah dipetakan pada skala yang sama seperti di
bawah ini.
Untuk informasi lebih detail tentang Min Max Scaler, silakan Anda
kunjungi tautan berikut.
Standardization
Standardization adalah proses untuk konversi nilai-nilai dari suatu fitur sehingga nilai-
nilai tersebut memiliki skala yang sama. Z score adalah metode paling populer untuk
standardisasi di mana setiap nilai pada sebuah atribut numerik akan dikurangi dengan
rata-rata dan dibagi dengan standar deviasi dari seluruh nilai pada sebuah kolom
atribut.
Fungsi standarisasi sama dengan normalization. Keduanya berfungsi menyamakan
skala nilai dari tiap atribut pada data. SKLearn menyediakan library untuk
mengaplikasikan standard scaler pada data.
Selanjutnya kita buat object scaler dan panggil fungsi fit dari scaler pada data. Fungsi fit
memiliki fungsi untuk menghitung rata-rata dan deviasi standar dari setiap kolom atribut
untuk kemudian dipakai pada fungsi transform.
1. scaler = preprocessing.StandardScaler().fit(data)
Terakhir, kita panggil fungsi transform untuk mengaplikasikan standard scaler pada
data. Untuk melihat hasil dari standard scaler kita tinggal memanggil objek scaler yang
telah kita buat sebelumnya. Kodenya sebagai berikut.
1. data = scaler.transform(data)
2. data
1. RDBMS
Dalam model relasional, sebuah database terdiri dari banyak tabel. Sebuah tabel
dibentuk dari kolom dan baris yang memuat nilai tertentu. Konsep Relational
Database Management System (RDBMS) sendiri merupakan sistem yang
mendukung adanya hubungan atau relasi antar tabel pada suatu database.
Setiap tabel dihubungkan dengan tabel lainnya dengan menggunakan primary
key dan foreign key. Saat ini sudah banyak jenis database yang menerapkan
model RDBMS. Sebut saja MySQL, PostgreSQL, dan Microsoft SQL Server.
2. NoSQL
Sesuai dengan namanya NoSQL adalah jenis basis data yang tidak
menggunakan bahasa SQL dalam manipulasi datanya. Dalam penyimpanan
datanya, NoSQL memiliki beberapa teknik penyimpanan yaitu:
Dokumen : menghubungkan setiap kunci dengan struktur data kompleks yang disebut
dokumen.
Graf : menyimpan informasi tentang jaringan data, seperti koneksi sosial.
Nilai-kunci : adalah database NoSQL paling sederhana di mana setiap elemen dalam
database disimpan sebagai nilai yang diasosiasikan dengan sebuah kunci.
Kolom : menyimpan data yang memiliki volume besar, dimana setiap elemen data
disimpan pada kolom bukan pada baris.
4. Spark
Apache Spark adalah perangkat lunak untuk pemrosesan dan analisis data
berskala besar. Spark dapat digunakan dalam proses ETL (Extract Load
Transform), data streaming, perhitungan grafik, SQL, dan machine learning.
Untuk machine learning, Spark menyediakan MLlib yang berisi implementasi
model machine learning seperti klasifikasi, regresi, pengklasteran, penurunan
dimensi, dan pemfilteran kolaboratif.
5. Big Query
BigQuery adalah data warehouse berbasis cloud untuk perusahaan yang
menawarkan penyimpanan data berbasis SQL dan analisis data berukuran
besar. Karena berbasis cloud dan tidak ada infrastruktur yang perlu dikelola,
pengguna dapat berfokus pada pengolahan data tanpa memerlukan
seorang administrator database. Di bawah ini adalah tampilan antarmuka
dari Google BigQuery.
Sebagai ML Engineer masa depan, kita harus mampu mengoperasikan berbagai jenis
data storage dan data warehouse karena perusahaan tempat kita ingin bekerja sebagai
ML Engineer nanti, tidak selalu menggunakan data warehouse atau data storage yang
sama.
Datasets
Dataset yang telah diproses kemudian siap kita proses dengan machine learning. Satu-
satunya cara untuk mengetahui apakah model machine learning kita bagus atau tidak
adalah dengan mengujinya pada kasus yang belum pernah ia hadapi. Kita bisa
membuat sebuah model dan langsung mengujinya pada tahap produksi dan memonitor
kualitasnya. Hal ini masuk akal, tapi jika ternyata model yang kita kembangkan bekerja
dengan buruk, pelanggan dan klien kita akan komplain.
Pilihan yang lebih baik adalah dengan membagi dataset menjadi 2 bagian yaitu data
training dan data testing. Dengan demikian, kita bisa melakukan pelatihan model
pada train set, dan mengujinya pada test set.
Dengan menguji model terhadap data testing, kita dapat melihat kesalahan yang dibuat
dan memperbaikinya sebelum mulai membawa model kita ke tahap produksi. Data
testing diambil dengan proporsi tertentu -umumnya 20% dari keseluruhan data- jika
jumlah datanya kecil. Jika ukuran datanya sangat besar seperti 1 juta record, kita dapat
mengambil sekitar 10 ribu data saja untuk testing alias sebesar 1% saja.
Latihan SKLearn Train Test Split
Library Scikit Learn menyediakan fungsi untuk membagi dataset menjadi train set (data
training) dan test set (data testing).
1. import sklearn
2. from sklearn import datasets
3. from sklearn.model_selection import train_test_split
1. iris = datasets.load_iris()
Dataset iris dari library sklearn belum dapat langsung dipakai oleh sebuah model ML.
Sesuai dengan yang telah dibahas pada modul terdahulu, kita harus memisahkan
antara atribut dan label pada dataset.
1. x=iris.data
2. y=iris.target
Untuk membuat train set dan test set kita tinggal memanggil fungsi train_test_split.
Train_test_split memiliki parameter x yaitu atribut dari dataset, y yaitu target dari
dataset, dan test_size yaitu persentase dari test
set dari dataset utuh. Train_test_split mengembalikan 4 nilai yaitu, atribut dari train set,
atribut dari test set, target dari train set, dan target dari test set.
Ketika kita print panjang dari x_test, kita bisa melihat bahwa panjang dari atribut test set
adalah 30 sampel, sesuai dengan parameter yang kita masukkan pada fungsi
train_test_split yaitu 0.2 atau 20% dari 150 sampel. Kode untuk print panjang dari x_test
seperti di bawah ini
1. len(X_test)
Pada tahap ini kita dataset kita sudah bisa dipakai pada sebuah model machine
learning.
Data Evaluation
Pada submodul sebelumnya kita telah belajar bagaimana menggunakan test set untuk
mengevaluasi model sebelum masuk ke tahap produksi.
Sekarang bayangkan ketika kita bertugas untuk mengembangkan sebuah proyek ML.
Kita bimbang dalam memilih model yang akan dipakai, katakanlah dari 10 jenis model
yang tersedia. Salah satu opsinya adalah dengan melatih kedua model tersebut lalu
membandingkan tingkat erornya pada test set. Setelah membandingkan kedua model,
Anda mendapati model regresi linier memiliki tingkat eror yang paling kecil katakanlah
sebesar 5%. Anda lalu membawa model tersebut ke tahap produksi.
Kemudian ketika model diuji pada tahap produksi, tingkat eror ternyata sebesar 15%.
Kenapa ini terjadi?. Masalah ini disebabkan karena kita mengukur tingkat eror berulang
kali pada test set. Kita secara tidak sadar telah memilih model yang hanya bekerja
dengan baik pada test set tersebut. Hal ini menyebabkan model tidak bekerja dengan
baik ketika menemui data baru. Solusi paling umum dari masalah ini adalah dengan
menggunakan validation set.
Validation set atau holdout validation adalah bagian dari train set yang dipakai untuk
pengujian model pada tahap awal. Secara sederhana, kita menguji beberapa model
dengan hyperparameter yang berbeda pada data training yang telah dikurangi data
untuk validation. Lalu kita pilih model serta hyperparameter yang bekerja paling baik
pada validation set. Setelah proses pengujian pada holdout validation, kita bisa melatih
model menggunakan data training yang utuh (data training termasuk data validation)
untuk mendapatkan model final. Terakhir kita mengevaluasi model final pada test set
untuk melihat tingkat erornya.
Cross validation
K-Fold Cross Validation atau lebih sering disebut cross validation adalah salah satu
teknik yang populer dipakai dalam evaluasi model ML. Pada cross validation, dataset
dibagi sebanyak K lipatan. Pada setiap iterasi, setiap lipatan akan dipakai satu kali
sebagai data uji dan lipatan sisanya dipakai sebagai data latih. Dengan menggunakan
cross validation kita akan dapat hasil evaluasi yang lebih akurat karena model
dievaluasi dengan seluruh data. Berikut adalah ilustrasi dari cross validation.
Pada Colab kita import semua library yang dibutuhkan di cell pertama. Dataset yang
akan kita gunakan adalah dataset iris yang dipakai pada submodul sebelumnya.
1. import sklearn
2. from sklearn import datasets
3. from sklearn.model_selection import cross_val_score
4. from sklearn import tree
5. iris = datasets.load_iris()
1. x=iris.data
2. y=iris.target
Kita akan membuat model machine learning pertama kita yaitu decision tree,
menggunakan library scikit learn. Model machine learning juga sering disebut sebagai
classifier. Lebih lanjut, variabel clf adalah singkatan dari classifier.
1. clf = tree.DecisionTreeClassifier()
Setelah dataset dan model siap, kita bisa menggunakan cross validation untuk
mengevaluasi performa dari model machine learning. Fungsi cross_val_score seperti di
bawah menerima 4 parameter yaitu, ‘clf’ yang merupakan model machine learning, ‘X’
yang merupakan atribut dari dataset, ‘y’ yang merupakan label dari dataset, dan ‘cv’
yang merupakan jumlah fold yang akan dipakai pada cross validation.
Cross_val_score mengembalikan nilai berupa larik atau array yang terdiri dari akurasi
pengujian setiap fold dari dataset. Untuk mencetak dan mengetahui hasilnya,
tambahkan kode scores di bawah kode sebelumnya. Tampilannya seperti gambar di
bawah ini.
Elemen pertama dari larik menunjukkan nilai 0.96666 yang berarti ketika fold pertama
dijadikan validation set dan fold lainnya dijadikan train set, hasil dari pengujian tersebut
adalah akurasi sebesar 0.96666.
Melihat akurasi dari seluruh pengujian fold yang memiliki nilai tinggi dan konsisten pada
tiap fold, kita mendapatkan gambaran bahwa model kita memiliki performa yang sangat
baik.
Secara umum jika hasil dari pengujian tiap fold pada cross validation memiliki nilai yang
bervariasi dari 0.85 sampai 0.99, maka model tersebut dapat dikatakan baik.
Tiap kategori memiliki beberapa jenis seperti, supervised learning yang terbagi menjadi
classification dan regression, unsupervised yang terbagi menjadi clustering,
pendeteksian anomali, dan pengurangan dimensi. Pada modul ini akan dibahas lebih
lanjut mengenai jenis-jenis dari setiap kategori.
Supervised
Supervised learning dapat dilihat sebagai sebuah robot yang belajar menjawab
pertanyaan sesuai dengan jawaban yang telah disediakan manusia. Unsupervised,
dapat dilihat sebagai robot yang berusaha belajar menjawab pertanyaan secara mandiri
tanpa ada jawaban yang disediakan manusia.
Supervised : Classification
Klasifikasi, adalah teknik untuk menentukan kelas atau kategori berdasarkan atribut
yang diberikan. Klasifikasi masuk dalam kategori supervised learning. Untuk lebih
mudah dalam memahami klasifikasi kita akan menggunakan contoh dataset Iris.
Dataset iris merupakan salah satu dataset populer untuk belajar bagaimana ML dipakai
dalam klasifikasi. Dataset ini berisi 150 sampel dari 3 spesies bunga iris.
Pada dataset Iris terdapat 4 kolom atribut yaitu panjang sepal, lebar sepal, panjang
petal, dan lebar petal. Untuk label terdapat 3 kelas yaitu Setosa, Versicolor dan
Virginica. Kelas adalah kategori atau jenis yang terdapat pada dataset. Dalam hal ini
pada dataset terdapat 3 kelas yaitu Setosa, Versicolor, dan Virginica.
Sebuah model classification bertujuan untuk menentukan kelas berdasarkan atribut
tertentu. Pada kasus klasifikasi Iris, sebuah model bertugas untuk memprediksi spesies
dari sebuah bunga iris berdasarkan atributnya yaitu panjang sepal, lebar sepal, panjang
petal, dan lebar petalnya.
Contohnya panjang petal dari Iris Setosa lebih pendek dari spesies versicolor dan
virginica. Maka jika panjang petal pendek maka kemungkinan spesies Iris tersebut
adalah Setosa.
Klasifikasi terbagi lagi menjadi dua yaitu klasifikasi biner dan klasifikasi multi-kelas.
Pada klasifikasi biner, terdapat hanya 2 kelas pada dataset misalnya dataset diabetes
suku Indian Pima di mana kelas yang akan diprediksi hanya ada 2 yaitu positif diabetes
dan negatif diabetes. Pada klasifikasi multi-kelas terdapat lebih dari 2 kelas pada label.
Contoh dari klasifikasi multi kelas adalah klasifikasi bagian-bagian dari wajah. Sebuah
wajah memiliki beberapa bagian yaitu hidung, telinga, mulut, dan sebagainya. Pada
contoh dataset Iris seperti di atas karena terdapat 3 kelas maka dataset tersebut adalah
kasus klasifikasi multi kelas.
Decision Tree
Decision tree atau pohon keputusan adalah salah satu algoritma machine learning
supervised, yang dapat dipakai untuk masalah klasifikasi dan regresi. Decision tree
merupakan algoritma yang powerful alias mampu dipakai dalam masalah yang
kompleks. Decision tree juga merupakan komponen pembangun utama algoritma
Random Forest, yang merupakan salah satu algoritma paling powerful saat ini.
Misalnya kita memiliki data seperti di bawah. Data berisi informasi mengenai kondisi
cuaca pada hari tertentu dan apakah cocok untuk bermain golf di kondisi cuaca
tersebut.
Sebuah pohon keputusan dapat dibuat dari data sebelumnya. Pada pohon keputusan di
bawah menggunakan hanya 2 atribut yaitu kondisi langit dan kecepatan angin untuk
menentukan bermain golf atau tidak.
Setelah sebelumnya kita menggunakan data yang masih sederhana pada submodul
linear regression, kita akan menggunakan data yang lebih kompleks dari sebuah numpy
array. Untuk coding practice kali ini kita akan memakai dataset Iris, salah satu dataset
paling populer yang dipakai dalam belajar ML.
Dataset iris terdiri dari 4 atribut yaitu panjang sepal, lebar sepal, panjang petal, dan
lebar petal. Terdapat 3 kelas target pada dataset ini. Data ini dipakai untuk masalah
klasifikasi, di mana kita bisa memprediksi spesies dari sebuah bunga berdasarkan
atribut-atribut yang diberikan.
Pertama kita akan mengimpor library yang dibutuhkan dan mempersiapkan dataset.
Dataset dapat anda unduh di tautan berikut. Setelah data diunduh, masukkan berkas
Iris.csv ke dalam Colab. Lalu jangan lupa konversi dataset menjadi dataframe Pandas.
Untuk melihat informasi mengenai data, Anda bisa memanggil fungsi .head() pada
dataframe.
1. iris.head()
Tampilan iris.head() saat dijalankan sebagai berikut.
Dapat dilihat bahwa terdapat kolom yang tidak penting pada dataset yaitu kolom ‘Id’.
Untuk menghilangkan kolom tersebut kita bisa menggunakan fungsi drop().
1. iris.drop('Id',axis=1,inplace=True)
Selanjutnya kita pisahkan antara atribut dan label untuk pelatihan model kita.
Kemudian buat model decision tree kita. Terakhir kita melatih model kita dengan
menggunakan fungsi fit(). Keluaran dari cell di bawah menunjukkan bahwa model
decision tree telah dilatih dan parameter-parameternya juga ditampilkan. Penjelasan
mengenai parameter akan dibahas di modul-modul selanjutnya.
Kita bisa mencoba model yang telah kita buat untuk memprediksi spesies dari sebuah
bunga Iris. Masih ingat bukan, bahwa atribut yang menjadi masukan dari model adalah
panjang sepal, lebar sepal, panjang petal, dan lebar petal. Kita masukkan nilai yang
sesuai dengan format tersebut secara berurutan dalam satuan centimeter. Pada kode di
bawah kita ingin memprediksi spesies dari sebuah bunga iris yang memiliki panjang
sepal 6,2 centimeter, lebar sepal 3,4 centimeter, panjang petal 5,4 centimeter, dan lebar
petal 2,3 centimeter. Hasil prediksi dari model kita adalah virginica.
Setelah berhasil dijalankan, hasil dari iris_tree.dot terlihat seperti di bawah ini.
Untuk melihat visualisasi decision tree kita bisa mengkonversi dot file ke dalam file png.
Untuk mengunduh berkas iris_tree.dot pada gambar di atas, kita dapat melakukan klik
kanan pada berkas tersebut dan mengunduhnya. Untuk konversi berkas dengan
ekstensi dot menjadi berkas png dapat dilakukan di situs https://convertio.co/id/dot-png/.
Selamat! Anda telah berhasil membuat sebuah model decision tree untuk klasifikasi
spesies bunga Iris. Anda juga telah berhasil menguji model anda untuk memprediksi
spesies dari sebuah bunga iris. Untuk belajar lebih mendalam tentang decision tree,
kunjungi tautan berikut yah.
Supervised : Regression
Jenis kategori selanjutnya adalah regression. Tahukah Anda apa itu regression atau
regresi? Regresi adalah salah satu teknik ML yang mirip dengan klasifikasi. Bedanya,
pada klasifikasi sebuah model ML memprediksi sebuah kelas, sedangkan model regresi
memprediksi bilangan kontinu. Bilangan kontinu adalah bilangan numerik.
Jadi model klasifikasi memprediksi kelas atau kategori, dan model regresi memprediksi
sebuah nilai berdasarkan atribut yang tersedia. Agar lebih paham, perhatikan contoh di
bawah.
Pada contoh data di atas, model regresi akan memprediksi gaji berdasarkan atribut
lama bekerja, industri, dan tingkat pendidikan. Gaji adalah contoh dari bilangan kontinu,
di mana gaji tak memiliki kategori-kategori yang terbatas.
Pada submodul ini, jenis regresi yang akan dibahas adalah regresi linier. Selain regresi
linier terdapat juga jenis regresi lain seperti regresi polinomial, lasso regression,
stepwise regression dan sebagainya. Untuk penjelasan dari jenis-jenis regression yang
ada, kunjungi tautan berikut.
Linear Regression
Regresi linier adalah salah satu metode supervised yang masuk dalam golongan
regression, sesuai namanya. Contoh paling terkenal dari regresi linier adalah
memperkirakan harga rumah berdasarkan fitur yang terdapat pada rumah seperti luas
rumah, jumlah kamar tidur, lokasi dan sebagainya. Ini adalah model paling sederhana
yang perlu diketahui guna memahami metode machine learning lain yang lebih
kompleks. Regresi linier cocok dipakai ketika terdapat hubungan linear pada data.
Namun untuk implementasi pada kebanyakan kasus, ia kurang direkomendasikan.
Sebabnya, regresi linier selalu mengasumsikan ada hubungan linier pada data, padahal
tidak.
1. Secara sederhana regresi linear adalah teknik untuk memprediksi sebuah nilai dari
variable Y (variabel dependen) berdasarkan beberapa variabel tertentu X (variabel
independen) jika terdapat hubungan linier antara X dan Y.
2. Hubungan antara hubungan linier dapat direpresentasikan dengan sebuah garis lurus
(disebut garis regresi). Ilustrasi hubungan linier dapat dilihat pada gambar di mana data-
data cenderung memiliki pola garis lurus.
3. Ketika sebuah garis regresi digambar, beberapa data akan berada pada garis regresi
dan beberapa akan berada di dekat garis tersebut. Sebabnya, garis regresi adalah
sebuah model probabilistik dan prediksi kita adalah perkiraan. Jadi tentu akan ada
eror/penyimpangan terhadap nilai asli dari variabel Y. Pada gambar di bawah, garis
merah yang menghubungkan data-data ke gari regresi merupakan eror. Semakin
banyak eror, menunjukkan bahwa model regresi itu belum optimal.
Logistic Regression
Setelah sebelumnya Anda mengenal regresi linier untuk masalah regresi, ada juga
model seperti logistic regression, terlepas dari namanya merupakan sebuah model
yang dapat digunakan untuk klasifikasi.
Pertama kita mengimpor library yang diperlukan. Lalu buat data dummy menggunakan
numpy array.
1. import numpy as np
2. import matplotlib.pyplot as plt
3. #buat data jumlah kamar
4. bedrooms = np.array([1,1,2,2,3,4,4,5,5,5])
5. #data harga rummah. asumsi dalam dollar
6. house_price = np.array([15000, 18000, 27000, 34000, 50000, 68000, 65000,
81000,85000, 90000])
Selanjutnya kita bisa mencoba menampilkan data tersebut dalam bentuk scatter plot.
Jumlah kamar pada sumbu X adalah variabel independen dan harga rumah pada
sumbu Y adalah variabel dependen.
Lalu pada cell berikutnya, kita bisa mulai melatih model kita dengan memanggil fungsi
LinearRegression.fit() pada data kita.
Terakhir kita bisa melihat bagaimana model kita menyesuaikan dengan data yang kita
miliki dengan membuat plot dari model kita.
1. plt.scatter(bedrooms, house_price)
2. plt.plot(bedrooms, linreg.predict(bedrooms))
Hasilnya sebagai seperti di bawah ini
Model regresi linier adalah salah satu model machine learning yang paling sederhana.
Model ini memiliki kompleksitas rendah dan bekerja sangat baik pada dataset yang
memiliki hubungan linier. Jadi, ketika Anda menemui masalah yang terlihat memiliki
hubungan linier, regresi linier dapat menjadi pilihan pertama sebagai model untuk
dikembangkan.
Seperti biasa, setelah kita mengunggah berkas data pada Colab kita akan mengubah
dataset menjadi dataframe Pandas. Jangan lupa juga untuk mengimpor library dasar.
1. import pandas as pd
2. from sklearn.model_selection import train_test_split
3. from sklearn.preprocessing import StandardScaler
4. df = pd.read_csv('Social_Network_Ads.csv')
Pada cell selanjutnya gunakan fungsi head() pada dataframe untuk melihat 5 baris
pertama dari dataset.
1. df.head()
Hasil dari fungsi df.head() seperti di bawah ini.
Kita juga perlu melihat apakah ada nilai yang kosong pada setiap atribut dengan
menggunakan fungsi info(). Dapat dilihat bahwa nilai pada semua kolom sudah
lengkap.
1. df.info()
Pada dataset terdapat kolom ‘User ID’. Kolom tersebut merupakan atribut yang tidak
penting untuk dipelajari oleh model sehingga perlu dihilangkan. Untuk menghilangkan
kolom dari dataframe, gunakan fungsi drop.
1. data = pd.get_dummies(data)
2. data
Ketika kode di atas dijalankan hasilnya seperti di bawah ini.
Jangan lupa untuk membagi data menjadi train set dan test set yang dapat dilakukan
dengan fungsi train_test_split yang disediaka SKLearn.
Setelah membagi data, kita buat model dengan membuat sebuah objek logistic
regression. Setelah model dibuat, kita bisa melatih model kita dengan train set
menggunakan fungsi fit().
1. model.score(X_test, y_test)
Unsupervised : Clustering
Klaster adalah sebuah grup yang memiliki kemiripan tertentu. Pengklasteran adalah
sebuah metode machine learning unsupervised untuk mengelompokkan objek-objek
yang memiliki kemiripan, ke dalam sebuah klaster. Karena termasuk kategori
unsupervised, maka dataset yang digunakan model clustering tidak memiliki label.
Contoh pengklasteran adalah ketika kita memiliki data pengunjung blog pribadi kita
seperti gambar di bawah. Kemudian kita ingin mengembangkan sebuah model yang
bisa mengelompokkan pengunjung yang memiliki kemiripan sama. Tujuannya agar kita
bisa menulis konten yang sesuai untuk setiap kelompok.
Contoh di atas dikenal juga sebagai customer segmentation, salah satu kasus yang
populer di industri, di mana bisnis mengelompokkan pelanggan agar bisa memberikan
penawaran yang sesuai untuk setiap kelompok. Metode clustering yang paling populer
adalah K Nearest Neighbor dan pengklasteran K-Means.
K-means Clustering
Clustering masuk dalam kategori unsupervised learning karena model ini dipakai pada
data yang tidak memiliki label. Menurut Andriy Burkov dalam buku The Hundred Page
Machine Learning Book, clustering atau pengklasteran adalah sebuah metode untuk
memberi label pada data tanpa bantuan manusia. Bagaimana proses pemberian label
ini?
Data yang memiliki kemiripan akan dikelompokkan lalu, setiap data pada kelompok
yang sama akan diberikan label yang sama.
Berbeda kan, dengan model klasifikasi dan regresi di mana setiap data memiliki label
yang ditulis oleh manusia.
Pada submodul ini kita akan belajar mengenai salah satu metode clustering yang
sangat populer yaitu K-Means clustering.
K-Means Clustering
Pengklasteran K-Means adalah sebuah metode yang dikembangkan oleh Stuart Lloyd
dari Bell Labs pada tahun 1957. Lloyd menggunakan metode ini untuk mengubah sinyal
analog menjadi sinyal digital. Proses pengubahan sinyal ini juga dikenal sebagai Pulse
Code Modulation.
Pada awalnya metode K-means hanya dipakai untuk internal perusahaan. Metode ini
baru dipublikasikan sebagai jurnal ilmiah pada tahun 1982. Pada tahun 1965, Edward
W. Forgy mempublikasikan metode yang sama dengan K-Means, sehingga K-Means
juga dikenal sebagai metode Lloyd-Forgy.
Untuk melihat bagaimana K-Means bekerja, kita akan menggunakan data seperti di
bawah ini. Perhatikan bahwa data yang kita gunakan terdapat 12 sampel dan data ini
merupakan data 1 dimensi.
Hal yang paling pertama K-Means lakukan adalah memilih sebuah sampel secara acak
untuk dijadikan centroid. Centroid adalah sebuah sampel pada data yang menjadi pusat
dari sebuah cluster. Kita bisa melihat pada gambar bahwa 3 sampel yang dijadikan
centroid diberi warna biru, hijau dan kuning.
Kedua, karena centroid adalah pusat dari sebuah cluster, setiap sampel akan masuk ke
dalam cluster. Ini bermula dari centroid terdekat dengan sampel tersebut. Pada contoh
di bawah sampel yang ditunjuk anak panah memiliki jarak terdekat dengan centroid
warna hijau. Alhasil, sampel tersebut masuk ke dalam cluster hijau.
Ketiga, setelah setiap sampel dimasukkan pada cluster dari centroid terdekat, K-Means
akan menghitung rata-rata dari setiap sampel dan menjadikan rata-rata tersebut
sebagai centroid baru. Rata-rata di sini adalah titik tengah dari setiap sampel pada
sebuah cluster. Pada gambar dibawah rata-rata yang menjadi centroid baru
digambarkan sebagai garis tegak lurus.
Keempat, langkah kedua diulang kembali. Sampel akan dimasukkan ke dalam cluster
dari centroid baru yang paling dekat dengan sampel tersebut.
Pada tahap ini Anda mengulangi langkah ketiga, yaitu menemukan rata-rata dari cluster
terbaru. Anda akan menemukan rata-rata tiap cluster di tahap keempat akan sama
dengan rata-rata tiap cluster pada tahap ketiga sehingga centroidnya tidak berubah.
Ketika centroid baru tidak ditemukan, maka proses clustering berhenti.
Apakah prosesnya telah selesai?. Seperti yang bisa kita lihat, hasil pengklasteran dari
tahapan sebelumnya belum terlihat optimal.
Untuk mengukur kualitas dari pengklasteran, K-Means akan melakukan iterasi lagi dan
mengulangi lagi tahap pertama yaitu memilih sampel secara acak untuk dijadikan
centroid. Gambar di bawah menunjukkan K-Means pada iterasi kedua mengulangi
kembali langkah pertama yaitu memilih centroid secara acak.
Untuk iterasi kedua, Anda bisa mempraktekkan langkah yang sudah dijelaskan
sebelumnya untuk menguji pemahaman Anda.Hasil dari iterasi kedua adalah sebagai
berikut.
Hasil dari iterasi kedua terlihat lebih baik dibanding iterasi pertama. Untuk
membandingkan cluster setiap iterasi, K-Means akan menghitung variance dari tiap
iterasi. Variance adalah persentase jumlah sampel pada tiap cluster. Gambar di bawah
menunjukkan variance pada iterasi pertama.
Kita bisa melihat bahwa di iterasi kedua, variance nya lebih seimbang dan tidak
condong pada cluster tertentu. Sehingga, hasil dari cluster iterasi kedua lebih baik dari
iterasi pertama. Jumlah iterasi dari K-Means ditentukan oleh programmer, dan K-Means
akan berhenti melakukan iterasi sampai batas yang telah ditentukan.
Untuk data yang memiliki 2 dimensi atau lebih, k-means bekerja dengan sama yaitu
menentukan centroid secara acak, lalu memindahkan centroid sampai posisi centroid
tidak berubah. Animasi di bawah akan membantu Anda untuk melihat bagaimana K-
Means bekerja pada data 2 dimensi.
Metode Elbow
Cara paling mudah untuk menentukan jumlah K atau cluster pada K-means adalah
dengan melihat langsung persebaran data. Otak kita bisa mengelompokkan data-data
yang berdekatan dengan sangat cepat. Tetapi cara ini hanya bekerja dengan baik pada
data yang sangat sederhana.
Ketika masalah clustering lebih kompleks seperti gambar dibawah, dan kita bingung
menentukan jumlah cluster yang pas, kita bisa menggunakan metode Elbow.
Ide mendasar dari metode elbow adalah untuk menjalankan K-Means pada dataset
dengan nilai K pada jarak tertentu (1,2,3, .., N). Kemudian hitung inersia pada setiap
nilai K. Inersia memberi tahu seberapa jauh jarak setiap sampel pada sebuah cluster.
Semakin kecil inersia maka semakin baik karena jarak setiap sampel pada sebuah
klaster lebih berdekatan.
Metode elbow bertujuan untuk menentukan elbow, yaitu jumlah K yang optimal. Untuk
menentukan elbow, kita perlu melakukannya secara manual, yaitu dengan melihat titik
dimana penurunan inersia tidak lagi signifikan.
Pada contoh di bawah kita memiliki data yang dapat dibagi menjadi 4 klaster.
Bagaimana metode elbow dapat menentukan jumlah klaster tersebut optimal?
Kita akan mengaplikasikan metode elbow pada data di atas. Elbow berada di nilai K
sama dengan 4, karena penurunan inersia pada K seterusnya tidak lagi signifikan
(perubahannya nilainya kecil). Sehingga jumlah klaster yang optimal adalah 4.
Selamat! Anda sudah paham bagaimana K-Means bekerja. Sekarang kita akan belajar
menggunakan K-Means dengan library SKLearn.
Di cell selanjutnya kita ubah file csv kita ke dalam dataframe pandas dan menampilkan
3 baris pertama dari dataframe. Pastikan file csv Anda sudah dimasukkan ke dalam
Colabs.
Kemudian kita akan melakukan sedikit preprocessing yaitu mengubah nama kolom agar
lebih seragam. Lalu kolom gender adalah kolom kategorik, maka kita akan mengubah
data tersebut menjadi data numerik.
Di tahap selanjutnya kita akan mengimpor K-Means. Di tahap ini juga kita akan
menghilangkan kolom Customer ID dan gender karena kurang relevan untuk proses
clustering. Selanjutnya kita akan menentukan nilai K yang optimal dengan metode
Elbow. Library K-means dari SKLearn menyediakan fungsi untuk menghitung inersia
dari K-Means dengan jumlah K tertentu. Di sini kita akan membuat list yang berisi
inersia dari nilai K antara 1 sampai 11.
Jalankan kode di bawah untuk membuat plot dari inersia setiap K berbeda. Sesuai plot
di bawah, kita bisa melihat bahwa elbow berada di nilai K sama dengan 5, di mana
penurunan inersia tidak lagi signifikan setelah nilai K sama dengan 5.
Terakhir kita bisa melatih kembali K-Means dengan jumlah K yang didapat dari metode
Elbow. Lalu kita bisa membuat plot hasil pengklasteran K-Means dengan menjalankan
kode di bawah.
Recommendation
Rekomendasi atau sistem rekomendasi adalah salah satu implementasi machine
learning yang kita pakai hampir setiap hari. Contohnya pada saat kita belanja daring,
terdapat jutaan pilihan produk pada platform tersebut. Akan membuang banyak waktu
jika kita harus melihat semua opsi tersebut. Sistem rekomendasi memiliki peran penting
untuk membantu kita menemukan produk yang benar-benar kita cari.
Selain pada platform belanja daring, sistem rekomendasi juga hadir dalam aplikasi yang
kita pakai sehari-hari seperti Youtube dan Spotify yang merekomendasikan video dan
lagu yang menarik perhatian kita.
Nah, setelah mengetahui berbagai model machine learning, kita paham bahwa setiap
dataset dan kasus memiliki pendekatan model yang berbeda. Kelas pengenalan ini
hanya akan membahas 2 model machine learning yang paling umum yaitu classification
dan regresi.
Dengan begitu banyaknya atribut, proses pelatihan akan menjadi lambat dan memakan
waktu yang lama. Contoh lain pada kasus image recognition, di mana atribut dari image
adalah jumlah pixel dari gambar tersebut. Jika sebuah gambar memiliki resolusi 28 x 28
pixel, maka gambar tersebut memiliki 784 atribut.
Pada 2 gambar di atas, setiap pixel adalah sebuah atribut. Hanya atribut yang berada di
dalam kotak merah, yang berguna untuk dipakai dalam pelatihan model ML.
Sebaliknya, atribut yang berada di luar kotak merah, tidak berguna dalam pelatihan
model. Pengurangan dimensi pada kasus ini adalah dengan membuang pixel atau
atribut yang berada di luar kotak merah. Bayangkan jika terdapat 10.000 gambar seperti
di atas dalam sebuah dataset. Pengurangan dimensi akan mempercepat pelatihan
model secara signifikan.
Ada beberapa teknik dalam pengurangan dimensi. Salah satu metode pengurangan
dimensi yang terkenal adalah Principal Component Analysis atau sering disebut PCA.
Secara sederhana, tujuan dari PCA adalah mengurangi jumlah atribut pada dataset
tanpa mengurangi informasi. Contohnya pada sebuah dataset harga rumah. Pada PCA
setiap atribut disebut sebagai principal component. Jika terdapat 10 atribut pada
dataset, berarti terdapat 10 principal component. Pada gambar di bawah terdapat
histogram dari 10 principal component dan variance dari setiap principal component.
PCA bekerja dengan menghitung variance dari tiap atribut. Variance adalah informasi
yang dimiliki sebuah atribut. Misal pada dataset rumah, atribut jumlah kamar memiliki
variance/atau informasi sebesar 92% dan warna rumah memiliki variance/informasi
sebesar 4% tentang harga rumah terkait. Dari hasil perhitungan variance, atribut warna
rumah dapat dibuang dari dataset karena tidak memiliki informasi yang cukup signifikan
ketika kita ingin mempercepat pelatihan sebuah model.
LDA
Linear Discriminant Analysis atau analisis diskriminan linier adalah teknik statistika yang
dipakai untuk reduksi dimensi. LDA bekerja dengan mencari kombinasi atribut terbaik
yang dapat memisahkan kelas-kelas pada dataset. Kontras dengan PCA yang bekerja
dengan mencari atribut komponen yang memiliki variance tertinggi.
Perbedaan mendasar lain yang membedakan LDA dan PCA adalah PCA merupakan
teknik unsupervised, karena pada pengurangan dimensi, PCA tidak menghiraukan label
yang terdapat pada dataset. Sedangkan LDA merupakan teknik supervised karena
pada LDA memperhatikan bagaimana kelas-kelas pada data dapat dipisahkan dengan
baik. Silakan kunjungi tautan berikut untuk membaca lebih lanjut mengenai LDA.
t-SNE
t-Distributed Stochastic Neighbor Embedding atau sering disebut t-SNE, adalah teknik
lainnya dalam pengurangan dimensi. t-SNE mengurangi dimensi dengan menjaga
sampel-sampel yang mirip agar berdekatan, dan sampel-sampel yang kurang mirip
berjauhan.
t-SNE sering dipakai untuk visualisasi data yang memiliki dimensi besar dan dipakai
luas dalam pemrosesan gambar, pemrosesan bahasa alami, data genomika, dan
speech processing. Jika Anda tertarik melihat bagaimana implementasi dari t-SNE,
Anda bisa mengunjungi tautan berikut.
Untuk mencoba menggunakan PCA kita bisa memakai library SKLearn. Pada latihan ini
kita akan menggunakan dataset Iris seperti yang kita gunakan pada modul
sebelumnya.
1. iris = datasets.load_iris()
2. atribut = iris.data
3. label = iris.target
4. # bagi dataset menjadi train set dan test set
5. X_train, X_test, y_train, y_test = train_test_split(
6. atribut, label, test_size=0.2)
Kita akan menggunakan model Decision Tree dan menghitung berapa akurasinya tanpa
menggunakan PCA. Akurasi tanpa PCA adalah 0.9666. Akurasi dari model Anda
mungkin berbeda dengan keluaran di bawah.
Tampilan hasil akurasi tanpa PCA dari kode di atas sebagai berikut.
Kemudian kita akan menggunakan PCA dan menghitung variance dari setiap atribut.
Hasilnya adalah 1 atribut memiliki variance sebesar 0.919, yang berarti atribut tersebut
menyimpan informasi yang tinggi dan jauh lebih signifikan dari atribut lain.
Melihat dari variance sebelumnya kita bisa mengambil 2 principal component terbaik
karena total variance nya adalah 0.969 yang sudah cukup tinggi.
1. pca = PCA(n_components = 2)
2. X_train_pca = pca.fit_transform(X_train)
3. X_test_pca = pca.fit_transform(X_test)
Hasil pengujian akurasi setelah menggunakan PCA menjadi seperti di bawah ini.
Dari percobaan di atas bisa kita lihat bahwa dengan hanya 2 principal component atau
2 atribut saja model masih memiliki akurasi yang tinggi. Dengan principal component
kamu bisa mengurangi atribut yang kurang signifikan dalam prediksi dan mempercepat
waktu pelatihan sebuah model machine learning.
Pada modul ini akan dibahas mengenai support vector machine untuk klasifikasi dan
regresi.
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.
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.
Lalu, bagaimana SVM membuat sebuah decision boundary tersebut?
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.
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.
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?.
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.
SVM adalah support vector classifier yang menggunakan trik kernel untuk memisahkan
data non linier. Agar lebih paham bagaimana trik kernel bekerja, lihat contoh berikut.
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.
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.
Linear
Polinomial
RBF
Sigmoid
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.
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”.
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:
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.
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.
Kode program yang akan diajarkan di sini bisa diunduh di tautan berikut ini, untuk
membukanya upload berkasnya dari Google Colab.
Sekarang saatnya kita mencoba menggunakan model SVM yang tersedia di library
SKLearn. Untuk latihan kali ini kita akan memakai dataset Pima Indian. Dataset ini
dikumpulkan oleh National Institute of Diabetes and Digestive and Kidney Diseases.
Dataset berisi 8 kolom atribut dan 1 kolom label yang berisi 2 kelas yaitu 1 dan 0.
Angka 1 menandakan bahwa orang tersebut positif diabetes dan 0 menandakan
sebaliknya. Terdapat 768 sampel yang merupakan 768 pasien perempuan keturunan
suku Indian Pima.
Model machine learning yang akan kita buat bertujuan untuk mengklasifikasikan apakah
seorang pasien positif diabetes atau tidak.
Tahap pertama yang perlu kita lakukan adalah mengunduh dataset Pima Indian
dari tautan berikut. Setelah mengunduh dataset, jangan lupa masukkan ke dalam
Colab. Dataset yang telah berhasil diunggah ke Colab akan tampil sebagai berikut.
Pada tahap selanjutnya kita akan mengimpor library pandas dan mengubah dataset
menjadi sebuah dataframe.
1. import pandas as pd
2. df = pd.read_csv('diabetes.csv')
Lalu kita tampilkan 5 baris teratas dari dataframe untuk melihat isi dari dataset. Untuk
melakukannya kita dapat menjalankan kode df.head() seperti di bawah.
1. df.head()
Hal paling penting selanjutnya adalah kita perlu mengecek apakah terdapat nilai-nilai
yang hilang pada dataset serta apakah ada atribut yang bukan berisi bilangan numerik.
Kita bisa melakukan ini dengan memanggil fungsi .info() pada dataframe.
1. df.info()
Output dari fungsi info() menunjukkan bahwa semua atribut nilainya lengkap, dan juga
nilai-nilai dari tiap kolom memiliki tipe data numerik yaitu int64 dan float64.
Pada tahap ini data sudah bisa dipakai untuk pelatihan model.
Kita lalu memisahkan antara atribut dan label pada dataframe. Untuk memisahkan
kolom-kolom pada dataframe kamu bisa melihat dokumentasinya pada tautan ini.
Jika kita lihat, nilai-nilai pada dataset memiliki skala yang berbeda. Contohnya pada
kolom Glucose dan kolomDiabetes Pedigree Function. Kita perlu mengubah nilai-nilai
dari setiap atribut berada pada skala yang sama. Kita dapat mencoba menggunakan
standarisasi dengan fungsi StandardScaler() dari SKLearn.
Setelah atribut dan label dipisah, kita bisa memisahkan data untuk training dan testing
menggunakan fungsi .train_test_split().
Terakhir, kita bisa melihat bagaimana akurasi prediksi dari model yang kita latih
terhadap data testing.
1. clf.score(X_test, y_test)
Selamat, Anda telah berhasil mengembangkan sebuah model Support Vector Classifier
untuk mendeteksi diabetes.
Support Vector Regression (SVR) menggunakan prinsip yang sama dengan SVM pada
kasus klasifikasi. Perbedaannya adalah jika pada kasus klasifikasi, SVM berusaha
mencari ‘jalan’ terbesar yang bisa memisahkan sampel-sampel dari kelas berbeda,
maka pada kasus regresi SVR berusaha mencari jalan yang dapat menampung seluruh
sampel.
Berbeda dengan SVM dimana support vector adalah 2 sampel dari 2 kelas berbeda
yang memiliki jarak paling dekat, pada SVR support vector adalah sampel yang menjadi
pembatas jalan yang dapat menampung seluruh sampel pada data. Ilustrasi dari SVR
dapat anda lihat di bawah.
SVR untuk klasifikasi non-linier
Support vector regressor juga dapat dipakai untuk masalah regresi non linier. Pada
kasus regresi non linier, SVR menggunakan trik kernel seperti gambar di bawah, untuk
mengubah data ke dalam dimensi yang lebih tinggi sehingga data dapat dipisahkan
secara linier.
Untuk membaca lebih lanjut mengenai support vector regression, Anda bisa
mengunjungi tautan berikut.
Setelah mengenal support vector regression, kita akan mencoba menggunakan model
tersebut dengan library SKLearn. Dataset yang akan kita gunakan adalah data lama
kerja seseorang dan gajinya. Dataset ini dapat diunduh pada tautan berikut.
Setelah mengunggah dataset yang sudah di-unzip pada Google Colaboratory, pada cell
pertama notebook kita impor library dasar yang dibutuhkan. Jangan lupa untuk
mengubah berkas csv dari dataset menjadi dataframe Pandas.
1. import pandas as pd
2. from sklearn.model_selection import train_test_split
3. from sklearn.preprocessing import StandardScaler
4.
5.
6. data = pd.read_csv('Salary_Data.csv')
Selanjutnya kita bisa melihat apakah terdapat missing value pada dataset dengan
fungsi .info(). Keluaran dari cell di bawah menunjukkan bahwa tidak ada missing value
pada dataset.
1. data.info()
1. data.head()
Kemudian kita pisahkan antara atribut dan label yang ingin diprediksi. Ketika hanya
terdapat satu atribut pada dataframe, maka atribut tersebut perlu diubah bentuknya
agar bisa diterima oleh model dari library SKLearn. Untuk mengubah bentuk atribut kita
membutuhkan library numpy.
1. import numpy as np
2.
3.
4. X = data['YearsExperience']
5. y = data['Salary']
6. X = X[:,np.newaxis]
Berikutnya kita buat buat objek support vector regression dan di sini kita akan mencoba
menggunakan parameter C = 1000, gamma = 0.05, dan kernel ‘rbf’. Setelah model
dibuat kita akan melatih model dengan fungsi fit pada data.
Pada modul ini juga akan dibahas tentang beberapa teknik dalam rekayasa fitur/atribut
yang umum dipakai untuk meningkatkan kualitas dari data untuk pelatihan model.
Overfitting underfitting
Salah satu hal yang paling penting untuk diperhatikan saat mengembangkan model ML adalah
mengecek apakah model tersebut underfit atau overfit (arti dari masing-masing model akan kami
jelaskan di bawah ini).
Sebuah model ML yang layak untuk di-deploy di tahap produksi adalah model
yang tidak underfit atau overfit. Sebuah model yang tidak overfit dan underfit juga disebut
dengan model good fit. Model yang bukan good fit cenderung akan memiliki performa sangat
buruk di tahap produksi.
Salah satu caranya telah kita pelajari sebelumnya, yakni dengan membagi dataset menjadi train
set dan test set. Setelah data tersebut dibagi, kita akan melakukan pengembangan model hanya
dengan data training. Hasil pengujian model terhadap data testing dapat memberitahu kita
apakah model kita underfit atau overfit.
Underfitting
Underfit terjadi ketika model terlalu sederhana dan tidak mampu untuk menyesuaikan pola yang
terdapat pada data latih. Bagaimana untuk mengenali apakah sebuah model underfit atau tidak?
Sebuah model dapat dikatakan underfit jika memiliki eror yang tinggi pada data training.
Underfitting menandakan bahwa model tersebut belum cukup baik dalam mengenali pola yang
terdapat pada data latih. Misalnya ketika sebuah model dilatih pada data latih yang memiliki 50
sampel coklat dan 50 sampel kacang. Setelah pembelajaran dengan data latih, model malah
mengenali pada data latih terdapat 90 sampel coklat dan 10 sampel kacang.
Pada kasus klasifikasi, underfitting ditandai ketika model memiliki akurasi yang rendah pada
data training. Pada kasus regresi, underfitting terjadi ketika model memiliki tingkat eror yang
tinggi.
Pada ilustrasi regresi di bawah, model di sebelah kiri belum menyesuaikan dengan baik terhadap
pola yang terdapat pada data. Bandingkan dengan model di sebelah kanan.
Cara menghindari underfitting adalah dengan menyeleksi model atau meningkatkan performa
dengan tuning hyperparameter yang akan dibahas di submodul selanjutnya. Kualitas data juga
sangat mempengaruhi dataset. Model machine learning yang sangat kompleks sekalipun tidak
akan memiliki performa yang baik jika data yang digunakan memiliki kualitas yang buruk. Ingat
prinsip: “Garbage in, garbage out” ya.
Overfitting
Overfitting terjadi ketika model terlalu memiliki prediksi yang sangat baik pada data training,
namun prediksinya buruk pada data testing. Ketika sebuah model overfit, model akan membuat
banyak kesalahan dalam memprediksi data-data baru yang ditemui pada tahap produksi.
Contoh kasus adalah sebuah model machine learning untuk mengenali gambar anjing. Sebuah
model yang overfit akan sangat menyesuaikan dengan dataset. Nah, di dataset mayoritas dari
gambar anjing adalah anjing berwarna hitam. Maka model akan berpikir bahwa setiap hewan
yang berwarna hitam adalah anjing. Ketika model tersebut dipakai untuk memprediksi sebuah
gambar kucing dan kuda berwarna hitam, maka prediksinya adalah anjing.
Memilih model yang lebih sederhana, contohnya pada data yang memiliki pola linier
menggunakan model regresi linear daripada model decision tree.
Mengurangi dimensi data contohnya dengan metode PCA yang telah Anda pelajari.
Menambahkan data untuk pelatihan model jika memungkinkan.
Good Fit
Model ML yang baik adalah model good fit atau model yang tidak underfit maupun overfit.
Sebuah model good fit akan memprediksi lebih baik dan membuat lebih sedikit kesalahan di
tahap produksi. Contoh dari model yang tidak good fit seperti di bawah.
Sebuah model membuat banyak kesalahan dalam memprediksi gambar di atas. Seperti sebuah
kaos kaki dan anjing yang diprediksi sebagai gajah india, dan seekor paus yang diprediksi
sebagai gajah afrika. Tentunya Anda tidak ingin agar model ML membuat banyak kesalahan
seperti di atas bukan. Berikut sebuah tabel yang membandingkan model yang underfitting, good
fit, dan overfitting pada masalah regresi dan klasifikasi.
KEMBALI KE MATERI SEBELUMNYA
Model Selection
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.
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.
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.
Latihan SKLearn with Grid Search
Kode program yang akan diajarkan di sini bisa diunduh di tautan berikut ini, untuk membukanya
upload berkasnya dari Google Colab.
Untuk latihan kali ini kita akan menggunakan bagaimana grid search mencari parameter terbaik
pada sebuah model SVR. Dataset yang kita gunakan sama seperti di modul 3 yaitu dataset gaji.
Pada latihan tersebut model belum mampu menyesuaikan pola pada data dengan baik.
Pada latihan ini kita akan mencari parameter yang lebih baik dengan menggunakan grid search
agar model menjadi lebih baik.
Pertama, undul berkas "Salary_Data.csv", dari tautan berikut ini. Jika sudah jangan lupa upload
ke Google Colab Anda.
Pada cell pertama impor library dasar dan ubah berkas dataset menjadi dataframe.
1. import pandas as pd
2. from sklearn.model_selection import train_test_split
3. from sklearn.preprocessing import StandardScaler
4.
5. data = pd.read_csv('Salary_Data.csv')
Kemudian pisahkan atribut dan label pada dataset. Masih ingat bukan, bahwa jika hanya terdapat
1 atribut pada dataset kita perlu mengubah bentuknya agar bisa dipakai pada pelatihan model.
1. import numpy as np
2.
3. X = data['YearsExperience']
4. y = data['Salary']
5. X = X[:,np.newaxis]
Selanjutnya, untuk menggunakan grid search, kita impor library GridSearchCV dari
sklearn.model_selection. Lalu kita buat model yang ingin kita uji dengan grid search dalam hal
ini model SVR. Kemudian kita buat sebuah python dictionary yang berisi nama parameter yang
akan diuji, serta nilai-nilainya. Selanjutnya kita buat objek grid search dan mengisi parameter-
parameternya. Parameter pertama adalah model yang akan kita uji. Parameter kedua adalah
dictionary yang berisi kumpulan parameter dari model yang akan diuji. Terakhir kita panggil
fungsi fit() pada objek grid search yang telah kita buat.
Setelah grid search mencari parameter terbaik pada model, kita bisa menampilkan parameter
terbaik dengan memanggil atribut best_params_ dari objek grid search.
1. print(grid_search.best_params_)
Selanjutnya Anda bisa mencoba membuat model SVM baru dengan parameter hasil grid search
dan melatihnya pada data.
Terakhir kita bisa memvisualisasikan SVR dengan parameter hasil grid search. Dapat dilihat dari
hasil plot bahwa grid search berhasil mencari parameter yang lebih baik sehingga meningkatkan
performa dari model.
Selamat! Anda telah memahami dan bisa menggunakan grid search untuk mencari parameter
terbaik dari suatu model. Dengan grid search Anda akan menghemat banyak waktu dalam
mencari parameter terbaik dari model machine learning yang anda kembangkan ke depannya.
Adding/reducing features
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 bin, 8 bin, dan 16 bin.
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.
Neural Network
Pada modul-modul sebelumnya telah dibahas tentang beberapa model machine
learning seperti decision tree, support 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 network, multi 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.
Demikian halnya dengan machine learning dan jaringan saraf tiruannya. Jaringan Saraf
Tiruan atau Artificial Neural Network (ANN) adalah sebuah model machine learning
yang terinspirasi dari neuron/saraf yang terdapat pada otak manusia.
Setiap ujung akson dari sebuah neuron terhubung dengan dendrit dari neuron lainnya.
Ketika sebuah neuron mendapatkan sebuah rangsangan, neuron tersebut akan
mengirim sinyal ke neuron lainnya. Seperti ketika kita tidak sengaja menyentuh panci
yang panas. Saraf yang terdapat pada tangan kita mengirim sinyal ke saraf lain sampai
ke otak, dan kita merespon dengan cepat. Pengiriman sinyal antar neuron terjadi
sangat cepat yaitu hanya dalam beberapa milidetik.
Cara kerja dari sebuah neuron sangatlah sederhana. Namun, neuron-neuron tersebut
terorganisir dalam sebuah jaringan berisi miliaran neuron. Setiap neuron lalu terhubung
dengan beberapa ribu neuron lainnya. Dengan jumlah yang luar biasa besar tersebut,
banyak pekerjaan kompleks yang dapat diselesaikan. Sama dengan sebuah sarang
semut yang sangat besar dan kompleks seperti gambar di bawah. Tak terbayang kan
sekumpulan semut kecil yang membangunnya?
Perceptron
perceptron adalah komponen dasar pembangun jaringan saraf tiruan. perceptron pada
jaringan saraf tiruan terinspirasi dari neuron pada jaringan saraf di otak manusia. Pada
jaringan saraf tiruan, perceptron dan neuron merujuk pada hal yang sama.
Sebuah perceptron menerima sebuah masukan yaitu bilangan numerik lalu memproses
masukan tersebut dan menghasilkan sebuah keluaran. Untuk lebih memahami cara
kerja perceptron, kita akan menggunakan diagram di bawah.
Sebuah perceptron menerima kumpulan input berupa angka-angka. Dari input yang
diterima, perceptron kemudian melakukan pemrosesan dengan output yang juga
berupa angka. Terdapat 5 proses yang menjelaskan bagaimana perceptron bekerja
yaitu :
Fungsi matematis dari perceptron dapat kita lihat di bawah. Rumus di bawah
merupakan notasi matematis yang menjelaskan proses yang kita bahas sebelumnya.
Keluaran (ŷ) dari perceptron merupakan bias (W0), ditambah dengan jumlah setiap input
(Xi) yang dikali dengan bobot masing-masing (Wi), lalu dimasukkan ke dalam sebuah
fungsi aktivasi (g).
Fungsi aktivasi pada perceptron berfungsi untuk membuat jaringan saraf mampu
menyesuaikan pola pada data non linier. Seperti yang sudah pernah dibahas
sebelumnya, mayoritas data yang terdapat di dunia nyata adalah data non linier seperti
di bawah.
Fungsi aktivasi lah yang memungkinkan jaringan saraf dapat mengenali pola non-linier
seperti di bawah. Tanpa fungsi aktivasi, jaringan saraf hanya bisa mengenali pola linier
seperti garis pada regresi linier.
Ada 3 fungsi aktivasi yang paling umum yaitu sigmoid function, hyperbolic tangent, dan
rectified linear unit (ReLU). Untuk memahami lebih lanjut tentang fungsi aktivasi,
kunjungi tautan berikut yah.
Untuk pembahasan selanjutnya kita akan menggunakan diagram yang lebih sederhana
untuk sebuah perceptron. Pada diagram di bawah, x1, x2, dan x3 adalah input, dan z
adalah sebuah perceptron. Bias dan bobot tidak masuk dalam ilustrasi agar diagram
terlihat lebih sederhana.
Pada gambar di bawah terdapat 2 buah perceptron yaitu Z 1 dan Z2. Karena koneksi tiap
perceptron dan tiap input sangat padat, jadi dinamakan dengan dense layer. Jadi,
dense layer adalah sebuah lapisan yang terdiri dari 2 perceptron atau lebih.
Selanjutnya kita akan membahas tentang Hidden layer. Sebuah hidden layer adalah
dense layer yang berada di antara input layer dan output layer. Pada ilustrasi di bawah,
jaringan saraf di sebelah kiri memiliki 1 hidden layer dan jaringan saraf di sebelah
kanan memiliki 4 buah hidden layer.
Dalam sebuah jaringan saraf tiruan, input layer dan output layer harus selalu ada,
namun untuk hidden layer bisa ada beberapa atau tidak sama sekali. Hidden layer dan
output layer sama-sama merupakan sebuah layer yang memiliki beberapa perceptron.
Sedangkan input layer adalah sebuah layer yang hanya menampung angka-angka.
Hidden layer diberikan nama hidden karena sifatnya yang tersembunyi. Pada sebuah
sistem jaringan saraf, input dan output layer merupakan lapisan yang dapat kita amati,
sementara hidden layer, tidak.
Pada sebuah jaringan saraf tiruan, semakin banyak jumlah hidden layer dalam sistem,
semakin lama jaringan saraf tersebut memproduksi hasil, namun juga semakin
kompleks masalah yang dapat diselesaikan.
Multi Layer Perceptron
Multi layer perceptron (MLP) adalah sebuah jaringan saraf yang terdiri dari satu layer
input, satu atau lebih hidden layer, dan satu output layer. MLP yang memiliki banyak
hidden layer disebut juga deep neural network (DNN).
Sebuah jaringan saraf tiruan seperti MLP mirip dengan seorang bayi yang baru lahir
yang belum mengerti apa-apa. Dengan belajar lah seorang bayi lalu dapat meningkat
pengetahuannya tentang dunia sekitar . Begitu juga dengan MLP. Ketika kita
melatihnya pada sebuah data, kita ingin agar MLP membuat kesalahan yang sangat
minim pada prediksinya.
Di tahun-tahun awal, banyak peneliti yang kesulitan menemukan cara untuk melatih
MLP. Barulah pada tahun 1986, David Rumelhard, Geoffrey Hinton, dan Ronald
Williams mempublikasikan penelitian yang mengenalkan propagasi balik
alias backpropagation. Propagasi balik adalah sebuah algoritma untuk melatih MLP
yang masih digunakan hingga sekarang.
Propagasi Balik
Propagasi balik adalah teknik yang memungkinkan MLP untuk belajar membuat
prediksinya semakin baik.
Cara kerja propagasi balik secara sederhana terdiri dari 3 tahap yaitu:
Sebuah contoh sederhana dari propagasi balik adalah pada permainan Angry Birds.
Kita dapat memenangkan permainan dengan memilih lintasan terbaik untuk mengenai
target.
Pada awal permainan MLP akan memilih lintasan secara acak. Pada pemilihan lintasan
pertama, MLP sangat mungkin menghasilkan eror berupa tak kena target. Eror
kemudian diukur dengan loss function dimana, eror merupakan jarak antara lintasan
yang tidak mengenai target, dan target yang dituju. Eror kemudian dikirim dengan
propagasi balik dan setiap bobot pada MLP disesuaikan dengan optimizer.
Pada kasus ini, bobot yang perlu dipelajari MLP adalah lintasan terbaik yang harus
dilalui untuk memenangkan permainan. Kemudian MLP akan terus belajar dengan
propagasi balik hingga akhirnya menemukan bobot/lintasan yang berhasil mengenai
target. Mudah bukan.
Untuk memahami cara kerja propagasi balik secara detail maupun rumus matematika
dibaliknya, silakan kunjungi tautan ini ya.
Kita akan melihat bagaimana MLP bekerja dalam kasus klasifikasi. Pada gambar di
bawah terdapat sebuah kasus klasifikasi untuk menentukan apakah seorang murid
akan lulus atau tidak dari sebuah kelas. Pada data terdapat 2 atribut yaitu jumlah
absensi dan lama waktu yang dihabiskan pada tugas akhir. Dan label pada data ada 2
yaitu lulus dan gagal.
Untuk menyelesaikan masalah di atas kita dapat menggunakan MLP dengan satu
hidden layer yang memiliki 4 perceptron. Input pada MLP merupakan 2 atribut pada
data dan output memiliki 1 perceptron yang akan mengeluarkan 2 prediksi kelas.
Pada masalah klasifikasi 2 kelas (biner), kita dapat menggunakan 2 perceptron untuk
output di mana satu perceptron mewakili sebuah kelas. Namun khusus untuk klasifikasi
biner kita dapat menggunakan hanya 1 perceptron pada output layer yang
mengeluarkan probabilitas untuk masing-masing kelas (probabilitas>0.5 memprediksi
lulus dan probabilitas <0.5 memprediksi tidak lulus). Untuk masalah klasifikasi 3
kelas ke atas, jumlah perceptron pada layer output sebaiknya menyesuaikan jumlah
kelas pada data.
Animasi di bawah menunjukan sebuah MLP untuk kasus klasifikasi kelulusan siswa
yang kita bahas sebelumnya. Pada MLP di bawah terdapat 2 input dan sebuah
perceptron output yang mengeluarkan probabilitas untuk setiap kelas. Untuk hidden
layer, MLP di bawah menggunakan 4 buah perceptron.
Tak ada aturan baku tentang pemilihan jumlah hidden layer dan banyak perceptronnya.
Jumlah hidden layer dapat disesuaikan dengan kerumitan masalah yang akan
diselesaikan.
Pada animasi di atas kita dapat melihat bobot pada setiap garis yang menghubungkan
perceptron. Bobot tersebut adalah parameter yang dipelajari oleh MLP agar
menghasilkan prediksi yang benar. Proses ini sama dengan contoh Angry Birds
sebelumnya di mana bobot pada setiap iterasi akan disesuaikan dengan propagasi
balik.
Ketika telah melalui beberapa iterasi kita dapat melihat beberapa garis menjadi lebih
tebal dari lainnya. Garis yang lebih tebal menunjukkan bahwa bobotnya lebih tinggi.
Dari seluruh bobot yang dipelajari, prediksi MLP pada iterasi terakhir akan menjadi lebih
tepat.
Selamat! Anda telah memahami bagaimana MLP bekerja. Pada modul selanjutnya kita
akan menulis program MLP dengan TensorFlow.
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 animasi di bawah.
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).
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.
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.
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.
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.
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.
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.
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.
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.
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
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.
Kita 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.
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. Detail
mengenai CNN dapat Anda
Selamat!. Sekarang Anda paham cara kerja CNN dan fungsinya dalam deteksi gambar.
Di modul berikutnya kita akan praktik mengembangkan sebuah CNN dengan
TensorFlow.
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.
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 Speech, Google Photos,
dan Google Search.
Pada modul ini kita akan belajar menggunakan library Keras yang dibangun di atas
backend TensorFlow untuk membuat sebuah image classifier.
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.
Dengan Keras, kita dapat membuat sebuah model ML hanya dengan beberapa baris
kode seperti di bawah.
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.
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.
Pada langkah berikutnya kita mendefinisikan arsitektur dari jaringan saraf yang akan
kita latih.
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.
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.
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.
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.
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.
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.
Hal pertama yang perlu kita lakukan seperti biasa adalah mengimpor semua library
yang dibutuhkan.
1. import tensorflow as tf
2. from tensorflow.keras.optimizers import RMSprop
3. from tensorflow.keras.preprocessing.image import ImageDataGenerator
Kemudian pastikan versi TensorFlow yang Anda gunakan adalah versi 2 ke atas.
1. print(tf.__version__)
Untuk mempersiapkan datanya Anda dapat mengetikkan kode berikut pada cell baru.
1. !wget --no-check-certificate \
2.
https://dicodingacademy.blob.core.windows.net/picodiploma/ml_pemula_academy/messy-
vs-clean-room.zip \
3. -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.
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.
1. os.listdir('/tmp/images/train')
1. os.listdir('/tmp/images/val')
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.
1. train_datagen = ImageDataGenerator(
2. rescale=1./255,
3. rotation_range=20,
4. horizontal_flip=True,
5. shear_range = 0.2,
6. fill_mode = 'nearest')
7.
8. test_datagen = ImageDataGenerator(
9. rescale=1./255,
10. rotation_range=20,
11. horizontal_flip=True,
12. shear_range = 0.2,
13. fill_mode = 'nearest')
Lalu kita dapat menggunakan objek image data generator sebelumnya untuk
mempersiapkan data latih yang akan dipelajari oleh model.
1. train_generator = train_datagen.flow_from_directory(
2. train_dir, # direktori data latih
3. target_size=(150, 150), # mengubah resolusi seluruh gambar menjadi
150x150 piksel
4. batch_size=4,
5. # karena kita merupakan masalah klasifikasi 2 kelas maka menggunakan
class_mode = 'binary'
6. class_mode='binary')
7.
8. validation_generator = test_datagen.flow_from_directory(
9. validation_dir, # direktori data validasi
10. target_size=(150, 150), # mengubah resolusi seluruh gambar menjadi 150x150
piksel
11. batch_size=4, # karena kita merupakan masalah klasifikasi 2 kelas maka
menggunakan class_mode = 'binary'
12. class_mode='binary')
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.
1. model = tf.keras.models.Sequential([
2. tf.keras.layers.Conv2D(32, (3,3), activation='relu', input_shape=(150, 150,
3)),
3. tf.keras.layers.MaxPooling2D(2, 2),
4. tf.keras.layers.Conv2D(64, (3,3), activation='relu'),
5. tf.keras.layers.MaxPooling2D(2,2),
6. tf.keras.layers.Conv2D(128, (3,3), activation='relu'),
7. tf.keras.layers.MaxPooling2D(2,2),
8. tf.keras.layers.Conv2D(128, (3,3), activation='relu'),
9. tf.keras.layers.MaxPooling2D(2,2),
10. tf.keras.layers.Flatten(),
11. tf.keras.layers.Dense(512, activation='relu'),
12. tf.keras.layers.Dense(1, activation='sigmoid')
13. ])
Setelah membuat arsitektur dari CNN, jangan lupa untuk memanggil fungsi compile
pada objek model, dan tentukan loss function serta optimizer.
1. model.compile(loss='binary_crossentropy',
2. optimizer=tf.optimizers.Adam(),
3. 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.
1. model.fit(
2. train_generator,
3. steps_per_epoch=25, # berapa batch yang akan dieksekusi pada setiap epoch
4. epochs=20,
5. validation_data=validation_generator, # menampilkan akurasi pengujian data
validasi
6. validation_steps=5, # berapa batch yang akan dieksekusi pada setiap epoch
7. verbose=2)
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:
1. import numpy as np
2. from google.colab import files
3. from keras.preprocessing import image
4. import matplotlib.pyplot as plt
5. import matplotlib.image as mpimg
6. import matplotlib.pyplot as plt
7. import matplotlib.image as mpimg
8. %matplotlib inline
9.
10. uploaded = files.upload()
11.
12. for fn in uploaded.keys():
13.
14. # predicting images
15. path = fn
16. img = image.load_img(path, target_size=(150,150))
17. imgplot = plt.imshow(img)
18. x = image.img_to_array(img)
19. x = np.expand_dims(x, axis=0)
20.
21. images = np.vstack([x])
22. classes = model.predict(images, batch_size=10)
23.
24. print(fn)
25. if classes==0:
26. print('clean')
27. else:
28. 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.
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.
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
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.