Belajar Machine Learning untuk Pemula

 

Pengenalan Machine Learning

Dalam satu dekade terakhir machine learning menjelma sebagai bidang yang berkembang sangat pesat dan terus dikembangkan para ilmuwan seluruh dunia. Inilah inti dari berbagai macam produk berteknologi tinggi terkini. Perannya sangat signifikan dalam disrupsi industri 4.0 yang sarat dengan transformasi digital. 

Tahukah Anda, apa itu machine learning?

“A field of study that gives computers the ability to learn without being explicitly programmed.”

--Arthur Samuel, 1959.

Istilah machine learning pertama kali dipopulerkan oleh Arthur Samuel, seorang ilmuwan komputer yang memelopori kecerdasan buatan pada tahun 1959. Menurut Arthur Samuel, machine learning adalah suatu cabang ilmu yang memberi komputer kemampuan untuk belajar tanpa diprogram secara eksplisit. Apa maksudnya? 

Mari kita mundur sejenak ke masa sebelum machine learning ditemukan. Seperti dikemukakan oleh Moroney [1], prinsip atau paradigma pemrograman sejak permulaan era komputasi direpresentasikan dalam diagram berikut.

YWmaC4c5SY05a_h7Zbvvc8h_KMeKVFHzhr2_NAKCDHbx3Oi5OrE1FS7H1VTA_HhNQjPLs7-EggWc63bfkTnjyoxzk0NxjD9XP3zp5CicDULJbd472c2h6zLEv6_Umioz4FuVntPv

Aturan dan data adalah masukan atau input bagi sistem. Secara eksplisit, aturan diekspresikan dalam bahasa pemrograman. Tambahan masukan berupa data kemudian akan menghasilkan solusi sebagai keluaran. Paradigma pemrograman seperti pada diagram di atas sering disebut sebagai pemrograman tradisional.

Pemrograman tradisional memiliki keterbatasan.  Sifatnya rigid dengan sekumpulan aturan “if” dan “else” untuk memproses data atau menyesuaikan dengan masukan. Sebagai contoh, kita ingin membuat sebuah program untuk mendeteksi aktivitas fisik. Kita bisa menggunakan parameter “kecepatan” sebagai data untuk membedakan aktivitas satu dan lainnya.

Misal untuk aktivitas berjalan, kita membuat algoritma program dengan bahasa python sebagai berikut.

  1. if kecepatan<4:
  2.     aktivitas=BERJALAN

Untuk aktivitas berlari, kecepatannya tentu menjadi lebih besar, misalnya 12 km/jam sehingga algoritmanya menjadi seperti ini.

  1. if kecepatan<4:
  2.     aktivitas=BERJALAN
  3. else:
  4.     aktivitas=BERLARI

Jika kemudian kita ingin mendeteksi aktivitas bersepeda, algoritma program kita menjadi seperti ini:

  1. if kecepatan<4:
  2.     aktivitas=BERJALAN
  3. elif kecepatan<12:
  4.     aktivitas=BERLARI
  5. else
  6.     aktivitas=BERSEPEDA

Cukup mudah, ya? Kita hanya perlu mendeteksi kecepatan seseorang untuk menentukan aktivitas yang sedang dilakukannya. Tapi bagaimana jika kita diminta untuk mendeteksi aktivitas lain seperti “bermain basket”?

Kita akan menemui masalah. Orang yang sedang bermain basket akan melakukan aktivitas berjalan, kadang berlari, sekejap berhenti, dan seterusnya. Lantas, bagaimana cara program mendeteksi aktivitas tersebut? Hal ini membuat kita menyadari bahwa pemrograman tradisional memiliki keterbatasan dalam menyelesaikan masalah.

Sampai sini jelas, ya? Agar lebih memahami, kita akan berikan satu contoh lain. Misal kita ingin mengetahui bagaimana pemrograman tradisional bekerja untuk mengenali gambar.

Pendekatan tradisional menggunakan teknik feature extraction untuk mendeteksi objek. Teknik ini merepresentasikan gambar dengan mengekstrak beberapa fitur pada gambar. Fitur adalah bagian kecil yang menarik, deskriptif, atau informatif. Ia bisa berupa sudut, tepi, skema warna, tekstur gambar, dan lain-lain. Beberapa contoh algoritma feature extraction yang sering digunakan adalah: Harris Corner Detection, Scale-Invariant Feature Transform (SIFT), Speeded-Up Robust Features (SURF), Features from Accelerated Segment Test (FAST), dan Binary Robust Independent Elementary Features (BRIEF)

S. Campbell dalam makalahnya yang berjudul Deep Learning vs, Traditional Computer Vision [2] menyebutkan bahwa fitur-fitur diekstrak dari gambar untuk membentuk definisi dari setiap objek kelas. Dalam tahap penerapan, definisi ini dicari di berbagai tempat pada gambar. Jika sejumlah fitur ditemukan pada gambar lain, gambar diklasifikasikan sebagai gambar yang mengandung objek tertentu. 

Kesulitan yang muncul dari pendekatan tradisional ini adalah kita perlu memilih mana fitur yang penting di setiap gambar. Seiring dengan meningkatnya jumlah kelas yang akan diklasifikasikan, proses ekstraksi fitur menjadi semakin rumit. Proses ini sangat bergantung pada keahlian manusia untuk menilai fitur mana yang bisa mendeskripsikan kelas yang berbeda. Prosesnya cukup rumit, ya? Tapi tentu ada cara yang lebih baik.

Perkenalkan: paradigma baru pemrograman dengan machine learning!

Perhatikan diagram di bawah ini. Paradigma pemrograman pada machine learning itu berkebalikan dengan pemrograman tradisional. 

w39xJhZzM_fAuGGHR6JNaY_gLFt-i-ANU7x08xciYK67zcGrbjXEf9QxA6bUJ82RmUWwFtrbokcA1vBaE1rCtYTChr9g4pobjnDE1uLWWy5_7lDpyG5OGACXTCFmCm-ctDkJtGqw

Pada pemrograman tradisional kita merepresentasikan masalah menjadi aturan dalam bahasa pemrograman. Kini ketika hal itu tidak lagi memungkinkan, kita perlu mengubah alur berpikir kita dengan cara yang berbeda. Paradigma baru pemrograman dengan machine learning adalah kita memiliki banyak sekali data dan label bagi data tersebut. Kita juga telah mengetahui keterkaitan antara data dengan label sebagai suatu solusi. 

Ilustrasinya seperti ini, ya.

yjLHLrfmLtDGNjpE7T81hfrbkTsjcwFtmYAQVZ0P9YMFviyzdC8aSoiAvv4G-M8z1yiGV-hVsC4sr2D2S78WNt256MBRt2uLCJiTDlJTcknQrcoPkFYuiiN7cYBchPnkFHaSBU3S

Algoritma machine learning mencari pola tertentu dari setiap kumpulan data yang menentukan kekhasan masing-masing untuk kemudian menyimpulkan sebuah aturan. Selanjutnya, aturan ini dapat digunakan untuk melakukan identifikasi dan prediksi bagi data baru yang relevan dengan model yang kita miliki. Sangat powerful dan menarik ya?

-RvAB6GO4Tl_h6LfUxnEtjTr6vKipeNdcqncjnhsx7tBjBQgnNrFY4eOlxxaDf1y_2sg8__oJNMqx3w0pG4Rbo6fGfzU_J-4OWmQ7PcxSOdyxV5R4j-5km-FS8AShgI968-52SBw

Ilustrasi-ilustrasi di atas menjelaskan proses belajar pada pemrograman dengan machine learning. Lantas apa contoh sederhana dari machine learning? Filter spam pada layanan email, misalnya. Saat kita menandai satu email sebagai spam, maka program akan mempelajari anatomi email tersebut untuk mengantisipasi email-email masuk berikutnya itu spam atau bukan. Jika mirip, sebuah email baru akan masuk kategori spam, demikian juga sebaliknya. 

Berikut adalah contoh email yang telah ditandai sebagai spam oleh algoritma ML dan masuk ke dalam kotak spam.

zbUCwBQ5RWDxVfp5O9cNpJeHcsBCK_YetgjOiLRVgqWSyhiiFFa-VJpoW_dq4P0TjvdXo05ygU7_QRm6Arf4mh7kdEMOklkWHNQIz-1vJZ1l7LPXlKU9UOSAF5ioSN8ktYLKznmJ

Anda tentu pernah mendapati email dalam kotak spam. Uniknya, filter email spam ini bukanlah hal yang baru, melainkan telah ada sejak tahun 1990-an saat internet tengah booming. Alhasil, hidup jutaan orang pengguna email jadi lebih mudah. Kita jadi tak perlu sering menandai sebuah email jika itu adalah spam. 

Setelah fase itu mulai muncul ratusan implementasi dari ML yang kita gunakan sehari-hari saat ini. Merentang dari rekomendasi video di Youtube, fitur pengenal wajah pada gambar, kontrol suara seperti pada Google Assistant, hingga sistem pemilihan pengemudi dan rekomendasi restoran pada aplikasi ojek online. Yup, itu semua adalah bentuk implementasi dari machine learning. Ternyata dekat ya, machine learning dengan kehidupan kita sehari-hari?

Selain machine learning, Anda juga pasti pernah mendengar tentang artificial intelligence dan deep learning. Lalu, apa hubungan antara AI, ML, dan deep learning?

Machine learning adalah cabang dari artificial intelligence. Kecerdasan buatan memiliki pengertian yang sangat luas tapi secara umum dapat dipahami sebagai komputer dengan kecerdasan layaknya manusia. Sedangkan ML memiliki arti lebih spesifik yaitu menggunakan metode statistika untuk membuat komputer dapat mempelajari pola pada data tanpa perlu diprogram secara eksplisit. Lebih lanjut, deep learning adalah cabang machine learning dengan algoritma jaringan syaraf tiruan yang dapat belajar dan beradaptasi terhadap sejumlah besar data. Algoritma jaringan syaraf tiruan pada deep learning terinspirasi dari struktur otak manusia.

Jadi, ketika Anda ditanya tentang hubungan antara artificial intelligence, machine learning, dan deep learning di kemudian hari, Anda bisa menjawabnya demikian. Seperti inilah ilustrasinya dalam sebuah diagram. 

20201229091743901b5459de9c688b2772d6ca69e37b31.jpg

Mengapa Machine Learning

Kemampuan mengenali pola dari sejumlah besar data sekaligus beradaptasi terhadap data baru adalah hal yang paling menarik, kuat, menggugah  dari machine learning. Sebab seperti kita tahu, pemrograman tradisional memiliki keterbatasan dengan sifatnya yang rigid, dengan sekumpulan aturan “if” dan “else” untuk memproses data atau menyesuaikan dengan masukan. Menurut Muller [3], penggunaan aturan untuk penentuan keputusan dengan cara ini memiliki dua kelemahan utama:

  • Logika yang digunakan untuk membuat keputusan bersifat spesifik pada ranah dan masalah tertentu. Mengubah sedikit masalah, membuat kita mungkin perlu menulis keseluruhan sistem. 

  • Mendesain aturan untuk sistem memerlukan pemahaman yang mendalam tentang bagaimana suatu keputusan harus dibuat oleh seorang ahli.

Padahal permasalahan terus muncul seiring waktu serta arus informasi dan data pun terus berubah. Machine learning, dengan kemampuannya yang secara alami bersifat adaptif terhadap data dan masukan baru, menawarkan solusi untuk masalah tersebut. Sebagai gambaran, berikut adalah contoh dua kategori permasalahan yang dapat diselesaikan dengan baik oleh algoritma machine learning.


Masalah yang Solusinya Membutuhkan Banyak Penyesuaian dan Aturan

Bayangkan jika kita bertugas mengembangkan sebuah aplikasi filter spam dengan pemrograman tradisional. Langkah-langkah konvensional yang perlu kita lakukan adalah sebagai berikut.

Pertama, kita akan mendefinisikan bagaimana sebuah email termasuk kategori spam atau bukan. Misalnya, kita mengidentifikasi bahwa pada email spam umumnya terdapat kata-kata seperti “kaya”, “instan”, dan “murah”. Kemudian, kita menulis algoritma untuk setiap pola yang kita temukan pada email spam. Program pun akan menandai sebuah email spam jika menemui pola terkait. Terakhir, kita akan mengulangi kedua langkah tadi sampai program kita cukup baik untuk diluncurkan.

Karena kita menulis program menggunakan cara tradisional, hasilnya tentu daftar panjang berisi aturan-aturan rumit yang sulit untuk di-maintain, atau harus di-update secara berkala saat kita menemukan kosakata dan pola baru yang terkait dengan email spam.

Mari bandingkan jika kita menggunakan ML untuk mengembangkan filter spam tersebut. ML akan secara otomatis mempelajari pola kata-kata yang menentukan sebuah email spam atau bukan. Program dengan ML pun menjadi relatif lebih sederhana dan mudah untuk dipelihara. Seperti digambarkan oleh Geron [2], flowchart di bawah menunjukkan bagaimana alur pengembangan sebuah proyek Machine Learning.

20210120134955c3d0892a6b059a546ee568134dd043ab.png


Masalah Rumit yang Tidak Bisa Diselesaikan dengan Pemrograman Tradisional

Ada beberapa permasalahan yang sampai saat ini belum bisa dipecahkan dengan pendekatan pemrograman tradisional. Penyebabnya bisa jadi karena masalah tersebut terlalu rumit atau bisa juga karena belum diketahui algoritma pemrograman yang tepat untuk kasus tersebut. 

Misal, kita ingin membangun sebuah sistem pengenalan suara. Menurut Geron [2], tahapan pertama yang perlu dilakukan adalah dengan membuat algoritma sederhana yang mampu membedakan kata “bagus” dan “indah”. Perhatikan bahwa kata “bagus” dimulai dengan suara bernada tinggi (“b”). Sebaliknya, kata “indah” dimulai dengan suara bernada rendah. Sehingga kita dapat membuat program untuk algoritma yang mengukur intensitas suara, kemudian menggunakannya untuk membedakan kedua kata tersebut. 

Pertanyaannya, dapatkah hal ini kita terapkan pada ribuan jenis kata, yang diucapkan oleh jutaan orang, dalam berbagai macam bahasa, di lingkungan yang mungkin terdistraksi oleh suara-suara lainnya? Sangat rumit, bukan? Maka solusi terbaik yang dapat kita lakukan saat ini adalah, membuat algoritma yang dapat belajar dengan sendirinya melalui banyak data berupa sampel rekaman untuk setiap kata.

Tentu Anda dapat menerka, algoritma apa yang dapat menyelesaikan permasalahan ini? Betul, machine learning!  

Jenis-jenis Machine Learning

Machine learning dibagi menjadi beberapa kategori. Tepatnya ada empat kategori besar, yaitu supervised learning, unsupervised learning, semi-supervised learning, dan reinforcement learning. Supervised learning dan unsupervised learning adalah dua kategori yang mungkin familiar bagi Anda. Tapi, apakah Anda tahu, pembagian kategori ini berdasarkan apa? Yup, berdasarkan karakteristik data dan jenis supervisi yang didapatkan oleh program selama pelatihan. Apa maksudnya? Simak pembahasan berikut ya.


Supervised Learning

Supervised learning adalah kategori machine learning yang menyertakan solusi yang diinginkan -yang disebut label- dalam proses pembelajarannya. Dataset yang digunakan telah memiliki label dan algoritma kemudian mempelajari pola dari pasangan data dan label tersebut. Algoritma supervised learning mudah dipahami dan performa akurasinya pun mudah diukur. Supervised learning dapat dilihat sebagai sebuah mesin/robot yang belajar menjawab pertanyaan sesuai dengan jawaban yang telah disediakan manusia.


Unsupervised Learning

Anda mungkin sudah dapat mengira bahwa pada unsupervised learning, dataset yang digunakan tidak memiliki label. Betul, model unsupervised learning melakukan proses belajar sendiri untuk melabeli atau mengelompokkan data. Unsupervised learning  dapat dilihat sebagai robot/mesin yang berusaha belajar menjawab pertanyaan secara mandiri tanpa ada jawaban yang disediakan manusia.


Semi-supervised Learning

Ini merupakan gabungan dari supervised learning dan unsupervised learning. Di sini dataset untuk pelatihan sebagian memiliki label dan sebagian tidak. Google Photos adalah contoh implementasi yang sering kita gunakan. Pada Google Photos kita bisa memberi tag atau label untuk setiap orang yang ada dalam sebuah foto. Alhasil, ketika kita mengunggah foto baru dengan wajah orang yang sebelumnya sudah kita beri label, Google Photos akan secara otomatis mengenali orang tersebut.
Salah satu contoh dari model semi supervised learning adalah Deep Belief Network (DBNs). DBNs adalah model grafis dengan multipel layer yang dapat belajar teknik mengekstrak data training secara efisien. Dua jenis layer pada DBNs adalah visible atau input layer dan hidden layer.

Menurut Geron [4], DBNs berdasar pada komponen unsupervised yang disebut restricted Boltzmann machine (RBMs). RBMs dilatih secara berurutan dengan algoritma unsupervised learning, kemudian seluruh sistem disesuaikan dengan teknik supervised learning.

Campbell [2] dalam tulisannya menyatakan bahwa pendekatan DBNs telah berhasil menyelesaikan pemodelan akustik pada speech recognition. DBNs menunjukkan sifat perkiraan yang kuat, peningkatan kinerja, dan merupakan parameter yang efisien.


Reinforcement Learning

Reinforcement Learning dikenal sebagai model yang belajar menggunakan sistem reward dan penalti. Menurut Winder [5], reinforcement learning adalah teknik yang mempelajari bagaimana membuat keputusan terbaik, secara berurutan, untuk memaksimalkan ukuran sukses kehidupan nyata. Entitas pembuat keputusan belajar melalui proses trial dan eror. 

Reinforcement learning memiliki empat komponen, yaitu action, agent, environment, dan reward. Action adalah setiap keputusan yang diambil. Misal, saat kita berkendara, action yang kita lakukan adalah mengendalikan kemudi, menginjak gas, dan mengerem. Agent adalah entitas yang membuat keputusan, contohnya adalah perangkat lunak, atau robot, atau bahkan manusia. Environment adalah sarana untuk berinteraksi, yang dapat menerima action dan memberikan respon berupa hasil maupun data berupa satu set observasi baru. Reward diberikan saat agent berhasil menyelesaikan tantangan. Mekanisme feedback ini membuat agent belajar tentang tindakan mana yang menyebabkan kesuksesan (menghasilkan reward), atau kegagalan (menghasilkan penalti). Keempat komponen ini merepresentasikan Markov decision process (MDP).

Model reinforcement learning belajar agar terus mendapatkan reward dan menghindari penalti. AlphaGo, sebuah program yang dikembangkan oleh Google DeepMind adalah contoh terkenal dari reinforcement learning. AlphaGo dibuat untuk memainkan permainan Go, sebuah permainan papan kuno yang berasal dari Cina. AlphaGo mempelajari setiap langkah dalam jutaan permainan Go, untuk terus mendapatkan reward yaitu memenangkan permainan. AlphaGo terkenal setelah menjadi program komputer pertama yang berhasil mengalahkan seorang pemain Go profesional yang juga merupakan juara dunia. Luar biasa, ya? 

Penjelasan lebih lanjut tentang reinforcement learning akan kita pelajari di Kelas selanjutnya: Belajar Pengembangan Machine Learning. Pada kelas Belajar Machine Learning Pemula ini, kita akan fokuskan belajar tentang supervised learning dan unsupervised learning. Penjelasan lebih lanjut tentang algoritma-algoritma pada dua kategori ini akan tersedia di modul-modul selanjutnya. Semangat untuk lanjut ke materi berikutnya!

Library Populer pada Python untuk Machine Learning dan Data Science

Python merupakan bahasa paling populer yang digunakan oleh para Data Scientist dan pengembang Machine Learning (ML). Python adalah kombinasi antara general-purpose programming language yang powerful dan domain-specific scripting language yang mudah digunakan. Mengapa Python sangat populer? Salah satu alasan yang menarik adalah beberapa perusahaan teknologi raksasa seperti Google dan Facebook memilih Python sebagai bahasa utama untuk framework machine learning mereka yaitu, TensorFlow dan PyTorch.

Keunggulan lain yang dimiliki Python adalah ia merupakan salah satu bahasa pemrograman yang mudah dipelajari karena sintaksnya sederhana. Banyak orang tanpa latar belakang IT namun ingin mengejar karir bidang ML atau data science,  dapat dengan mudah mempelajari bahasa pemrograman Python. Hal ini juga dipermudah dengan kemampuan Python dalam berinteraksi langsung dengan kode, baik menggunakan terminal atau tools lain seperti Jupyter Notebook dan Google Colaboratory

Selain itu semua, faktor lain yang membuat Python populer adalah lengkapnya library yang dapat dipakai pada pengembangan proyek ML dari awal sampai akhir. Python memiliki library untuk data loading, visualization, statistics, data processing, natural language processing, image processing, dan lain sebagainya. 

Beberapa library yang memudahkan kita dalam mengerjakan proyek ML ditunjukkan dalam daftar berikut ini.

 

Numpy

202104161017186f793b4d82dcc213241416b26546593b.jpeg

Numpy sangat terkenal sebagai library untuk memproses larik atau array. Fungsi-fungsi kompleks di baliknya membuat Numpy sangat tangguh dalam memproses larik multidimensi dan matriks berukuran besar. Library ML seperti TensorFlow juga menggunakan Numpy untuk memproses tensor atau sebuah larik N dimensi.

 

Pandas

2021041610171747500e96fff3c545df5cec6525c027eb.jpeg

Pandas menjadi salah satu library favorit untuk analisis dan manipulasi data. Kenapa keduanya penting? Sebelum masuk ke tahap pengembangan model, data perlu diproses dan dibersihkan. Proses ini bahkan merupakan proses yang paling banyak memakan waktu dalam pengembangan proyek ML. Library pandas membuat pemrosesan dan pembersihan data menjadi lebih mudah.

 

Matplotlib

2021041610171708504778d59315b8e76e04a566680f20.jpeg

Matplotlib adalah sebuah library untuk membuat plot atau visualisasi data dalam 2 dimensi. Matplotlib mampu menghasilkan grafik dengan kualitas tinggi. Matplotlib dapat dipakai untuk membuat plot seperti histogram, scatter plot, grafik batang, pie chart, hanya dengan beberapa baris kode. Library ini sangat ramah pengguna. 

 

Scikit Learn

2021041610171712218c6a274caa672735aa0e4088f2e7.jpeg

Scikit Learn merupakan salah satu library ML yang sangat populer. Scikit Learn menyediakan banyak pilihan algoritma machine learning yang dapat langsung dipakai seperti klasifikasi, regresi, clustering, dimensionality reduction, dan pemrosesan data. Selain itu Scikit Learn juga dapat dipakai untuk analisis data.

 

TensorFlow

202104161017170eef5ba6db9fb4b2611e0ca4a6a0c948.jpeg

TensorFlow adalah framework open source untuk machine learning yang dikembangkan dan digunakan oleh Google. TensorFlow memudahkan pembuatan model ML bagi pemula maupun ahli. Ia dapat dipakai untuk deep learning, computer vision, pemrosesan bahasa alami (Natural Language Processing), serta reinforcement learning.

 

PyTorch

202104161017187bb045d1f8b73207c37c3ab5161436e3.jpeg

Dikembangkan oleh Facebook, PyTorch adalah library yang dapat dipakai untuk masalah ML, computer vision, hingga pemrosesan bahasa alami. Bersaing dengan TensorFlow khususnya sebagai framework machine learning, PyTorch lebih populer di kalangan akademisi dibanding TensorFlow. Namun dalam industri, TensorFlow lebih populer karena skalabilitasnya lebih baik dibanding PyTorch.

 

Keras

202104161017176b9b442f4eaa2b09ac26e8414da4a31c.jpeg

Keras adalah adalah library deep learning yang luar biasa. Salah satu faktor yang membuat keras sangat populer adalah penggunaannya yang minimalis dan sinpel dalam mengembangkan deep learning. Keras dibangun di atas TensorFlow yang menjadikan Keras sebagai API dengan level lebih tinggi (Higher level API) dari TensorFlow sehingga antarmukanya lebih mudah dari TensorFlow. Keras sangat cocok untuk mengembangkan model deep learning dengan waktu yang lebih singkat atau untuk pembuatan prototipe.

Data Collecting

Pada materi sebelumnya Anda telah belajar tentang pengenalan machine learning (ML) dan jenis-jenis library machine learning. Apakah Anda bingung harus melangkah dari manakah untuk memulai proyek ML?

OK Jangan khawatir. Kita akan belajar sedikit demi sedikit ya. Tahap pertama dari proses pengerjaan proyek ML adalah data collecting, yaitu proses pengumpulan data.

“Data is the new oil. It’s valuable, but if unrefined it cannot really be used. It has to be changed into gas, plastic, chemicals, etc to create a valuable entity that drives profitable activity; so must data be broken down, analyzed for it to have value.”

-Clive Humby, 2006-

Kutipan di atas adalah kalimat terkenal tentang data yang pertama kali disampaikan oleh Clive Humby, seorang matematikawan asal Inggris pada tahun 2006. Kutipan tersebut menjadi sangat populer setelah The Economist mempublikasikan laporan tahun 2017 yang berjudul The World’s most valuable resource is no longer oil, but data.

uYpZ3DE5SBNiFDvxxW8bE6ZHc15jIKPjUP9h7oP8_nkghXmL5LlVBYZsKAKr_GsHkuWry1SqyQgu5uX-VNTSjw26S7Y0wxXkf6XkVrIwFxjX2CNShvRMucLaRdCzpmydNyaUsHoF

Perangkat cerdas dan internet telah membuat data menjadi berlimpah. Banjir arus data yang terjadi di era digital mengubah sifat persaingan. Perusahaan teknologi raksasa berlomba-lomba mengumpulkan banyak data untuk meningkatkan produknya, menarik lebih banyak pengguna, menghasilkan lebih banyak data, dan seterusnya. Mereka menjangkau seluruh sektor ekonomi: Google bisa melihat apa yang ditelusuri dan dicari oleh orang-orang, Facebook bisa melihat apa yang mereka bagikan, dan Amazon mengetahui apa yang mereka beli. Mereka seolah memiliki “God’s eyes view” tentang aktivitas di pasar mereka sendiri dan sekitarnya.

Luar biasa ya? Sekarang hampir semua perusahaan mengumpulkan data untuk sumber daya mereka.

Lantas, bagaimana cara mengumpulkan data? Ada tiga cara yang bisa kita lakukan untuk mengumpulkan data, yaitu.

  • Mengekstrasi data (misal dari internet, riset, survei, dll).

  • Mengumpulkan dan membuat dataset Anda sendiri dari nol.

  • Menggunakan dataset yang telah ada.

Untuk saat ini, kita akan menggunakan dataset yang sudah ada dari platform penyedia data. Di masa mendatang tentu Anda dapat mencoba mengekstrak atau mengumpulkan dataset Anda sendiri ya. 

Menemukan dataset yang tepat adalah salah satu langkah penting dalam proyek machine learning. Saat ini, tersedia banyak sumber data di internet yang dapat kita manfaatkan. Beberapa di antaranya yang perlu Anda ketahui adalah sebagai berikut.

  • UC Irvine Machine Learning Repository
    UCI ML Repository adalah kumpulan database, teori, dan generator data yang digunakan oleh komunitas ML untuk analisis algoritma machine learning. Arsip tersebut awalnya dibuat sebagai arsip ftp pada tahun 1987 oleh David Aha, seorang mahasiswa pascasarjana UC Irvine. Sejak saat itu database UCI ML Repository ini digunakan secara luas oleh mahasiswa, staf pengajar, dan peneliti di seluruh dunia sebagai salah satu sumber utama dataset machine learning.

  • Kaggle Dataset
    Kaggle adalah komunitas belajar ilmu data paling populer di dunia. Kaggle memiliki peralatan dan sumber daya yang kuat untuk membantu kita belajar data science dan machine learning. Saat ini Kaggle memiliki 50.000 lebih publik dataset, baik dataset bersifat dummy ataupun riil yang dapat Anda unduh secara bebas.

  • Google Dataset Search Engine
    Pada akhir tahun 2018 Google meluncurkan Dataset Search, sebuah mesin pencari dataset. Tools ini bertujuan untuk menyatukan ribuan repositori dataset yang berbeda agar dataset tersebut lebih mudah ditemukan oleh pengguna.

  • Tensorflow Dataset
    Seperti yang telah dijelaskan pada sub-modul sebelumnya, TensorFlow adalah framework open source untuk machine learning yang dikembangkan dan digunakan oleh Google. Selain menyediakan learning resources, tensorflow juga menyediakan data resources yang cukup lengkap di library-nya mulai dari audio data, images, text, video, dan lainnya.

  • US Government Data
    Bagi Anda yang tertarik untuk mempelajari fenomena yang terjadi di Amerika Serikat, pemerintah Amerika meluncurkan data online resources yang mudah diakses oleh publik. Isinya antara lain data badai, data angka kelulusan dan dropout, data hewan-hewan yang terancam punah, statistik kriminal, dan berbagai data menarik lainnya.

  • Satu Data Indonesia
    Pemerintah Indonesia, melalui portal resmi Satu Data Indonesia menjalankan kebijakan tata kelola data pemerintah yang bertujuan untuk menciptakan data berkualitas, mudah diakses, dapat dibagi, dan digunakan oleh Instansi Pusat serta Daerah. Data dalam portal ini dapat diakses secara terbuka dan dikategorikan sebagai data publik, sehingga tidak memuat rahasia negara, rahasia pribadi, atau hal lain sejenisnya sebagaimana diatur dalam Undang-undang nomor 14 Tahun 2008 tentang Keterbukaan Informasi Publik.

  • Open Data Pemerintah Jawa Barat
    Open data Jawa Barat adalah portal resmi data terbuka milik Pemerintah Provinsi Jawa Barat yang berisikan data-data dari Perangkat Daerah di lingkungan Pemerintah Provinsi Jawa Barat. Open Data Jawa Barat ada untuk dapat memenuhi kebutuhan data publik bagi masyarakat. Data disajikan dengan akurat, akuntabel, valid, mudah diakses dan berkelanjutan. 

Data Cleaning

Kita mungkin berpikir pekerjaan data scientist atau machine learning engineer adalah membuat algoritma, mengeksplor data, membuat analisis, dan prediksi. Padahal faktanya, seseorang yang bekerja di bidang data membutuhkan sebagian besar waktunya untuk melakukan proses data cleaning. Hasil penelitian CrowdFlower dalam 2016 Data Science Report menyatakan bahwa 3 dari 5 data scientist yang disurvei menggunakan sebagian besar waktunya untuk membersihkan dan mengatur data.

58bq-CVvkmsUVbBK0JEov8kAuCPv9BeyqM2a6lXyQipCJAKzLec4bF2-YRW9Mfr2sWC1xOChsAGBkbnG8LluMaCoszlAPWVquFOT3CBIDpjlWaQTqByKE5GuiKFJRVBRPkMi9ZCl

Mengapa data cleaning begitu penting sehingga sebagian besar waktu digunakan untuk menyelesaikan proses ini? 

Data cleaning penting sebab proses ini meningkatkan kualitas data yang juga berpengaruh terhadap produktivitas kerja secara keseluruhan. Data yang tidak akurat bisa berpengaruh buruk terhadap akurasi dan performa model. Saat kita melakukan proses data cleaning, kita membuang data dan informasi yang tidak dibutuhkan sehingga kita akan mendapatkan data yang berkualitas. Data yang akurat dan berkualitas akan berpengaruh positif terhadap proses pengambilan keputusan. Pernahkah mendengar ungkapan “Garbage In - Garbage Out?” Dalam konteks machine learning,  jika input yang Anda masukkan itu buruk, sudah barang tentu hasil olah data Anda pun akan buruk. 

Sampai sini paham, ya?

Data cleaning merupakan tahapan penting yang tidak boleh Anda lewatkan. Berikut adalah beberapa hal 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 disamakan dan dibuat konsisten terlebih dahulu.

  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 jika data duplikat tersebut besar jumlahnya. 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 2 (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 (mean) atau nilai yang paling sering muncul (modus), atau nilai tengah (median).

    Berikut adalah contoh handling missing value dengan nilai rata-rata (mean).
    iJhpmQykUUv2M7P4NxV04DhiXYdrsHN57HwSpnr6eu8ZkVAgRFnMCkhxR5_u7sXP51T6PGHk9mV2orFKecm5LIX3R_R_QPL2wjy-0Kjq-98F0L7lne8PBM4Bg-5otfCbU8YeRXpQ

  1. Skewness Distribution
    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.
    dkIWiD82UpHE6-Ut-ZvSaD43MkAikM8spFXfCYo1U1RUz0Wdi3GkKh1XGz3WcUecR2rhMk64EiiV35HMdoMjHWLlPFVfnhGKU0jCTEyoumeuYrxyvDrINGnVriWCEsJan3H-87H7
    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.

Jika Anda ingin membaca lebih lanjut tentang proses data cleaning, silakan buka tautan ini atau tautan berikut.

Data Processing

Pada tahap ini, setelah data diambil dari sumber tertentu, ia dimasukkan pada suatu environment. Lantas data diproses agar bisa diolah oleh model machine learning. Menjalankan proses 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 dan seintuitif 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
    Structured 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
    SPSS atau Statistical Package for the Social Science adalah sebuah berkas dari perangkat lunak yang biasa dipakai untuk statistik dan pengolahan data. Berkas SPSS yang disimpan memiliki ekstensi .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 seperti yang telah dibahas di sub-modul sebelumnya.

Untuk tahapan selanjutnya Anda dapat memilih untuk menulis dan menjalankan kode pada IBM Watson Studio atau Google Colaboratory. 

IBM Watson Studio adalah salah satu layanan dari IBM yang banyak digunakan oleh analis data dan Data Scientist. Anda juga dapat menjalankan kode secara online pada layanan seperti IBM Watson Studio tanpa perlu menginstal perangkat lunak apapun pada komputer Anda. Berikut adalah tutorial bagaimana menggunakan Notebook pada Watson Studio untuk menulis dan menjalankan kode Python.

Sebelum menggunakan IBM Watson Studio, buatlah akun IBM Cloud terlebih dahulu. Akun IBM Cloud dapat dipakai untuk mengakses IBM Watson Studio, IBM Watson Machine Learning, dan IBM Cloud. Untuk mendaftar akun IBM Cloud, kunjungi tautan berikut. 

  1. Pada halaman registrasi mari isikan  email dan password Anda lalu lanjutkan proses yang diminta hingga akun Anda berhasil dibuat.
    I8TsCAXWQvJUv_626aXlUCLH5KkMZSe2WCKFkEgAv4UYhlqYKVsnRgUzrPgvOu0c8wGUYwa17NdSUB08ub_BzGWJ462z77ogjtVU2VSnfs4S9x4NM3NszftAKCeXQgrr3dOvJwFv

  2. Setelah akun Anda jadi, login ke IBM cloud dengan mengunjungi tautan https://cloud.ibm.com/login. Isi kolom IBMid dengan email yang telah Anda daftarkan di tahap sebelumnya.
    Ws-isWEKE0tIHVqjY0QdWhYUk0kAHB9Ms-YNjoLuiaEnbO4I65cDc944qca2Qcb_kElfg0qcZ0xypuzUfp7EW4VbrgSMQFrL0aAANiEHbaCOEp837cbLjbjovIy8bLB3ALAUUB5S

  3. Berikut adalah tampilan ketika telah login ke akun IBM Cloud Anda.
    u0ySdgVDjZsjGXuS-pCZxwQVUmogwDV1PplijDofwsdJ3_ErkwzvrNHsRqMVfZBhw8OeUDkH19rgAZRMvW3U5DUbElOk-MkBtpx7dLXCyOZwGw8C6M53UFIIEyRRN1WqDTarxefC

  4. Kemudian pada search bar ketikkan “Object Storage”  ;lalu pilih item tersebut.
    UFEOte_2fj9xbFCXF_kf_6QrKUnAdx7VH-_Lbt__tH8a98ALa5Ni9E6yK9xZ4ntDG3dO_MMJ82ELWx1aiXi1A2DVgFFbcmUVBLsAev1OGwcI6UnX8v7hi1FNNkj9XJ_iJirF7Q9t

  5. Kemudian pada halaman Object Storage pilih Lite pada bagan Plan. Perhatikan bahwa satu akun hanya dapat memiliki 1 object storage bertipe Lite. Jika Anda telah membuat object storage bertipe Lite sebelumnya, Anda harus menghapus dahulu object storage tersebut untuk bisa membuat object storage lite baru. Untuk Service Name dan Resource Group Anda tidak perlu merubah isinya. Setelah itu klik tombol Create yang ada di sidebar sebelah kanan.
    rM1ZPXqFK0ZLpx3VlONg8MxEe1ME4vuabFlRHOGBUVRMnOBC7_BKoJtRpZUw-tihpdkhe8oHl0qSBvmgvyIt3_0C8suwXWjq7J-pWlbSa72G3QLDQSmBVDXi4VYZzYdXb0RykeO0

  6. Setelah Anda memiliki akun IBM Cloud dan membuat layanan Object Storage, sekarang mari kita beralih ke IBM Cloud Pak dengan klik tautan berikut. Login ke Watson Studio menggunakan akun IBM Cloud Anda. Jangan lupa untuk mengisi username, password, Setelah Anda memiliki akun IBM Cloud dan membuat layanan Object Storage, sekarang mari kita beralih ke IBM Cloud Pak dengan klik tautan berikut. Login ke Watson Studio menggunakan akun IBM Cloud Anda. Jangan lupa untuk mengisi username, password, dan memilih region sesuai dengan yang Anda gunakan saat membuat service di IBM Cloud.
    sg_UrfUYgu6XgFrUjw3dhWJGyvWFZB9NfZJLY54wKfk4Vd9YIWsjmbWjU8pCTsZ5Shwyq3rbRYe5SCaSlcqHxlt4t7W5VDmH47aHNIPK8vIc8UPkj2_XWWxkHGlrPDUu0HZHd-h3

  7. Ketika Anda login pertama kali akan ada pengaturan login otomatis yang dilakukan oleh website. Setelah pengaturan login selesai, Anda dapat klik tombol Go To IBM Cloud Pak For Data.
    If9bAzqAska60kUqeaGgLoM4GL_TZnTxA7gfEWiI0ZmgpDMGXKVE__BZOG6DciF5EH6B15LFWbmTtgFKx8MfMO58IeHXkHMTdWky2OKb1pFw4ysCVPyLjtyNQyuu5z3HkwLXxsmw

  8. Berikut adalah halaman muka ketika Anda login ke akun IBM Cloud Pak. Website IBM Cloud Pak memuat layanan Watson Studios, Watson Machine Learning, dan beberapa layanan IBM lainnya. Untuk mulai mengembangkan proyek ML Anda di Watson Studio, klik tombol New Project seperti yang berada di dalam kotak berwarna merah di bawah.
    12NXGLdS5bCe5MfARASwsaQjqzVZ4NvLv9WgoM976FpRoLokhB7fOwT6hvPZF5ZuuaoS88MEo4fZjXDWPjCPEUnd3s1A7DjiZCrzSTk8TFrfeFGQB1aOTlCg9o9YkOwl2AqyG94W

  9. Pada laman Create a project pilih Create an empty project.
    h7b4rjlUsYLOxSnlITTlk0qFztykCyVHiVF4IChsfP6YWm6ArRqrbyxwbcnNvUxWHkdV3Ui4HamoAi2NPodyTYgwsJ2axOw7ttxzk4DpkyveaJbGaFYXndym2rPlUn_1I0Lt_iWy

  10. Pada halaman New project isikan nama proyek Anda beserta deskripsinya. Storage akan secara otomatis memilih storage buatan Anda di IBM Cloud. Setelah mengisi seluruh kolom, klik tombol Create.
    iWWy-jKBOk0XUCP3GubTH3JMOhMbG0LJIzhecK1gxT8BxEnQodmWSvHBT7djhJFsn8t_oOAmpd1lWCwLQl4N-lEKZyPJUCt0HlNuE7cPt-o9DSSMD8xtCGHSHo8_D0MtbWk-yJjT

  11. Tampilan dari halaman project Anda terlihat seperti di bawah.
    YrrCvWpI5sPvhYMszR5oZg1B4JTdvd6ufetq8j26u_9xA8LbdsMt5If09cY6YuEu2stM4Z4CmuLFTCWNrIVMfAK22egt9ic5JJEQI4hT1yOpT1aEamKTCneKFHOCCY2pLX2PN-iS

  12. Untuk membuat Notebook pada Watson Studio klik tombol Add to Project lalu pilih Notebook.
    UXtlwsp-f2pVloQGawRaVz9f7RzJ7DjRQ_H6T7av7CM4cGGqIH4-QXvvNTuEKCy93-8NkgWdxqRdAvLWrz3etkl0uBR18tV2zYslb5VgzLnBsgMFalQ7qb-PaauvVTtgatHJC7St

  13. Di halaman New notebook isi nama notebook yang Anda inginkan lalu klik Create.
    7-s57Syc7WJjH7M-X4FwXRdzujBWECgtgi6QQFic-6AhdxzNksmkSydF3-YzczjWMp9B9UWtvUIhLk8GSJjusMXuWOV6bhcJoPC4uAB1vBBfp7X0Cp-mp-jfL8KbxMy8VBFmg5g3 

Sampai tahap ini Anda sudah bisa mulai menulis kode di Notebook Watson Studio.

Latihan Konversi Pandas Dataframe

Kode program yang akan diajarkan di sini bisa diunduh di tautan berikut ini. Untuk membukanya, upload berkasnya ke Watson Studio atau Google Colab.


Tujuan 

Setelah sebelumnya kita mengenal library Pandas, sekarang kita akan belajar menggunakan library tersebut.


Tahapan Latihan

Pandas memiliki fungsi untuk mengubah data dari berbagai jenis menjadi dataframe seperti yang telah dibahas di submodul sebelumnya. Tahapan dalam mengubah data menjadi dataframe adalah sebagai berikut:

  1. Persiapkan dataset yang akan dikonversi.
  2. Impor library Pandas.
  3. Gunakan fungsi read_csv() untuk mengonversi data.


Codelab

Pertama unduh contoh data berformat .csv pada tautan berikut. Lalu buat sebuah Notebook pada IBM Watson Studio.

Pada notebook Anda klik tombol Find and Add Data yang berada di kotak berwarna merah sebelah kanan atas. Lalu drag and drop atau upload file .csv yang telah diunduh sebelumnya.
202010011120282b24ccb428d10d01b29cc7b2497e1977.pngJika berkas Anda berhasil diunggah, data tersebut akan muncul di kolom Find and Add data di bawah kolom untuk mengunggah berkas. Dapat dilihat bahwa data kita muncul pada kotak berwarna kuning..
2020100111230167d8b9cdddfc9fec79535679cd934917.png
Untuk mengubah berkas csv menjadi dataframe sangat mudah dilakukan di Watson studio. Kita tinggal memilih menu dropdown yang ada pada data kita dan klik pandas Dataframe.
202010011126134a2a5d93d897ddc7755fa7861a0bc509.pngWatson Studio akan secara otomatis menulis kode untuk mengubah berkas .csv kita menjadi sebuah dataframe dan menampilkan 5 baris pertama dari dataframe dengan fungsi head().
2020100111280618a350d7fca133d3468ff6eee325ddcb.png


Data Preparation dengan Teknik One-Hot-Encoding

Setelah dataset dibersihkan, masih ada beberapa tahap yang perlu dilakukan agar dataset benar-benar siap untuk diproses oleh model machine learning. Biasanya, dataset Anda akan terdiri dari dua jenis data: kategorik dan numerik. Contoh data numerik adalah: ukuran panjang, suhu, nilai uang, hitungan dalam bentuk angka, dll, yang terdiri dari bilangan integer (seperti -1, 0, 1, 2, 3, dan seterusnya) atau bilangan float (seperti -1.0, 2.5, 39.99, dan seterusnya). Setiap nilai dari data dapat diasumsikan memiliki hubungan dengan data lain karena data numerik dapat dibandingkan dan memiliki ukuran yang jelas. Misal, Anda dapat mengatakan bahwa panjang 39 m lebih besar dibanding 21 m. Jenis data ini terdefinisi dengan baik, dapat dioperasikan dengan metode statistik, dan mudah dipahami oleh komputer. 

Jenis data lain yang sering kita temui adalah data kategorik. Data kategorik adalah data yang berupa kategori dan berjenis string, tidak dapat diukur atau didefinisikan dengan angka atau bilangan. Contoh data kategorik adalah sebuah kolom pada dataset yang berisi perkiraan cuaca seperti cerah, berawan, hujan, atau berkabut. Contoh lain dari data kategorik adalah jenis buah misalnya apel, pisang, semangka, dan jeruk. Pada jenis data ini, kita tidak bisa mendefinisikan operasi perbandingan seperti lebih besar dari, sama dengan, dan lebih kecil dari. Dan dengan demikian, kita juga tidak dapat mengurutkan dan melakukan operasi statistik terhadap data jenis ini.

Umumnya, model machine learning tidak dapat mengolah data kategorik, sehingga kita perlu melakukan konversi data kategorik menjadi data numerik. Banyak model machine learning seperti Regresi Linear dan Support Vector Machine (kedua model ini akan dibahas pada modul-modul selanjutnya) yang hanya menerima input numerik sehingga tidak bisa memproses data kategorik. Salah satu teknik untuk mengubah data kategorik menjadi data numerik adalah dengan menggunakan One Hot Encoding atau yang juga dikenal sebagai dummy variables. One Hot Encoding mengubah data kategorik dengan membuat kolom baru untuk setiap kategori seperti gambar di bawah. 

zOUhYcTGEbw0DJHjmpStkC2ShR38lR8ZZY676cr9xspCoxkXGWogYyQgovc5YCe5qRqRR14L2L1-kL3e6EzvpqLEBeG1A_Dg2YiNuBS-TpZiXh3TsC9yNVpIbPVdvV1pVmPChuXL

Pada modul latihan nanti, Anda akan berlatih bagaimana menerapkan teknik one-hot-encoding pada dataset. Sudah siap untuk lanjut?

Data Preparation dengan Normalization dan Standardization

Selain konversi data kategorik menjadi numerik, ada beberapa teknik lain dalam data preparation. Teknik yang akan dibahas antara lain membuang outliernormalization, dan standardization.


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 oleh kesalahan dalam pengumpulan data atau nilai tersebut benar ada dan memang unik dari kumpulan nilai lainnya.

Apa pun alasan kemunculannya, Anda perlu tahu cara mengidentifikasi dan memproses outlier. Ini adalah bagian penting dalam persiapan data di dalam machine learning. Salah satu cara termudah untuk mengecek apakah terdapat outlier dalam data kita adalah dengan melakukan visualisasi.

Berikut adalah contoh visualisasi terhadap data yang memiliki outlier.

20201223164503f26a8f947fc595252a8e8d464cf69a54.png

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.

Nama

Gaji

Umur

A

12.000.000

33

B

35.000.000

45

C

4.000.000

23

D

6.500.000

26

E

9.000.000

29

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.

Salah satu contoh dari normalization adalah min-max scaling di mana nilai-nilai dipetakan ke dalam skala 0 sampai 1. SKLearn menyediakan library untuk normalization

Pada Colab kita Import library MinMaxScaler dan masukkan data dari tabel sebelumnya.

  1. from sklearn.preprocessing import MinMaxScaler
  2. data = [[12000000, 33], [35000000, 45], [4000000, 23], [6500000, 26], [9000000, 29]]

Pada cell selanjutnya kita buat sebuah objek MinMaxScaler dan panggil fungsi fit() dan mengisi argumen data seperti potongan kode di bawah. Fungsi fit() dari objek MinMaxSclaer adalah fungsi untuk menghitung nilai minimum dan maksimum pada tiap kolom.

  1. scaler = MinMaxScaler()
  2. scaler.fit(data)

Apabila dijalankan, maka hasilnya sebagai berikut.

2020122316430265abeb7efc0345456dd3ccb4496343ce.png

Sampai pada fungsi fit() ini, komputer baru menghitung nilai minimum dan maksimum pada tiap kolom dan belum melakukan operasi scaler pada data. Terakhir kita panggil fungsi transform() yang akan mengaplikasikan scaler pada data, sebagai berikut.

  1. print(scaler.transform(data))

Hasil dari kode di atas seperti ditunjukkan pada gambar berikut. 20201223164358efb5bd04051e484f23323c99bc40815d.png

Setiap nilai dari kolom gaji dan umur telah dipetakan pada skala yang sama seperti di bawah ini.

Nama 

Gaji

Umur

A

0.25806452

0.45454545

B

1

1

C

0

0

D

0.08064516

0.13636364

E

0.16129032

0.27272727

Untuk informasi lebih detail tentang Min Max Scaler, silakan kunjungi tautan berikut.


Standardization

Standardization adalah proses 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.

202012231645430c3498f0a9b96b8b1e7e83a8998784a6.png

Fungsi standardisasi itu serupa dengan normalization. Keduanya berfungsi menyamakan skala nilai dari tiap atribut pada data. SKLearn menyediakan library untuk mengaplikasikan standard scaler pada data.

Nama

Gaji

Umur

A

12.000.000

33

B

35.000.000

45

C

4.000.000

23

D

6.500.000

26

E

9.000.000

29

Pada colab di cell pertama kita akan mengimpor library preprocessing dari scikit learn lalu membuat data dummy sesuai dengan tabel di atas.

  1. from sklearn import preprocessing
  2. data = [[12000000, 33], [35000000, 45], [4000000, 23], [6500000, 26], [9000000, 29]]

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

Hasil akhirnya apabila dijalankan seperti di bawah ini.

202012231646499b4d8e486e57376a61692199d091537c.png

Untuk informasi lebih detail tentang standardization, silakan kunjungi tautan berikut.

Data Storage/Warehouse 

Data warehouse pertama kali muncul pada tahun akhir 1980-an. Tujuan awalnya adalah untuk membantu proses aliran data dari sistem operasional ke dalam sistem pendukung keputusan atau decision-support system (DSS). Seiring berjalannya waktu, data warehouse berkembang menjadi lebih efisien. Ia berevolusi dari penyimpanan informasi pendukung platform business intelligence menjadi infrastruktur analitis luas yang mendukung berbagai macam aplikasi.

AI dan machine learning telah mengubah banyak hal dari mulai industri, layanan, aset perusahaan, juga sistem data warehouse. Ekspansi big data dan penerapan teknologi digital mendorong perubahan dalam kapabilitas data warehouse. Untuk mendukung hal tersebut, ada beberapa tools yang perlu kita ketahui.


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.


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, graph, key-value, dan column based, antara lain. 

  1. Dokumen : menghubungkan setiap kunci dengan struktur data kompleks yang disebut dokumen. 
  2. Graph : menyimpan informasi tentang jaringan data, seperti koneksi sosial. 
  3. Nilai-kunci : adalah database NoSQL paling sederhana di mana setiap elemen dalam database disimpan sebagai nilai yang diasosiasikan dengan sebuah kunci. 
  4. Kolom : mnyimpan data yang memiliki volume besar, di mana setiap elemen data disimpan pada kolom bukan pada baris.

Beberapa database NoSQL terpopuler adalah MongoDB, CouchDB, Cassandra, Redis, Neo4J, dan Riak. Jika ingin mengetahui lebih lanjut tentang NoSQL, kunjungi tautan berikut.


Firebase Realtime Database

Sesuai namanya, “Database Realtime” adalah database yang menyimpan data yang berubah seiring waktu. Data jumlah penjualan harian, pengunjung mall setiap jam, arus lalu lintas setiap menit, atau fluktuasi saham setiap detik merupakan beberapa contoh data realtime. Data pada database realtime disimpan dalam format waktu dan nilai pada waktu yang terkait seperti gambar di bawah.

Timestamp

Metric 1

2019-03-28 00:00:01

2356

2019-03-28 00:00:02

6874

2019-03-28 00:00:03

3245

2019-03-28 00:00:04

2340


Firebase Realtime Database (FRD) adalah database berbasis cloud yang didesain khusus untuk mengelola data realtime. FRD dapat menyimpan dan melakukan sinkronisasi data secara realtime di mana setiap kali ada perubahan data terbaru, FRD langsung menyimpannya pada Cloud. FRD juga dilengkapi fitur offline di mana ketika tidak ada koneksi internet, FRD akan menyimpan data secara lokal, kemudian saat online, akan melakukan sinkronisasi ke Cloud. Keren, kan?


Spark

Apache Spark adalah perangkat lunak untuk pemrosesan dan analisis data berskala besar. Spark dapat digunakan dalam proses ETL (Extract, Transform, Load), 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.


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.

Sampai sini paham, ya?

Sebagai ML Engineer masa depan, kita harus mampu mengoperasikan berbagai jenis data storage dan data warehouse. Sebabnya, perusahaan tempat kita ingin bekerja sebagai ML Engineer nanti, tidak selalu menggunakan data warehouse atau data storage yang sama.

Datasets

Dataset yang telah dibersihkan dan diproses kemudian siap kita latih dengan machine learning. Satu-satunya cara untuk mengetahui apakah model machine learning kita bagus atau tidak adalah dengan mengujinya pada kasus atau data baru yang belum dikenali oleh model. Kita bisa saja membuat model dan langsung mengujinya pada tahap produksi lalu memonitor kualitasnya. Tapi jika ternyata model yang kita kembangkan bekerja dengan buruk, pelanggan dan klien kita akan komplain. Selain itu, cara ini tentu akan memakan sumber daya dan biaya yang lebih besar.


Training Set dan Test Set

Pilihan yang lebih baik adalah dengan membagi dataset menjadi 2 bagian yaitu data training dan data testing. Berikut adalah gambaran bagaimana total data pada dataset dibagi menjadi dua bagian: train set dan test set. 20210120135231d4ab7adb4ac75e6a1524673bb2d5011e.png

Dengan demikian, kita bisa melakukan pelatihan model pada train set, kemudian mengujinya pada test set --sekumpulan data yang belum dikenali model. Ingat bahwa membandingkan hasil prediksi dengan label sebenarnya dalam test set merupakan proses evaluasi performa model. Dengan menguji model terhadap data testing, kita dapat melihat kesalahan yang dibuat dan memperbaikinya sebelum mulai membawa model kita ke tahap produksi.

Penting untuk kita memilih rasio yang sesuai dalam pembagian dataset. Saat membagi dataset, kita perlu membuat informasi pada kedua bagian tetap berimbang. Kita tidak ingin mengalokasikan terlalu banyak informasi pada data testing agar algoritma ML dapat belajar dengan baik pada data training. Tetapi, jika alokasi data pada data testing terlalu kecil, kita tidak bisa mendapatkan estimasi performa model yang akurat.

Data testing diambil dengan proporsi tertentu. Pada praktiknya, pembagian data training dan data testing yang paling umum adalah 80:20, 70:30, atau 60:40, tergantung dari ukuran atau jumlah data. Namun, untuk dataset berukuran besar, proporsi pembagian 90:10 atau 99:1 juga umum dilakukan. Misal jika ukuran dataset sangat besar berisi lebih dari 1 juta record, maka kita dapat mengambil sekitar 10 ribu data saja untuk testing alias sebesar 1% saja.

Pada modul ini, kita akan belajar membagi dataset dengan fungsi train_test_split dari library sklearn. Perhatikan contoh kode berikut.

  1. from sklearn.model_selection import train_test_split
  2. x_train, x_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1 )

Dengan fungsi train_test_split dari library sklearn, kita membagi array X dan y ke dalam 20% data testing (test_size=0.2 ). Misal total dataset A yang kita miliki adalah 1000 record, dengan test_size=0.2, maka data testing kita berjumlah 200 record dan jumlah data training sebesar 800 (80%).

Sebelum proses pemisahan, fungsi train_test_split telah mengacak dataset secara internal terlebih dahulu. Jika tidak, data testing hanya akan berisi semua data pada kelas tertentu saja. Misal dataset A kita terdiri dari 5 kelas dengan jumlah masing-masing kelas sebesar 200 record, maka dengan proses shuffling sebelum pemisahan, data testing akan memiliki data dari 5 kelas yang ada. Tanpa proses shuffling, seluruh data dari kelas 1 - 4 akan berakhir di set data training, dan data testing hanya berisi data dari kelas 5 saja. Proses shuffling menjaga rasio informasi pada data training dan testing tetap berimbang.

Melalui parameter random_state, fungsi train_test_split menyediakan random seed yang tetap untuk internal pseudo-random generator yang digunakan pada proses shuffling. Umumnya, nilai yang digunakan adalah 0, atau 1, atau ada juga yang menggunakan 42. Menentukan parameter random_state bertujuan untuk dapat memastikan bahwa hasil pembagian dataset konsisten dan memberikan data yang sama setiap kali model dijalankan. Jika tidak ditentukan, maka tiap kali melakukan split, kita akan mendapatkan data train dan tes berbeda, yang juga akan membuat akurasi model ML menjadi berbeda tiap kali di-run.  

Berikut adalah contoh kode untuk memahami bagaimana penentuan random_state bekerja pada dataset.

  1. from sklearn.model_selection import train_test_split
  2.  
  3. X_data = range(10)
  4. y_data = range(10)
  5.  
  6. print("random_state ditentukan")
  7. for i in range(3):
  8.     X_train, X_test, y_train, y_test = train_test_split(X_data, y_data, test_size = 0.3, random_state = 42)
  9.     print(y_test)
  10.  
  11.  
  12. print("random_state tidak ditentukan")
  13. for i in range(3):
  14.     X_train, X_test, y_train, y_test = train_test_split(X_data, y_data, test_size = 0.3, random_state = None)
  15.     print(y_test)

Output:

  1. random_state ditentukan
  2. [3, 8, 4]
  3. [3, 8, 4]
  4. [3, 8, 4]
  5.  
  6. random_state tidak ditentukan
  7. [9, 2, 0]
  8. [3, 8, 5]
  9. [1, 4, 0]

Latihan SKLearn Train Test Split

Kode program yang akan diajarkan di sini bisa diunduh di tautan berikut ini. Untuk membukanya, upload berkasnya ke Watson Studio atau Google Colab.


Tujuan

Pada codelab ini kita akan belajar membagi dataset menggunakan fungsi Train Test Split dari library SKLearn.


Tahapan Latihan

Untuk latihan membagi dataset terdiri dari tahapan-tahapan sebagai berikut:

  1. Persiapkan dataset ke dalam Notebook.
  2. Impor library SKLearn.
  3. Buat variabel untuk menampung data training dan data testing.
  4. Panggil fungsi train_test_split().


Codelab

Pada IBM Watson Studio atau Colab, import library yang dibutuhkan.

import sklearn
from sklearn import datasets

Library sklearn menyediakan dataset iris yakni sebuah dataset yang umum digunakan untuk masalah klasifikasi. Dataset ini memiliki jumlah 150 sampel. Untuk mendapatkan dataset, kita bisa menulis kode berikut pada cell baru.

# load iris dataset
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.

# pisahkan atribut dan label pada iris dataset
x=iris.data
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 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.

from sklearn.model_selection import train_test_split

# membagi dataset menjadi training dan testing 
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2)

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.

# menghitung panjang/jumlah data pada x_test
len(x_test)

202004301727577188aaebe01851cb0abff65d8b1660aa.png

Pada tahap ini dataset kita telah siap dipakai untuk pelatihan 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 kala memilih model yang akan dipakai 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 menambahkan validation set pada model machine learning.


Train, Test, 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.

2021012013541085a98775389de3594ee46c6ba619cb17.png

Dalam menggunakan holdout validation, ada beberapa hal yang harus dipertimbangkan. Jika ukuran validation set-nya terlalu kecil, maka ada kemungkinan kita memilih model yang tidak optimal. Sebaliknya, ketika ukurannya terlalu besar, maka sisa data pada train set lebih kecil dari data train set utuh. Kondisi ini tentu tidak ideal untuk membandingkan model yang berbeda pada data training yang lebih kecil. Solusi untuk masalah ini adalah dengan menggunakan Cross Validation.


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 memperoleh hasil evaluasi yang lebih akurat karena model dievaluasi dengan seluruh data. Berikut adalah ilustrasi dari K-cross validation. 

20210120135454e18a2d89e914789f3f987f3a6f2ccadd.png

Latihan SKLearn Cross Validation Split

Kode program yang akan diajarkan di sini bisa diunduh di tautan berikut ini. Untuk membukanya upload berkasnya ke Watson Studio atau Google Colab.


Tujuan

Pada codelab kali ini kita akan menggunakan cross_validation_score pada classifier decision_tree. Dataset yang digunakan adalah dataset iris.


Tahapan Latihan

Tahapan yang dilakukan pada codelab ini sebagai berikut:

  1. Impor library yang dibutuhkan.
  2. Pisahkan antara atribut dan label pada dataset.
  3. Buat model decision tree.
  4. Hitung hasil cross validation dari model dengan fungsi cross_val_score().


Codelab

Para pengembang ML biasanya meng-import  semua library yang dibutuhkan di cell pertama. Dalam tahap latihan ini, Anda akan melakukan import library pada cell yang berkaitan saja. Tujuannya adalah agar Anda memahami fungsi setiap library yang digunakan dalam model ML yang Anda buat.

Dataset yang akan kita gunakan adalah dataset iris yang dipakai pada submodul sebelumnya.

  1. import sklearn
  2. from sklearn import datasets
  3.  
  4. # Load iris dataset
  5. iris = datasets.load_iris()

Kemudian kita bagi antara atribut dan label pada dataset.

  1. # mendefinisikan atribut dan label pada dataset
  2. x=iris.data
  3. 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. from sklearn import tree
  2.  
  3. # membuat model dengan decision tree ckassifier
  4. 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.

  1. from sklearn.model_selection import cross_val_score
  2.  
  3. # mengevaluasi performa model dengan cross_val_score
  4. scores = cross_val_score(clf, x, y, cv=5)

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.
20200430173421e5ac491761f83903ebe9161975e89649.png

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.

Pendahuluan Supervised dan Unsupervised Learning

Modul sebelumnya telah sedikit mengulas beberapa macam kategori machine learning yaitu, supervised, unsupervised, semi-supervised, dan reinforcement learning. Semi supervised merupakan gabungan dari supervised dan unsupervised. Sementara itu reinforcement learning dapat dianggap sebagai robot yang belajar untuk mendapatkan reward terbanyak.

Tiap kategori memiliki beberapa jenis algoritma. Algoritma yang termasuk supervised learning di antaranya adalah klasifikasi, regresi, decision tree, dan support vector machine. Sedangkan clustering, pendeteksian anomali (anomaly detection), dan pengurangan dimensi (dimension reduction) adalah jenis algoritma unsupervised learning.

Pada kelas Belajar Machine Learning untuk Pemula kita akan belajar tentang jenis-jenis algoritma dari kategori supervised dan unsupervised learning. Kenapa demikian? Sebabnya kini sebagian besar implementasi dari machine learning adalah berdasarkan algoritma supervised learning. Meskipun demikian, mayoritas data yang ada adalah data tanpa label. 

Pada tahun 2016 seorang ilmuwan AI Yann LeCun memperkenalkan “cake analogy”, sebuah analogi tentang machine learning yang dikenal luas hingga saat ini. Beliau menyatakan bahwa: “If intelligence is a cake, the bulk of the cake is unsupervised learning, the icing on the cake is supervised learning, and the cherry on the cake is reinforcement learning (RL).” Dalam Bahasa Indonesia, analogi ini artinya: “Jika sistem kecerdasan adalah sebuah kue, unsupervised learning akan menjadi kuenya, supervised learning adalah lapisan gula pada kue, dan reinforcement learning akan menjadi buah cherry pada kue”. 

20201224111526960bd161e2ecf4ac295cb5239bd7fd32.jpg

Dari analogi ini kita paham bahwa unsupervised memiliki bagian jauh lebih besar dibanding yang lainnya. Ilustrasi kue LeCun menyatakan bahwa data unsupervised berjumlah jutaan bits per sampel, yang mana itu sama dengan 100 hingga 100.000 kali lipat lebih besar dari data supervised. Mengagumkan, ya? Nah, masifnya ketersediaan data tanpa label ini menjadikan unsupervised learning memiliki potensi yang sangat besar untuk kita kembangkan. 

Supervised Learning

Pada supervised learning kita melatih sekumpulan data yang memiliki label. Label adalah pengenal dari sebuah data. Misal buah A memiliki atribut atau fitur berwarna hijau, bentuknya bulat, dan ukurannya sebesar bola sepak. Buah B atributnya berwarna kuning, bentuknya agak memanjang, dan besarnya segenggaman tangan. Buah yang memiliki atribut seperti yang disebutkan pada buah A dikenali sebagai semangka, sedangkan buah dengan atribut seperti disebutkan pada buah B dikenal sebagai pisang. Maka label dari buah A adalah semangka dan label buah B adalah pisang. 

2021041610393645abc645f135a0359723bbc69205851e.jpeg

Sekumpulan data yang memiliki label biasanya digunakan untuk membuat model klasifikasi. Pada kasus di atas, Anda dapat menggunakan machine learning untuk membuat model klasifikasi buah. Model machine learning Anda akan mempelajari pola berdasarkan atribut dari data buah yang Anda miliki. Model juga belajar bahwa buah dengan atribut tertentu memiliki label tertentu, label A, misalnya. Dari pengalaman belajar tersebut, model machine learning Anda dapat digunakan untuk memprediksi data baru, dan menentukan apakah data baru ini termasuk buah dengan label A atau label B. 

Algoritma supervised learning yang juga populer adalah regresi. Berikut adalah contoh permasalahan yang bisa diselesaikan dengan regresi. Anda memiliki data tentang penjualan properti di Kota Jakarta. Lantas Anda diminta untuk memprediksi harga properti di daerah Jakarta Selatan. Beberapa fitur penting yang berpengaruh terhadap harga properti biasanya adalah, lokasi, luas tanah, luas rumah, dan jumlah kamar. Dari data yang Anda miliki, model machine learning belajar bahwa properti dengan fitur-fitur berkelas, tentu akan memiliki harga tinggi, dan sebaliknya. Output dari model ini adalah sebuah fungsi yang dapat digunakan untuk memprediksi harga properti seperti yang diminta.

Pada masalah regresi kita memprediksi hasil dalam keluaran yang kontinyu berupa fungsi. Jika terdapat kontinuitas dalam keluaran model ML, maka dapat dipastikan itu adalah permasalahan regresi. Misalnya saat kita memprediksi harga rumah, model kita memprediksi harganya Rp. 499.999.000 atau Rp. 500.100.000, padahal harga seharusnya adalah Rp. 500.000.000. Perbedaan ini tak jadi masalah sebab hasil prediksi dalam regresi linear akan berada dalam range bilangan numerik tertentu yang mendekati nilai seharusnya. Inilah yang dimaksud dengan regresi memberikan keluaran yang kontinyu. 

Sedangkan pada masalah klasifikasi, kita memprediksi hasil dalam keluaran diskrit. Misal, apakah email ini dapat diklasifikasikan sebagai spam atau bukan spam? Jelas bahwa tidak ada kontinuitas antara email spam dan bukan spam. Email spam tidak sama dengan bukan spam, serta tidak ada kategori antara email spam dan bukan spam.

Bagaimana, apakah Anda sudah bisa membedakan permasalahan klasifikasi dan regresi? Jangan khawatir, kita akan berlatih membuat model klasifikasi dan regresi sehingga Anda bisa lebih memahaminya.

Berikut adalah beberapa algoritma supervised learning yang penting Anda ketahui, dan akan dibahas di kelas Belajar Machine Learning untuk Pemula:

  1. Linear Regression

  2. Logistic Regression

  3. Classification

  4. Decision Trees

  5. Support Vector Machines

  6. Neural Networks.

Supervised : Classification


Binary Classification

Seperti yang telah Anda ketahui, klasifikasi adalah teknik untuk menentukan kelas atau kategori berdasarkan atribut yang diberikan. Klasifikasi yang menghasilkan dua kategori disebut klasifikasi biner, sedangkan klasifikasi yang menghasilkan 3 kategori atau lebih disebut multiclass classification atau klasifikasi banyak kelas. 

JZVFaIqObquEYww1tJMOQvtroJjtU2CREmvzhiwqkECfwEN2idKOxHanVd4jpsyg4S-SoF2FvsoJ2TPdjnj3sknnOEu44-ZoPcneTxqIHY7Lh25uyXF269imgecu0FFJ3jsyz2V-

Bayangkan sebuah pertanyaan yang jawabannya adalah iya atau tidak, atau pertanyaan yang membuat Anda memilih antara satu pilihan atau pilihan yang lain. Klasifikasi biner bertujuan untuk membedakan dua kelas yang berbeda. Contohnya, klasifikasi buah semangka atau apel, klasifikasi laki-laki atau perempuan, klasifikasi email spam, dan lain-lain. Pada kasus klasifikasi email sebagai spam atau bukan, pertanyaan yang diajukan adalah: “Apakah email ini adalah spam?”

Sampai sini sudah paham ya. Selanjutnya, pada modul selanjutnya, kita akan belajar tentang klasifikasi banyak kelas.

Multiclass Classification

Untuk lebih mudah dalam memahami klasifikasi banyak kelas, 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.

zJRyEp_mHPRFBuFuet5Vy-DeNbhdsnMjLAolaeRn5xJvSIMGArU7lS2O3p-xs-9rvGegOnSb3n_XKhIw3lBZGWkoXA0Ab4f92jkBhRab8h6tx-aJ1ou0eWgnWH_cNUM-9ZG4CwKD

Sebuah model classification bertujuan untuk menentukan kelas berdasarkan atribut tertentu. Pada kasus klasifikasi Iris sebuah model bertugas untuk memprediksi spesies sebuah bunga iris berdasarkan atributnya yaitu panjang sepal, lebar sepal, panjang petal, dan lebar petalnya.

MrSjRBnA7--AIoz-FgQrkMaVF6yjEKqk4phGSMSKQIieuLr2qyYtUtdaXAO5cZ4TlxQlVznsbzKryhBOYqWI1CHcn6FndVx8dd-sEDkUbMituwshfBjjgcIjgkRD5Hr4MRVG2Noa

Contohnya panjang petal dari Iris Setosa lebih pendek dari spesies versicolor dan virginica. Jika panjang petal pendek maka kemungkinan spesies Iris tersebut adalah Setosa.

Seperti yang sudah dijelaskan pada modul sebelumya, klasifikasi biner terdapat hanya 2 kelas pada dataset. Sedangkan pada klasifikasi banyak kelas terdapat lebih dari 2 kelas. Pada contoh dataset Iris seperti di atas terdapat 3 kelas maka dataset tersebut adalah kasus klasifikasi banyak kelas.

 

Decision Tree

Decision tree atau pohon keputusan adalah salah satu algoritma supervised learning 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.

Decision tree memprediksi sebuah kelas (klasifikasi) atau nilai (regresi) berdasarkan aturan-aturan yang dibentuk setelah mempelajari data.

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.

Outlook

Temperature

Humidity

Windy

Play Golf

Rainy

Hot

High

False

No

Rainy

Hot

High

True

No

Overcast

Hot

High

False

Yes

Sunny

Mild

High

False

Yes

Sunny

Cold

Normal

False

Yes

Sunny

Cold

Normal

True

No

Overcast

Cold

Normal

True

Yes

Rainy

Mild

High

False

No

Rainy

Cold

Normal

False

Yes

Rainy

Mild

Normal

False

Yes

 

Sebuah pohon keputusan dapat dibuat dari data sebelumnya. Perhatikan contoh pohon keputusan di bawah. Pohon ini menggunakan hanya 2 atribut yaitu kondisi langit dan kecepatan angin untuk menentukan bermain golf atau tidak.

2021012013581494ed651125fa0e37ea1b45ed8bffb21c.png

Latihan SKLearn Decision Tree

Kode program yang akan diajarkan di sini bisa diunduh di tautan berikut ini. Untuk membukanya, upload berkasnya dari Watson Studio atau Google Colab.


Tujuan

Pada latihan ini, kita akan melakukan klasifikasi data yang kita miliki dengan teknik Decision Tree menggunakan dataset iris, salah satu dataset paling populer yang dipakai dalam belajar ML. 


Tahapan Latihan

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.

Tahapan yang ada pada latihan ini antara lain:

  1. Ubah dataset ke dalam dataframe.
  2. Hapus kolom 'Id' pada dataframe dan pisahkan antara atribut dan label.
  3. Buat dan latih model Decision Tree.
  4. Lakukan prediksi dengan model yang telah dilatih.
  5. Visualisasi model Decision Tree yang telah dilatih.


Codelab

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 Watson Studio Notebook atau Colab. Lalu jangan lupa konversi dataset menjadi dataframe Pandas.

Silakan ikuti cara mengimpor library pandas dan dataset-nya seperti latihan sebelumnya : latihan import dataset dan panda.

Sesuaikan dengan dataset Iris yang sudah Anda unduh.

Untuk melihat informasi mengenai data, Anda bisa memanggil fungsi .head() pada dataframe.

  1. # melihat informasi dataset pada 5 baris pertama
  2. iris.head()

Tampilan iris.head() saat dijalankan sebagai berikut.
20200430194633ed099255911d0df57032af369f28d8eb.pngDapat dilihat bahwa terdapat kolom yang tidak penting pada dataset yaitu kolom ‘Id’. Untuk menghilangkan kolom tersebut kita bisa menggunakan fungsi drop().

  1. # menghilangkan kolom yang tidak penting
  2. iris.drop('Id',axis=1,inplace=True)

Selanjutnya kita pisahkan antara atribut dan label untuk pelatihan model kita.

  1. # memisahkan atribut dan label
  2. X = iris[['SepalLengthCm', 'SepalWidthCm', 'PetalLengthCm', 'PetalWidthCm' ]]
  3. y = iris['Species']

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.

  1. from sklearn.tree import DecisionTreeClassifier
  2.  
  3. # membuat model Decision Tree
  4. tree_model = DecisionTreeClassifier() 
  5.  
  6. # melakukan pelatihan model terhadap data
  7. tree_model.fit(X, y)

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.

  1. # prediksi model dengan tree_model.predict([[SepalLength, SepalWidth, PetalLength, PetalWidth]])
  2. tree_model.predict([[6.2, 3.4, 5.4, 2.3]])

Jika kode tersebut dijalankan, maka tampilannya seperti di bawah ini.

20200430195410b8c2cf9a56cca17f420e48b06d4e77b4.png

Kita juga bisa melihat visualisasi dari decision tree yang kita buat terhadap data dengan menggunakan library Graphviz. Hasil dari graphviz adalah dot file yang akan muncul pada folder file pada panel di kiri Colab jika Anda menggunakan Google Colab.

  1. from sklearn.tree import export_graphviz
  2. export_graphviz(
  3.     tree_model,
  4.     out_file = "iris_tree.dot",
  5.     feature_names = ['SepalLengthCm', 'SepalWidthCm', 'PetalLengthCm', 'PetalWidthCm'],
  6.     class_names = ['Iris-setosa', 'Iris-versicolor', 'Iris-virginica' ],
  7.     rounded= True,
  8.     filled =True
  9. )

Setelah berhasil dijalankan, Anda akan mendapatkan output berupa berkas iris_tree.dot.

Di Watson Studio untuk mendapatkan berkas iris_tree.dot, Anda perlu mengirim berkasnya ke dalam projek asset terlebih dahulu, ikuti langkah-langkah berikut:

Pastikan output iris_tree.dot-nya sudah ada dengan memanggil os.listdir.
  1. import os
  2. os.listdir
20201009174229525a8c01d75b853674b724c736155e06.png
Kemudian upload ke asset dengan menggunakan kode ini:
  1. clientXXXXXX.upload_file('iris_tree.dot', 'testwatson-donotdeleteXXXXXX', 'iris_tree.dot')

Catatan: clientXXXX sesuaikan dengan client di notebook Anda. Dan sesuaikan juga testwatson-donotdeleteXXX dengan yang ada di notebook Anda.
Credentials ini bisa didapatkan di kode awal, ketika Anda mengimpor dataset-nya.
2020100917543093f1f8530eee136810fad2342c207617.png
Kemudian, masuk ke halaman assets dari proyek Anda.
20201009174413f029635682d7dea338b7819aa5fe537d.png
Masuk ke tab Files (cek layar bagian kanan), kemudian pilih berkas iris_tree.dot dan download.
2020100917461054bd754c9584777e0bf3389de8bd7b90.png
20201009174650f42ea1c96bc979590e994dd3390463e4.png

Untuk melihat visualisasi decision tree kita bisa mengonversi dot file ke dalam file png, dengan menggunakan situs konversi berkas berikut ini : https://onlineconvertfree.com/converter/images/.

Catatan : Jangan lupa ganti opsi ke images sebelum convert

20201009174836216fb305ffe60a7b220f473a9ccbf472.png

Hasil output-nya:
20200430195649364809cc4d0ab885bfb4bda5c8262b0f.jpeg

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. Submodul sebelumnya telah membahas sekelumit tentang 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.

Lama Bekerja
Industri
Tingkat PendidikanGaji
6 tahunMarketingSMA8.000.000
12 tahunITS116.000.000
8 tahunKesehatanS220.000.000
5 tahunITSMK?
6 tahunMarketingS214.000.000
21 tahunPerbankanS335.000.000
3 tahunITS110.000.000

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.
    Jfj-v6lFHv9gBRj_G2dnKXDBgk1by09dKP3FcptRcjOdpPHdj9oZ7l4RMyDovi5jgF8icA4XDkRMjdLFA1XI3rbZ72nqnaJ0z2PeW_V4PQFhVaXSk_p6pKg1MhTwLaGnV_bOpQbK

  3. Ketika sebuah garis regresi digambar, beberapa data akan berada pada garis regresi dan beberapa yang lainnya 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 garis regresi merupakan eror. Semakin banyak eror artinya model regresi itu belum optimal.
    cXIr8HD3j5RYSep5gmdszcn4lWwWTu3iFjPhox7r3M_SB3aWTrYUFhZW0gIZsubaPzEa9e3CYRuYNZtSD_9cIucMPF3YFi_rh_3TfslNYNBgGNMhAIdt4RXoFnD8R8tuhA1Dmd3t

 

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. 

Logistic regression dikenal juga sebagai logit regression, maximum-entropy classification, dan log-linear classification merupakan salah satu metode yang umum digunakan untuk klasifikasi. Pada kasus klasifikasi, logistic regression bekerja dengan menghitung probabilitas kelas dari sebuah sampel. 

Sesuai namanya, logistic regression menggunakan fungsi logistik seperti di bawah untuk menghitung probabilitas kelas dari sebuah sampel. Contohnya sebuah email memiliki probabilitas 78% merupakan spam maka email tersebut termasuk dalam kelas spam. Dan jika sebuah email memiliki <50% probabilitas merupakan spam, maka email tersebut diklasifikasikan bukan spam.

YhQzESOduIjO5aPj-HW8FbutIRqMhAXTstdPmJWkeY81_Nh2O22YKvVsdAgmLY-i4hl553N_05GmdP1kpdD9Sf9TEU8xbO-m0Ef1AdxLKKt0sIkTk7zvIduiWgBejQ-tw8x5p2aF

Latihan SKLearn Linear Regression

Kode program yang akan diajarkan di sini bisa diunduh di tautan berikut ini. Untuk membukanya, upload berkasnya ke Watson Studio atau Google Colab.


Tujuan

Pada latihan kali ini kita akan memprediksi harga rumah berdasarkan jumlah kamar.


Tahapan Latihan

Berikut adalah tahapan latihan yang akan Anda lakukan:

  1. Impor library yang dibutuhkan.
  2. Buat dataset dummy dengan Numpy Array.
  3. Buat plot dari model.


Codelab

Pertama kita mengimpor library yang diperlukan. Lalu buat data dummy menggunakan numpy array.

  1. import numpy as np
  2.  
  3. #buat data jumlah kamar
  4. bedrooms = np.array([1,1,2,2,3,4,4,5,5,5])
  5.  
  6. #data harga rumah. asumsi dalam dollar
  7. 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.

  1. # menampilkan scatter plot dari dataset
  2. import matplotlib.pyplot as plt
  3. %matplotlib inline
  4.  
  5. plt.scatter(bedrooms, house_price)

Tampilan dari kode tersebut sebagai berikut.
2020043022040207468b0dbc0073eed758a4f10fd28dfe.png

Lalu pada cell berikutnya, kita bisa mulai melatih model kita dengan memanggil fungsi LinearRegression.fit() pada data kita. Fungsi ini untuk melatih model regresi linier dari library SKLearn. 

  1. from sklearn.linear_model import LinearRegression
  2.  
  3. # latih model dengan Linear Regression.fit()
  4. bedrooms = bedrooms.reshape(-1, 1)
  5. linreg = LinearRegression()
  6. linreg.fit(bedrooms, house_price)

Terakhir kita bisa melihat bagaimana model kita menyesuaikan dengan data yang kita miliki dengan membuat plot dari model kita.

  1. # menampilkan plot hubungan antara jumlah kamar dengan harga rumah
  2. plt.scatter(bedrooms, house_price)
  3. plt.plot(bedrooms, linreg.predict(bedrooms))

Hasilnya sebagai seperti di bawah ini:
20200430220854df958b5b61338e32befd7688a7e67475.png

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.

Latihan SKLearn Logistic Regression

Kode program yang akan diajarkan di sini bisa diunduh di tautan berikut ini. Untuk membukanya, upload berkasnya ke Watson Studio atau Google Colab.


Tujuan

Pada latihan ini kita akan menggunakan logistic regression untuk memprediksi apakah seseorang akan membeli setelah melihat iklan sebuah produk. 


Tahapan Latihan

Tahapan yang dilalui dalam latihan kali ini adalah sebagai berikut:

  1. Ubah dataset menjadi Dataframe.
  2. Pisahkan atribut dan label.
  3. Hapus kolom 'User ID'.
  4. Latih model Logistic Regression.
  5. Evaluasi akurasi model.


Codelab

Dataset untuk latihan bisa Anda unduh pada tautan berikut. Seperti biasa, unggah dataset pada Watson Studio atau Google Colaboratory dengan cara ini:

Seperti modul sebelumnya, silakan ikuti cara mengimpor library pandas dan dataset-nya seperti latihan : latihan import dataset dan panda.

Sesuaikan dengan dataset Social_Network_Ads yang sudah Anda unduh.

Setelah kita mengunggah berkas data pada Watson Studio atau Colab kita akan mengubah dataset menjadi dataframe Pandas. Jangan lupa juga untuk mengimpor library dasar.

  1. import pandas as pd
  2.  
  3. 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.
202004302238474d62c7da27d447baa0b8d30b89f3e4bc.png

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()

Sedangkan tampilan hasil dari fungsi df.info() sebagai berikut.
20200430223940c9aee990b8a1763c632e1362f5f26a2c.png

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. Jangan lupa panggil fungsi get_dummies() untuk melakukan proses One-Hot Encoding karena label pada dataset kita merupakan data kategorikal.

  1. # drop kolom yang tidak diperlukan
  2. data = df.drop(columns=['User ID'])
  3.  
  4. # jalankan proses one-hot encoding dengan pd.get_dummies()
  5. data = pd.get_dummies(data)
  6. data

Ketika kode di atas dijalankan hasilnya seperti di bawah ini.
202004302240572131844a873e8b6bf9f7605bae936cd0.png

Kemudian kita pisahkan antara atribut dan label.

  1. # pisahkan atribut dan label
  2. predictions = ['Age' , 'EstimatedSalary' , 'Gender_Female' , 'Gender_Male']
  3. = data[predictions]
  4. y = data['Purchased']

Sebelum kita membagi data menjadi train dan test set, kita perlu melakukan normalisasi data seperti yang sudah dijelaskan di modul sebelumnya.

  1. # lakukan normalisasi terhadap data yang kita miliki
  2. from sklearn.preprocessing import StandardScaler
  3. scaler = StandardScaler()
  4. scaler.fit(X)
  5. scaled_data = scaler.transform(X)
  6. scaled_data = pd.DataFrame(scaled_data, columns= X.columns)
  7. scaled_data.head()

Sekarang, kita akan membagi data menjadi train dan test set dengan fungsi train_test_split yang disediakan SKLearn.

  1. from sklearn.model_selection import train_test_split
  2.  
  3. # bagi data menjadi train dan test untuk setiap atribut dan label
  4. X_train, X_test, y_train, y_test = train_test_split(scaled_data, y, test_size=0.2, random_state=1)

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. from sklearn import linear_model
  2.  
  3. # latih model dengan fungsi fit
  4. model = linear_model.LogisticRegression()
  5. model.fit(X_train, y_train)

Setelah model dilatih, kita bisa menguji akurasi model pada test set dengan memanggil fungsi score() pada objek model.

  1. from sklearn.preprocessing import StandardScaler
  2.  
  3. # uji akurasi model
  4. model.score(X_test, y_test)

Sehingga hasilnya sebagai berikut.

202010261403083dff36fc0eb4f15b7e9ce67d682731bb.png

Unsupervised Learning

Setelah kita memberikan sekumpulan data tanpa label, model machine learning akan mempelajari pola dan struktur pada data berdasarkan hubungan atau keterkaitan antar variabel pada data. Model kemudian akan mengelompokkan data ini ke dalam beberapa klaster yang berbeda. Teknik ini disebut sebagai clustering. 

Contoh kasus untuk teknik clustering adalah customer segmentation. Dari data ribuan pengunjung sebuah website ecommerce, model akan belajar sendiri untuk mengelompokkan pengunjung. Bisa berdasarkan waktu kunjungan, lama kunjungan, penggunaan fitur search, jumlah klik, dan sebagainya. Model unsupervised learning akan menentukan segmen market dan mengelompokkan pengunjung  ke dalam segmen market yang berbeda. Dengan output dari model ini, pengelola ecommerce dapat menentukan strategi untuk meningkatkan penjualan atau strategi lain yang dirasa perlu diambil untuk kelanjutan bisnis. 

Metode unsupervised learning yang sekarang sedang sangat populer adalah generative adversarial networks (GANs). Terinspirasi dari teori game, GAN bekerja dengan cara membuat dua jaringan syaraf tiruan berkompetisi. Lapan [7] dalam bukunya menyatakan, ketika kita memiliki dua jaringan syaraf yang bersaing, jaringan pertama mencoba menghasilkan data palsu untuk mengelabui jaringan kedua, sedangkan jaringan kedua mencoba untuk membedakan data palsu tersebut dari data sampel kumpulan data kita. Seiring waktu, kedua jaringan menjadi semakin ahli dalam tugas-tugas mereka dengan menangkap pola spesifik yang halus dalam kumpulan data.

Beberapa algoritma unsupervised learning yang penting untuk Anda ketahui adalah: clustering, dimensionality reduction, anomaly detection, dan density estimation

Anda siap untuk membuat model unsupervised learning? Kita akan mulai dengan K-Means Clustering dan Dimensionality Reduction (LDA, PCA, t-SNE) di modul selanjutnya di kelas ini. Siap-siap ya.

Unsupervised : Clustering

Klaster (cluster) 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.

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 [8], 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. 

Contohnya adalah ketika kita memiliki data pengunjung web toko online kita seperti gambar di bawah. Kemudian kita ingin mengembangkan sebuah model yang bisa mengelompokkan pengunjung yang memiliki kemiripan. Misalnya, diketahui bahwa 80% pengunjung toko online Anda adalah perempuan, sementara 20% nya adalah laki-laki. 60% dari pengunjung perempuan mengunjungi toko online Anda pada hari kerja, sementara sisanya berkunjung pada akhir minggu. Contoh lain, 40% pengunjung toko online Anda berasal dari Pulau Jawa, 55% berasal dari pulau lain di seluruh Indonesia, dan 5% sisanya berasal dari luar negeri. Tujuan pengelompokkan kemiripan ini adalah agar kita mengetahui target market yang sesuai untuk setiap kelompok.

wV6RuSMdgwA0akR0ZLfpSUoq4Xi6FvW0hDEm31zsSHWWicAddWppWG8Fb8RmrSLhvhvwHl4lNt00m-Te3Hnp_Ibl-W_ari_SvYUUeeLGoWbIfs0QnP7JGl_HMX5u0-FsevA22o2v

Sebuah model pengklasteran akan membandingkan atribut setiap pengunjung lalu membuat sebuah klaster yang diisi oleh pengunjung yang memiliki kemiripan karakteristik/atribut yang tinggi.

P7b4PxAbbO3ycT9JKg8QG9SmT9cvwdYdHmZ4ltxU5TM-Gjh_rpQjZ1LQbnxm3f8Lozes-TrqpVKDPNQurvSctvlwlbSHp7CUYGcB_22SAV9dastTPLNK1SSD_6UydZIxbNuGUdnz

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. Misal, kelompok pengunjung wanita dengan rentang usia 25 sampai 35 tahun tentu akan memiliki selera yang berbeda dengan pengunjung wanita pada rentang usia 40 tahun ke atas. Customer segmentation ini penting agar setiap target kelompok mendapatkan penawaran yang sesuai sehingga dapat memberikan kontribusi positif terhadap revenue toko.

Pada submodul selanjutnya 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 ilustrasi dari tulisan M. Benbihi. Perhatikan bahwa data yang kita gunakan terdapat 12 sampel dan data ini merupakan data 1 dimensi.

be5__TLtf8KhUTKbLutm3t-fp3r6lo8VieRI626CpATV4Lrpd0bsCClFKwvzLdDWzGMeafxTJn2jCJdhu4KsRiYjbKZzekAVmWPVjjAi0DTXvXg0DTj0CKhFSVkEg7Z0iWGQvyAH 

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 klaster. Kita bisa melihat pada gambar bahwa 3 sampel yang dijadikan centroid diberi warna biru, hijau dan kuning.

PcS-np0CdgCoeQCjenA7oS3endrLKXR0OzLmzU7VmfKLtn2viiyOnjD0S-ldq9eWvhFGPp0lLu6W7-4k_WDOIe7Dxir2VUzxSinjfNg4wj2jtr0Y2Vpw-JlJU2eTyzrkuv1c-2JZ 

Kedua, karena centroid adalah pusat dari sebuah klaster, setiap sampel akan masuk ke dalam klaster. 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 klaster hijau.

iOfltf4GLLUsfu_RUn1x7uNB0BXBzyUmvxPsZgHBwpJVd-9NzFxC1WwmyHEVcK1rAk_oVY9-DTvJSoe7atTpB18CuExx_MliCZpDv4DTGl5yuoPPgxGna9ZbMzllxLDsqLzS29z3 

Berikut adalah hasil ketika tahap kedua selesai.

zRSDWg4GPIzXowq8qkPagwOMleTFDBark9sJbngr1ggO-tE3fNUH2mT6cFDbopqPum1S1RdwTH_sRGV2ZWkOu9pSsp6fk1U8_wA-XcH0nykbmoqVv079fNdxIRV1fukLbkxglmpA 

Ketiga, setelah setiap sampel dimasukkan pada klaster 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 klaster. Pada gambar dibawah, rata-rata yang menjadi centroid baru digambarkan sebagai garis tegak lurus.

xy0D6H_5uXhrIL0qTmDYRYLgtrEA4tlb5K-YK7mzJCJD2VShHE9CDV67iQylf606kj3mFWNk0aZ6sCVEfhK1DcJiUnNv2ikZAElvLu3ekpNmvgUlW29-cmS0Pa8n7h7PbI1xpk7r 

Keempat, langkah kedua diulang kembali. Sampel akan dimasukkan ke dalam klaster dari centroid baru yang paling dekat dengan sampel tersebut.

rmpskvblSaDTYhL2cbRTWAmoo0MUyUWpeCgQDKegCu-kCtdm2oNMwJcYEezw0VFwRPntD-pIMNAut9aThkS-nqnDlDo5wksWSdHyKwUgwEQVybGNhyyFh_MFBQ-apt7PDBlhBekO

Pada tahap ini Anda mengulangi langkah ketiga, yaitu menemukan rata-rata dari klaster terbaru. Anda akan menemukan rata-rata tiap klaster di tahap keempat akan sama dengan rata-rata tiap klaster 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.

lA8YFNc0isWbiqeePo--qrZJ2E11OQBsNFeLyq0MoZUGHyKSBP15bc3V3lhd5cWN_ZI33q-dqCFMOTF7ClQRnHGIxSxen4HVITuhMqmqnpyOCaYiA72GDbJSGjIl6GuZ5yZYz1sz 

Untuk iterasi kedua, Anda bisa mempraktekkan langkah yang sudah dijelaskan sebelumnya untuk menguji pemahaman Anda.Hasil dari iterasi kedua adalah sebagai berikut.

StQn_-TgNE9tXxD-lU8gMsFyElizpD1nTU9SWcPcn2_pkK05zYIVuJ27AwSPd-13Zn0ASW0aFfCgtxaDzDNSfoqBM1PemjVYIqx2_kzoTXEY11y09tzKZsjWn7HEI5dE90qD9-Js 

Hasil dari iterasi kedua terlihat lebih baik dibanding iterasi pertama. Untuk membandingkan klaster setiap iterasi, K-Means akan menghitung variance dari tiap iterasi. Variance adalah persentase jumlah sampel pada tiap klaster. Gambar di bawah menunjukkan variance pada iterasi pertama.

tkjoNeRqAWfOR9balYTfe5FCB0zz3ZfVFohzAR__ydSycYhI-UNMIGxUBPsWtV2ZQZ8OAfLb-WQ1rEvNRoHxdzWxqQ06VXnLeiflMk99aoG4ON3XHM8Y6Kg3A1ymAWawbYP11kuq 

nZ90FcMDpBqLu-X47YLDV_w9QB4nGZAPgvlV7WMKQSEPIDCPSgiCTxi68UeedzmWhiqsyTWuj1Gp1T7or_4_oPwebjS1irb4M-kxbxyrX0k49dSRuoAnztCgE04TABuNRHnXl1L0

Kita bisa melihat bahwa di iterasi kedua, variance nya lebih seimbang dan tidak condong pada klaster tertentu. Sehingga, hasil dari klaster 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.

R7DC4KEuS9Lnv0457zCHYPxzDiR-IhFv6XlhEEl4kFtH7UpfOVEnefgpy_IsHoipW62I6idy_-8a1B0RA_fZ8oGcK_PQ470NgDC8FHc-_bPAn9tql8gh1pgbIFdaXi6_Vqz2moip

 

Metode Elbow

Cara paling mudah untuk menentukan jumlah K atau klaster 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 di bawah dan kita bingung menentukan jumlah klaster yang pas, kita bisa menggunakan metode Elbow.

oOwxbXRntmssOPNOK3JprmETX_CyjwIRF_BmsvfRn2wErNg57WchGgyqqfO1CZ-4Be-SLQFsTPJh5-YdUSRPLGO9iQir1YSi83zhY-sj1m9GZnNoT2h9yymaTtJ4u5wGKdwBhUx5

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 klaster. 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?

202101201401021fd247afd60d5456a02b536e99d3ebe7.png 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.

tZ1X0vxm68a6CeMzStvAaekfpV1Vz91uD3OfeYcN6nvhNLztG3kVkvwtX1xPoy_6EmDOji-pHib52AkFm-UyMR6buWIs618TrKBIUy5jR6e91WAs2I4Z_eCHemdiKiH4WfImosF3

Selamat! Anda sudah paham bagaimana K-Means bekerja. Sekarang kita akan belajar menggunakan K-Means dengan library SKLearn.

Latihan SKLearn K-means

Kode program yang akan diajarkan di sini bisa diunduh di tautan berikut ini. Untuk membukanya upload berkasnya ke Watson Studio atau Google Colab.


Tujuan

Pada latihan kali ini, Anda akan belajar membuat model unsupervised learning dengan teknik K-Means Clustering.


Tahapan Latihan

Tahapan pada latihan kali ini adalah sebagai berikut:

  1. Konversi data menjadi Dataframe.
  2. Lakukan preprocessing data.
  3. Hilangkan kolom 'CustomerID' dan 'gender'.
  4. Latih model K-Means.
  5. Buat plot untuk Elbow dan Cluster.


Codelab

Dataset yang akan Anda gunakan adalah data pengunjung sebuah mall fiktif. Dataset bisa Anda dapatkan pada tautan berikut.

Setelah Anda berhasil mengunduh datanya, buka Notebook pada Watson Studio atau Google Colab dan unggah dataset tersebut ke dalam Watson Studio/Colaboratory dengan cara ini:

Seperti modul sebelumnya, silakan ikuti cara mengimpor library pandas dan dataset-nya seperti latihan : latihan import dataset dan panda.

Sesuaikan dengan dataset Mall_Customers yang sudah Anda unduh.

Pada cell pertama, kita ubah file csv kita ke dalam dataframe pandas dan menampilkan 3 baris pertama dari dataframe. 

  1. import pandas as pd
  2.  
  3. #ubah file csv menjadi dataframe
  4. df = pd.read_csv('Mall_Customers.csv')
  5.  
  6. # tampilkan 3 baris pertama
  7. df.head(3)

Tampilan dari 3 baris pertama dataframe di atas seperti berikut.
20200430224650330de4b6a3da9b3dc6e31e9a6de6301b.png

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.

  1. # ubah nama kolom
  2. df = df.rename(columns={'Gender': 'gender', 'Age': 'age',
  3.                         'Annual Income (k$)': 'annual_income',
  4.                         'Spending Score (1-100)': 'spending_score'})
  5.  
  6. # ubah data kategorik mmenjadi data numerik
  7. df['gender'].replace(['Female', 'Male'], [0,1], inplace=True)
  8.  
  9. # tampilkan data yang sudah di preprocess
  10. df.head(3)

Setelah dilakukan preprocessing dengan mengubah nama kolom supaya lebih seragam, maka hasilnya seperti di bawah ini.
202004302250389bbd2c50306e7116d35e903eb41ab339.jpeg

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.

  1. from sklearn.cluster import KMeans
  2.  
  3. # menghilangkan kolom customer id dan gender
  4. = df.drop(['CustomerID', 'gender'], axis=1)
  5.  
  6. #membuat list yang berisi inertia
  7. clusters = []
  8. for i in range(1,11):
  9.   km = KMeans(n_clusters=i).fit(X)
  10.   clusters.append(km.inertia_)

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. Jangan lupa mengimpor library yang dibutuhkan untuk membuat plot ya.

  1. import matplotlib.pyplot as plt
  2. %matplotlib inline
  3. import seaborn as sns
  4.  
  5. # membuat plot inertia
  6. fig, ax = plt.subplots(figsize=(8, 4))
  7. sns.lineplot(x=list(range(1, 11)), y=clusters, ax=ax)
  8. ax.set_title('Cari Elbow')
  9. ax.set_xlabel('Clusters')
  10. ax.set_ylabel('Inertia')

Hasil dari kode di atas menampilkan plot inersia sebagai berikut.
202004302253449b67112da588a52a3656846e0c4d767e.png

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.

  1. # membuat objek KMeans
  2. km5 = KMeans(n_clusters=5).fit(X)
  3.  
  4. # menambahkan kolom label pada dataset
  5. X['Labels'] = km5.labels_
  6.  
  7. # membuat plot KMeans dengan 5 klaster
  8. plt.figure(figsize=(8,4))
  9. sns.scatterplot(X['annual_income'], X['spending_score'], hue=X['Labels'],
  10.                 palette=sns.color_palette('hls', 5))
  11. plt.title('KMeans dengan 5 Cluster')
  12. plt.show()

Sehingga jika kode di atas dijalankan, maka tampilan KMeans dengan 5 klaster seperti di bawah ini.
202004302256259671972850b22520ba8545d510641011.png

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.

0YDqzm7-vEDE0_Bf-dyhsmFB9YIk-ONwh6V4_enYgHecSLHXZPv5RglAt2gs1iudxjvCm9ZgtWWAvcmSgfdcxIJr8iy6yVJe5QKevT9A0PEpgWe1kV05R65jp6Uvrvbc7i-MSwz4 

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. Netflix merekomendasikan film yang mungkin cocok dengan selera Anda. Twitter merekomendasikan pengguna yang mungkin ingin Anda ikuti.

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.

Dimensionality Reduction : LDA, PCA, t-SNE

Pada tahap ini kita telah belajar mengimplementasikan 2 model machine learning yaitu regresi dan clustering. Dataset yang telah kita gunakan memiliki atribut yang masih sangat sedikit sehingga proses pelatihan model yang kita bangun sebelumnya sangat cepat. Namun, dalam praktiknya, banyak masalah machine learning menggunakan dataset yang memiliki ribuan atau bahkan jutaan atribut, seperti pada dataset yang berisi informasi mengenai genetika manusia. 

Dengan begitu banyaknya atribut, proses pelatihan akan menjadi lambat dan memakan waktu 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.

vbjmzhJYoGfaQkoJMFodwsUM2uMeq7ljuHBPId-MhD5bGLkXqEM7qrp20MT_MLlUhsrkg6njhvYfz92wbaDrASIPp9vyU1Wq4kx9iawub-pbZeczb9DTlf3XS0YXPVsnNxMusRoM

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.

 

Principal Component Analysis (PCA)

Secara sederhana, tujuan dari PCA adalah mereduksi dimensi atau 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 [9] terdapat histogram dari 10 principal component dan variance dari setiap principal component.

a6YEzOwc2JKLSmpEqZHrSO3_SzYTM7oToQy9A4liIdPPNJgc9n-mP88Lfj8UvmoOpdGuVXb9Ac8pGX9RP3UdMucYs-GAGccuZIcSZ-jVbFqPkjY1I0FExYVPkGWWlln6vRsBW2Io 

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 dan meminimalkan varian pada masing-masing kelas. Kontras dengan PCA yang bekerja dengan mencari atribut komponen yang memiliki varian 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 LDA memperhatikan bagaimana kelas-kelas pada data dapat dipisahkan dengan baik. 

Tujuan LDA adalah mengurangi dimensi dataset berdimensi-i dengan memproyeksikannya ke subruang berdimensi-j, di mana j<i. LDA menggunakan fitur dari kedua sumbu (X dan Y) untuk membuat sumbu baru, kemudian memproyeksikan data ke sumbu baru dengan cara meminimalkan varians dan memaksimalkan jarak antara dua kategori. Dengan demikian, dua kriteria utama yang digunakan LDA untuk membuat sumbu baru adalah.

  1. Meminimalkan varian pada masing-masing kelas.

  2. Memaksimalkan jarak antara rata-rata (mean) kedua kelas.

Secara sederhana, berikut adalah contoh ilustrasi bagaimana LDA menggunakan dua kriteria di atas untuk mereduksi dimensi. 

1VtZuliFaC6dd5Avqzky_4OMsqRrXHWV30aR_vTMycQwyLTUFWvUxtcdbE9ze17aWAlw1EmJIfpd1b3ANLYZNjgfdygwECwxp4Y3bRxNsnL4IZO0q_YRQurA-Mzx5fgSPck57vymsN-QfXBouoDDfhLhKLouA0p4XDX04uLqZ1FaE2CsWinpBcU7z2c09YW_kuRjuacYacdfYA6NKI-WghhPBlQbCQVBpgh703ja18UoNzO93ucSQ4vwNYalM3F2Eeu2i-sqW0-5bZdm

Pada kedua gambar diatas, tampak bahwa sumbu baru yang berwarna merah telah dibuat dan diplot di grafik 2D sedemikian rupa sehingga memaksimalkan jarak antara rata-rata (mean) dari kedua kelas dan meminimalkan varian dari setiap kelas. Dengan kata lain, sumbu ini meningkatkan pemisahan titik-titik data dari kedua kelas. Setelah membuat sumbu baru dengan kriteria yang telah disebutkan di atas, semua titik-titik data kemudian diplot pada sumbu baru seperti tampak pada gambar di sebelah kanan.

Hasil akhirnya akan tampak seperti gambar berikut.

HDRR3_g_kjC9wLc9yTBETS7ipCZVv8IBAPViTkxjwT-rKMzlTw1dSJinDaVvusmXo9sO2MqEet1K4YCjj802swmgkVTEpabCgmqdT-rJlISp-vKZWQaED4XrGpvvX2Hvg9gSMi21

Bagaimana, mudah dipahami, kan? Ilustrasi di atas menggunakan data yang sederhana agar kita lebih mudah memahami tentang LDA. Perlu diingat bahwa pada kenyataannya, dataset yang ada tentu tidak sesederhana ini. 

Silakan kunjungi tautan berikut untuk membaca lebih lanjut mengenai LDA, juga tautan berikut untuk memahami LDA dengan library scikit-learn. 

 

t-SNE

t-Distributed Stochastic Neighbor Embedding atau sering disebut t-SNE dikembangkan oleh Laurens van der Maaten dan Geoffrey Hinton pada tahun 2008. t-SNE adalah teknik non linear unsupervised yang digunakan untuk reduksi dimensi, eksplorasi data, dan visualisasi data berdimensi tinggi. 

Algoritma t-SNE memungkinkan kita untuk memisahkan data yang tidak dapat dipisahkan oleh garis linear. Dengan t-SNE kita bisa melihat visualisasi bagaimana data tersusun pada ruang berdimensi tinggi. Lalu, bagaimana cara kerja algoritma t-SNE?

t-SNE menghitung ukuran kesamaan antara pasangan titik data di ruang berdimensi tinggi dan dimensi rendah, kemudian mengoptimalkan dua kesamaan ini. Dengan kata lain, t-SNE mengurangi dimensi dengan menjaga sampel-sampel yang mirip agar berdekatan, dan sebaliknya, sampel-sampel yang kurang mirip, berjauhan. 

Cyrille Rossant dalam tulisannya An Ilustrated Introduction to the t-SNE Algorithm membuat visualisasi handwriting digit dengan t-SNE sebagai berikut.

9aDncqTS383hxKmRzrvGvB9PRJ2QYnUBwCID2yzP0oWgc3Zk-cy5FD2pJd5dwxyPtdapf0iRhr4HFyfoC18ptZZB08FK8tfVjkarXp1evpjcpr7doLT8ve1fDm_6tnZCzg74i-Jv

Laurens Van der Maaten pada acara Google Tech Talks menyampaikan langkah-langkah dalam algoritma t-SNE sebagai berikut. Pertama, menghitung ukuran kesamaan antara pasangan pada ruang berdimensi tinggi. Selanjutnya, menghitung ukuran kesamaan antara pasangan pada ruang berdimensi rendah. Langkah terakhir, kita ingin himpunan probabilitas dari ruang berdimensi rendah untuk mencerminkan ruang berdimensi tinggi sebaik mungkin sehingga diharapkan kedua struktur peta serupa. 

Dengan teknik ini, t-SNE mampu menangkap banyak struktur lokal dari data berdimensi tinggi dengan sangat baik, sekaligus menunjukkan struktur global seperti keberadaan cluster di beberapa skala. 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 tertarik mempelajari lebih lanjut tentang t-SNE, silakan kunjungi laman pribadi L. V. Maaten, ilmuwan yang menemukan teknik t-SNE pada tautan berikut. Untuk memahami bagaimana implementasi t-SNE dengan bahasa pemrograman python, silakan kunjungi tautan berikut, serta tautan berikut untuk memahami implementasi t-SNE dengan library scikit-learn. 

Latihan SKLearn PCA 

Kode program yang akan diajarkan di sini bisa diunduh di tautan berikut ini. Untuk membukanya upload berkasnya ke Watson Studio atau Google Colab.


Tujuan

Pada latihan ini, kita akan berlatih mengimplementasi PCA dengan library SKLearn.


Tahapan Latihan

Tahapan pada latihan ini sebagai berikut:

  1. Bagi dataset.
  2. Latih model tanpa PCA.
  3. Latih model dengan PCA.
  4. Evaluasi hasil kedua model.


Codelab 

Pada IBM Watson Studio atau Colaboratory impor library yang dibutuhkan.  Kemudian kita masukkan dataset iris dan bagi data menjadi train set dan test set.

  1. from sklearn import datasets
  2. from sklearn.model_selection import train_test_split
  3.  
  4. iris = datasets.load_iris()
  5. atribut = iris.data
  6. label = iris.target
  7.  
  8. # bagi dataset menjadi train set dan test set
  9. X_train, X_test, y_train, y_test = train_test_split(
  10.     atribut, label, test_size=0.2)
  11.  

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.

  1. from sklearn import tree
  2.  
  3. decision_tree = tree.DecisionTreeClassifier()
  4. model_pertama = decision_tree.fit(X_train, y_train)
  5. model_pertama.score(X_test, y_test)

Tampilan hasil akurasi tanpa PCA dari kode di atas sebagai berikut.
20200430230236955611691969fb031f6be6d185d902ae.png

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. 

  1. from sklearn.decomposition import PCA
  2.  
  3. # membuat objek PCA dengan 4 principal component
  4. pca = PCA(n_components=4)
  5.  
  6. # mengaplikasikan PCA pada dataset
  7. pca_attributes = pca.fit_transform(X_train)
  8.  
  9. # melihat variance dari setiap atribut
  10. pca.explained_variance_ratio_

Hasil dari setiap atributnya menjadi sebagai berikut.
202004302306411f9b2237edc16045f4f6a31d7f0183a9.png

Melihat dari variance sebelumnya kita bisa mengambil 2 principal component terbaik karena total variance nya adalah 0.969 yang sudah cukup tinggi.

  1. # PCA dengan 2 principal component
  2. pca = PCA(n_components = 2)
  3. X_train_pca = pca.fit_transform(X_train)
  4. X_test_pca = pca.fit_transform(X_test)

Kita akan menguji akurasi dari classifier setelah menggunakan PCA.

  1. # uji akurasi classifier
  2. model2 = decision_tree.fit(X_train_pca, y_train)
  3. model2.score(X_test_pca, y_test)

Hasil pengujian akurasi setelah menggunakan PCA menjadi seperti di bawah ini.
20200430231028ae2b75175eb26e463eb621d984a237fc.png

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.

Support Vector Machine

Vladimir N Vapnik, seorang Professor dari Columbia, Amerika Serikat pada tahun 1992 memperkenalkan sebuah algoritma training yang bertujuan untuk memaksimalkan margin antara pola pelatihan dan batas keputusan (decision boundary) [10]. Algoritma ini kemudian dikenal luas sebagai Support Vector Machine (SVM).

Support Vector Machine adalah model ML multifungsi yang dapat digunakan untuk menyelesaikan permasalahan klasifikasi, regresi, dan pendeteksian outlier. Termasuk ke dalam kategori supervised learning, SVM adalah salah satu metode yang paling populer dalam machine learning. Siapa pun yang tertarik untuk masuk ke dalam dunia ML, perlu mengetahui SVM.

Tujuan dari algoritma SVM adalah untuk menemukan hyperplane terbaik dalam ruang berdimensi-N (ruang dengan N-jumlah fitur) yang berfungsi sebagai pemisah yang jelas bagi titik-titik data input. Untuk lebih jelasnya, perhatikan gambar berikut.

dpUhrvykVpnGCBBnT8slK6VR_Zbk_gXNDaoLWTlznzmUm5PgVQLEczplXskmIzGtYKDVYQUEK8PVvkQkdNXfbL0vhnjE4AoJGqlqa0Yh-0gnItZJET97mdSXyE4cFSFlnXTBCp3X

Gambar di sebelah kiri menunjukkan beberapa kemungkinan bidang (hyperplane) untuk memisahkan data lingkaran dan data kotak. Algoritma SVM kemudian mencari hyperplane terbaik yang dapat memisahkan kedua kelas secara optimal. Seperti tampak pada gambar di sebelah kanan, sebuah hyperplane optimal berhasil dibuat dan mampu memisahkan kedua kelas sehingga memiliki margin yang maksimal.

Beberapa keunggulan Support Vector Machine antara lain:

  1. SVM efektif pada data berdimensi tinggi (data dengan jumlah fitur atau atribut yang sangat banyak).

  2. SVM efektif pada kasus di mana jumlah fitur pada data lebih besar dari jumlah sampel.

  3. SVM menggunakan subset poin pelatihan dalam fungsi keputusan (disebut support vector) sehingga membuat penggunaan memori menjadi lebih efisien.                 

Pada modul ini kita akan belajar tentang bagaimana Support Vector Machine dapat menyelesaikan permasalahan klasifikasi dan regresi.

Support Vector Machine Classifier

Modul berikut akan membahas tentang SVM pada kasus klasifikasi. Untuk memahami bagaimana algoritma support vector machine atau SVM bekerja pada kasus klasifikasi, 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.

6FX1Y61yMtqwzOWrtb3mjzxCvTbDro97IYAnDcmEWUt-FyXpzJlSb7g-wigItQom5Eq16aLfAcLqlGE0kdyxlrXBF6zRk7j2A1V3siKEKNiKSLju21USakol9kp4ufQ2CagQVerT

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.

Qt3_7GC7kNHsHD83rpELNd_-JpvzOXRS26qJVPTkEmjiYeINYhMmUJRdM_zs0WeG0jkZETTvXe9kK_LhVZ7b8BhMfF_39A2m9Wr5CzTZ8s7PCLZ3_9vjF8aFa_AJgFCuPRwqnPJo

Lantas bagaimana SVM membuat sebuah decision boundary tersebut?

Pertama SVM mencari support vector pada setiap kelas. Support vector adalah sampel dari masing-masing kelas yang memiliki jarak paling dekat dengan sampel kelas lainnya. Pada contoh dataset bola basket dan bola kaki di bawah, support vector adalah bola basket dan bola kaki yang memiliki warna biru. 

BTlqmi2wp983xOSBMJ_Atp7pLFLV20rY2g6X-gFl31d-nOUtbzlLwE2yY59_ntFp3MWv39lR7w8rHnXoBCMFygtCUxBnuHZO0DQOYK0SqNBpRTjh8CDzRTwA821HgKolFAZLwr4m

Setelah support vector ditemukan, SVM menghitung margin. Margin bisa kita anggap sebagai jalan yang memisahkan dua kelas. Margin dibuat berdasarkan support vector di mana 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. Oleh karena itu, gambar sebelah kanan disebut sebagai high margin classification dan gambar di sebelah kiri disebut low margin classification. 

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.

TFiiUkSPWRcGsRfaolBJxB3LakpgRvgzjTWUghhDihQqIhlE2CrgZRtHl57LPonu8PdOciJmUCP-UxKfP_ZHkihsUPQWXLrwmA3xQlKkb3FZblgat8iA36Fc9cfBGsBnNE3Ftr6K

Decision boundary adalah garis yang membagi jalan atau margin menjadi 2 bagian yang sama besar. Hyperplane adalah bidang yang memisahkan kedua kelas, sedangkan margin adalah lebar ‘jalan’ yang membagi kedua kelas. Selamat! Sekarang Anda sudah paham bagaimana support vector machine bekerja dalam masalah klasifikasi.

 

SVM Klasifikasi non Linier

Sebelumnya kita sudah belajar tentang support vector classifier untuk kasus linear. Support vector classifier bekerja dengan mencari margin terbesar, atau jalan terlebar yang mampu untuk memisahkan 2 buah kelas. Permasalahannya, data di lapangan jauh lebih kompleks dibanding data ayam hias dan ular seperti di atas. Bagaimana jika data yang kita miliki terlihat seperti ini?

hIdPbEHZsfU5xJLpeRvrxIALGlGlk3h0ObkSBLf6bI_LnHaA6TTQNGY6YiAsoHje3PlpBxNc1aFAYjcxo5UP3wWsjkLLONIATP2nmRcslgO6kw3_UEKuCjSe8EB1hL8J61NmVy-R

Data di atas merupakan data yang tidak bisa dipisahkan secara linier sehingga kita menyebutnya sebagai data non-linear. Pada data non-linear, decision boundary yang dihitung algoritma SVM bukan berbentuk garis lurus. Meski cukup rumit dalam menentukan decision boundary pada kasus ini, tapi kita juga mendapatkan keuntungan, yaitu, bisa menangkap lebih banyak relasi kompleks dari setiap data poin yang tersebar.

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 (misal 2D) ke dalam dimensi yang lebih tinggi (3D) sehingga dapat menghasilkan hyperplane yang optimal. Perhatikan gambar berikut [11].

Am4kJqOGDXSoPcnqKijAi3HFE3xDclJfwEhuB1QOQu3HFZF-d8QbP-QWincVH15mbVOmTx0tq3Z_LtU3Iz_JogdwbifVQ81pUyQxGt7-DW0yr5UYmr8pJJKGFR7PkpfFaWQiwVIa

Bagaimana trik kernel bekerja? 

Pertama, kita perlu menghitung skor jarak dari dua titik data, misal x_i dan x_j. Skor akan bernilai lebih tinggi untuk titik data yang lebih dekat, dan sebaliknya. Lalu kita gunakan skor ini untuk memetakan data pada dimensi yang lebih tinggi (3D). Teknik ini berguna untuk mengurangi waktu dan sumber daya komputasi, terutama untuk data berjumlah besar. Hal ini juga mencegah kebutuhan akan proses transformasi yang lebih kompleks. Itulah mengapa teknik ini sering disebut sebagai trik kernel.

Seperti yang ditunjukkan gambar di atas, pemetaan titik data dari ruang 2D menjadi 3D menggunakan fungsi kernel. Titik-titik merah yang sebelumnya berada di tengah sekarang berada di dalam bidang vertikal dengan posisi lebih rendah setelah diubah menjadi ruang 3D. Titik data yang sebelumnya sulit dipisahkan, sekarang dapat dengan mudah dipisahkan dengan teknik kernel.

Animasi yang dibuat oleh Udiprod [12] 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.

 

ZU_JlI7LVOxLWiVv1RRiRWIdWCBvjBgbQv7T6az0s-rA7APYFsljxKDiE9AJD-GXEAX2lGVMa9T40m-0AyhAFmTLR3fMciC6NfWJuh6aX3wxrFmCKIhKPcWTxdbJN5i--UH1jmWE

Bagaimana, sampai sini sudah paham, kan? Kami akan memberikan satu contoh lagi. Mari perhatikan ilustrasi berikut tentang bagaimana trik kernel bekerja pada data yang lebih sederhana.

DmrmlulXMweCOyfl9BLK97j5s6FT2M1jG4rC0OO0Qpom7zGPa0wavObxt7HQtVYhstuSgeZI--NhkeyXMMw_dEsiSi32x-KlqqobYa6EhHP0jQEDvYmo-fFM6uFhaDHAp1JFoho_

Data di atas adalah data 1 dimensi dengan 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 yang ada. 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.

ZEJTdIKyLiq7oPkCR1O8J3RljOP7G2XSVaDJpBR8EzdiRZT6T_XIFVvKcslNLMuedyCPP-F6sx7j0zOHOxC7_gZdUTjq81nulyI7cF8tSIKAZFWvTtERYReUHO7C1ntyhjbi-Rms

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 dari dimensi tertentu ke dimensi yang lebih tinggi sehingga kelas-kelas pada data dapat dipisah secara linier.

Bagaimana, mudah bukan? Berikut adalah beberapa fungsi kernel yang perlu Anda ketahui.

  • Linear

  • RBF (Radial Basis Function) atau Gaussian kernel

  • Polinomial

  • Sigmoid

Tertarik mengetahui fungsi matematis di balik kernel? Kunjungi tautan berikut yah. 

Untuk melihat bagaimana pemisahan data dan seperti apa bentuk hyperplane pada masing-masing fungsi kernel, perhatikan gambar yang dibuat oleh H. Marius [13] berikut. Nxovq_I6OMb-EuHUHcxayhmuq4ZciqPNdGBMxiJ32ZSoxTY39_wb7O7vkU85dZExlXLQsFEDwXS7q-FspQ57led8B6vNK0zWdaWs_D81Usgalh1ymyKYb-HvNXiKxao_J30vnaaR

Sampai di sini kita telah mempelajari bagaimana SVM bekerja untuk menyelesaikan permasalahan klasifikasi. Lantas, bagaimana SVM Classifier ini diterapkan dalam kehidupan sehari-hari?

Salah satu contoh aplikasi SVM dalam kehidupan sehari-hari adalah fitur deteksi wajah. Pengenalan wajah telah berkembang menjadi topik penelitian utama dalam bidang computer vision. Sistem pengenalan wajah memiliki banyak fitur/kelas (individu) dan hanya memiliki beberapa data gambar (sampel) per orang, bahkan kadang hanya ada satu sampel pelatihan untuk setiap orang. Permasalahan dengan jumlah fitur lebih banyak dari jumlah sampel ini efektif jika dipecahkan dengan algoritma SVM.

Aplikasi lain SVM yang juga menarik adalah di bidang bioinformatika. Dalam bidang komputasi biologi, deteksi homologi jarak jauh pada protein (protein remote homology detection) adalah permasalahan yang umum. Metode paling efektif untuk menyelesaikan permasalahan ini adalah dengan SVM. Dalam beberapa tahun terakhir, algoritma SVM telah diterapkan secara luas untuk proses deteksi ini. Fungsi kernel pada SVM digunakan untuk mengidentifikasi sekuens biologis dan membantu menemukan kesamaan antara urutan protein yang berbeda. 


SVM untuk Klasifikasi Multi-kelas

SVM sejatinya merupakan binary classifier atau model untuk klasifikasi 2 kelas. Namun, SVM juga dapat dipakai untuk klasifikasi multi-kelas menggunakan suatu teknik yaitu “one-vs-rest”. 

Pada masalah klasifikasi multi-kelas, SVM melakukan klasifikasi biner untuk masing-masing kelas. Model kemudian memisahkan kelas tersebut dari semua kelas lainnya, menghasilkan model biner sebanyak jumlah kelasnya. Untuk membuat prediksi, semua proses klasifikasi biner dijalankan pada tahap uji. 

Sebagai contoh, 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. 

z4D8cHTjLXuCR3hPW4dm7Y3dqgHSE-mWbVSLD6UwmIsK9gDcjV0jyNmSG8asxxGBtkSQQeAZ46bA9uTGb9I_JK5ux5MHFENXD1XbjVNRilemhL8absgbZfD4r-yRTX5atkugBi3z

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”.

-d0sDyan39BiofAC7ojoa3B-4K8Uxr11vAvIrBWskj_g27twVuGixg66Idwnzs8bGFSEHE4mnhOCIFz3zNIuPUlsYGbOVnbMnoAxQWO_IxO_93Kj-IndKOp1_VHrk1PCuWE9c5Ak

Latihan SKLearn SVM untuk Klasifikasi

Kode program yang akan diajarkan di sini bisa diunduh di tautan berikut ini. Untuk membukanya upload berkasnya ke Watson Studio atau Google Colab.


Tujuan

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.


Tahapan Latihan

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

Tahapan latihan kali ini adalah:

  1. Ubah data ke dalam Dataframe.
  2. Bagi dataset.
  3. Lakukan standarisasi.
  4. Buat dan latih model.
  5. Evaluasi model.


Codelab

Tahap pertama yang perlu kita lakukan adalah mengunduh dataset Pima Indian Diabetes dari tautan berikut. Setelah mengunduh dataset, jangan lupa masukkan dataset ke dalam Watson Studio atau Google Colab. 

Pada tahap selanjutnya kita akan mengimpor library pandas dan mengubah dataset menjadi sebuah dataframe.

Silakan ikuti cara mengimpor library pandas dan dataset-nya seperti latihan sebelumnya : latihan import dataset dan panda.

Sesuaikan dengan dataset Pima Indian yang sudah Anda unduh.

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()

202004302153042e9a31f72bc888ba288b079bda6f3663.png

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()

2020043021540468d55498f34c239c16e337cb9d7b3bdd.png

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.

  1. # memisahkan atribut pada dataset dan menyimpannya pada sebuah variabel
  2. X = df[df.columns[:8]]
  3.  
  4. # memisahkan label pada dataset dan menyimpannya pada sebuah variabel
  5. y = df['Outcome']

Jika kita lihat, nilai-nilai pada dataset memiliki skala yang berbeda. Contohnya pada kolom Glucose dan kolom Diabetes 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.

  1. from sklearn.preprocessing import StandardScaler
  2.  
  3. # standarisasi nilai-nilai dari dataset
  4. scaler = StandardScaler()
  5. scaler.fit(X)
  6. X = scaler.transform(X)

Setelah atribut dan label dipisah, kita bisa memisahkan data untuk training dan testing menggunakan fungsi .train_test_split().

  1. from sklearn.model_selection import train_test_split
  2.  
  3. # memisahkan data untuk training dan testing
  4. X_train, X_test, y_train, y_test = train_test_split(
  5.     X, y, test_size=0.33, random_state=42)

Kita kemudian membuat objek Support Vector Classifier dan menampungnya pada variabel clf. Akhirnya kita sampai pada tahapan yang kita tunggu-tunggu, kita memanggil fungsi fit untuk melatih model.

  1. from sklearn.svm import SVC
  2.  
  3. # membuat objek SVC dan memanggil fungsi fit untuk melatih model
  4. clf = SVC()
  5. clf.fit(X_train, y_train)

Terakhir, kita bisa melihat bagaimana akurasi prediksi dari model yang kita latih terhadap data testing.

  1. # Menampilkan skor akurasi prediksi
  2. clf.score(X_test, y_test)

20200430220814d41d434f0c8262bf11d287dc3f2daee4.png

Selamat, Anda telah berhasil mengembangkan sebuah model Support Vector Classifier untuk mendeteksi diabetes.

Support Vector Regression

Seperti yang telah disebutkan di awal modul, selain bisa menyelesaikan masalah klasifikasi, support vector juga bisa dipakai untuk prediksi data kontinu yaitu kasus regresi.

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 sebanyak mungkin sampel di ‘jalan’.

Perhatikan gambar berikut untuk melihat contoh SVR [4].

5OYp_CIu7on-QJCH39VvRHs1hYTHnnoX6b2Y3Jp48kRYR5G9Q4terHU1ywGqlOb0DoTSYnAQvS_SmUKC4tj80KApp3WYsZ6QlX6DkqdPp_XkAFMe1_BDGQUYZUraY7ouEaVcxd9q

Seperti dijelaskan oleh Garon dalam Hands-On Machine Learning with Scikit Learn [4], gambar di atas menunjukkan dua model Regresi SVM linier yang dilatih pada beberapa data linier acak, satu dengan margin besar (ϵ = 1,5) dan yang lainnya dengan margin kecil (ϵ = 0,5). Lebar jalan dikontrol oleh hyperparameter ϵ, yang juga disebut maksimum eror. Menambahkan data training ke dalam margin tidak akan mempengaruhi prediksi model. Oleh karena itu, model disebut sebagai Ïµ-insensitivity (tidak sensitif-ϵ).

Berbeda dengan SVM di mana 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. M. Awad dan R. Khanna dalam bab 4 bukunya [14] mengilustrasikan support vector pada SVR sebagai berikut. 

gwFeCNov7CQ16aLYkHRFgRsenRTbkqE1u8N7QPoQraRQtig6SUUc1n9byEr1IShy_qbnYjIOEGFkWkskdDUlbW1aBTNlKFqjFUMa2V1ajl7dbjJKZvIX0SKJaUykoAAAYznOAkJ9

Mari kita ambil contoh implementasi SVR pada kasus prediksi harga rumah di kota Boston, Amerika Serikat, menggunakan dataset yang sangat populer untuk kasus regresi: “Boston Housing Price.csv”. Pertama, kita akan melihat bagaimana hasil prediksi regresi linear sederhana pada data ini, kemudian kita akan membandingkan hasilnya dengan SVR.

Sedikit mengingat kembali tentang regresi linear yang telah diulas di modul sebelumnya, ukuran performa untuk permasalahan regresi linear adalah Root Mean Square Error (RMSE). RMSE memberi gambaran tentang seberapa banyak kesalahan dalam prediksi yang dibuat oleh sistem. Tujuannya tentu saja untuk mendapatkan eror atau tingkat kesalahan seminimal mungkin. 

Pada kasus prediksi harga rumah di Boston, regresi linear akan memberikan hasil plot sebagai berikut.

aGzGxTe9YYEbDJGMJCa6Bp0L35SE4-0Q4xg3k0fhIaRjW-EgpNQ0vfemD3lGZsREGjAYXVBrkxd291UXs-0R38kRvonrNgZg0gLRQLWecdfIsfvb4cKEOFo9wtc4fpQs21djBx9F

Mari kita coba implementasikan SVR pada dataset yang sama. Salah satu kelebihan SVR dibanding regresi linear adalah SVR memberi kita fleksibilitas untuk menentukan seberapa banyak kesalahan yang dapat diterima dalam model kita. Algoritma SVR akan menemukan garis yang cocok (hyperplane) agar sesuai dengan data. Kita bisa mengatur parameter ϵ untuk mendapatkan akurasi model yang kita inginkan. 

Jika kita pilih nilai ϵ = 5 dan kita plot datanya, hasilnya adalah sebagai berikut.

zxm4lbAhCw4ZWoSjiakEUKLr5pG3DnrGssDfVGo20lnJGYJ4i4dgucgi3dIpGeeWLYkWOGtKZrwf7wrnQv4IYRv8YhiMyiwheeQa3mcEVqi_Zil7TyyxU8JXHn7TzP_QJvNT6q8H

Garis merah pada gambar menunjukkan garis regresi, sedangkan garis biru menunjukkan margin dari eror, ϵ, yang telah kita atur nilainya tadi dengan ϵ = 5 (atau dalam skala ribuan berarti senilai $ 5,000). 

Dari gambar di atas Anda mungkin bisa langsung melihat bahwa algoritma SVR ini tidak bisa memberikan hasil prediksi yang baik untuk seluruh data sebab beberapa titik masih berada di luar batas. Oleh karena itu, kita perlu menambahkan parameter lain pada algoritma yaitu parameter C yang disebut sebagai regularization parameter atau parameter keteraturan. Ada juga yang menyebutnya slack parameter. Jui Yang Hsia dan Chih-Jen Lin dalam tulisannya [15] menyatakan bahwa regularization parameter ini berfungsi untuk menghindari overfitting pada training data. 

Kembali pada kasus prediksi rumah di Boston, mari kita coba tambahkan parameter C pada data. Jika kita set nilai C = 2.0, lantas hasilnya adalah sebagai berikut.

mITQaHcwg4ufqQbloMhZCoLKTetdykEr-nW98JeOGpEAnHSXE0UtlmBtg8k0lJqo6mpV3mcGMkgg-ypW2S4Dum3dEMObsySOqM4eNASe5GV9reHxQWSc5ebfsy-iOoIbYT664xZu

Perhatikan bahwa sekarang model kita menyesuaikan sebaran data dengan lebih baik dibanding model sebelumnya. 

Sampai sini sudah paham ya? Ada dua parameter yang kita gunakan dalam model SVR, yaitu parameter ϵ yang menunjukkan margin of error dan parameter C yang merupakan parameter keteraturan atau regularization parameter.

Ada tiga jenis implementasi Support Vector Regression pada scikit-learn yaitu: SVR, NuSVR, dan LinearSVR. Implementasi dari LinearSVR lebih cepat dari SVR tetapi hanya dapat digunakan untuk kernel linear, sedangkan NuSVR mengimplementasikan formula yang sedikit berbeda dari SVR dan LinearSVR. NuSVR menggunakan parameter nu untuk mengontrol jumlah support vector. Jika tertarik untuk lebih memahami bagaimana implementasi SVR pada scikit-learn, Anda bisa mengunjungi tautan berikut: SVRNuSVR, dan LinearSVR.

Latihan SKLearn SVR 

Kode program yang akan diajarkan di sini bisa diunduh di tautan berikut ini. Untuk membukanya upload berkasnya ke Watson Studio atau Google Colab.


Tujuan

Setelah mengenal support vector regression, kita akan belajar menerapkan teknik tersebut ke dalam model ML dengan library SKLearn


Tahapan Latihan

Tahapan pada latihan kali ini adalah sebagai berikut:

  1. Ubah data menjadi Dataframe.
  2. Pisahkan atribut dan label.
  3. Latih model SVR.
  4. Buat plot dari model.


Codelab

Dataset yang akan kita gunakan adalah data tentang lama kerja seseorang dan gajinya. Dataset ini dapat diunduh pada tautan berikut.

Setelah mengunggah dataset yang sudah di-unzip pada IBM Watson Studio atau Google Colaboratory, pada cell pertama notebook kita impor library dasar yang dibutuhkan. Jangan lupa untuk mengubah berkas csv dari dataset menjadi dataframe Pandas.

Seperti modul sebelumnya, silakan ikuti cara mengimpor library pandas dan dataset-nya seperti latihan : latihan import dataset dan panda.

Sesuaikan dengan dataset Salary_Data yang sudah Anda unduh.

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()

202004302219212b31ccb844f5b74fe020892558a3f2c4.png

Selanjutnya kita tampilkan 5 baris pertama dari dataframe.

  1. data.head()

20200430221937f8fcdbb22b2fd644fae316e777caf6bd.png

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. # memisahkan atribut dan label
  4. X = data['YearsExperience']
  5. y = data['Salary']
  6.  
  7. # mengubah bentuk atribut
  8. X = X[:,np.newaxis]

Berikutnya kita buat buat objek support vector regression dan di sini kita akan mencoba menggunakan parameter C = 1000gamma = 0.05, dan kernel ‘rbf’. Setelah model dibuat kita akan melatih model dengan fungsi fit pada data.

  1. from sklearn.svm import SVR
  2.  
  3. # membangun model dengan parameter C, gamma, dan kernel
  4. model  = SVR(C=1000, gamma=0.05, kernel='rbf')
  5.  
  6. # melatih model dengan fungsi fit
  7. model.fit(X,y)

Terakhir kita bisa memvisualisasikan bagaimana model SVR kita menyesuaikan terhadap pola yang terdapat pada data menggunakan library matplotlib.

  1. import matplotlib.pyplot as plt
  2.  
  3. # memvisualisasikan model
  4. plt.scatter(X, y)
  5. plt.plot(X, model.predict(X))

2020043022261508ebe6b37a230570811447be760a3382.png

Hasil visualisasi menunjukkan bahwa model yang kita kembangkan, belum mampu menyesuaikan terhadap pola pada data dengan baik. Nah, pada modul berikutnya kita akan mencoba meningkatkan performa model kita dengan menggunakan grid search.

Pendahuluan Dasar-Dasar Machine Learning

Pada tahap ini Anda telah mengenal beberapa model machine learning dan tahu apa fungsi dari setiap model tersebut. Pada submodul ini kita akan lebih mengenal bagaimana implementasi ML, teknik untuk mencari parameter terbaik serta menguji kualitas sebuah model.

Pada modul ini juga akan dibahas tentang beberapa teknik dalam rekayasa fitur/atribut yang umum dipakai untuk meningkatkan kualitas dari data untuk pelatihan model.

Machine Learning Workflow

Dalam sebuah project machine learning ada tahapan-tahapan yang perlu dilalui sebelum project tersebut bisa diimplementasi di tahap produksi. Tahapan-tahapan yang dimaksud menurut buku Hands on Machine Learning karya Geron [4] dapat dirangkum dalam diagram berikut.

AQUB5ZURSkkYQqpDa8nssTekhfLtnzzIpK2QSb0dpZn3C3joj-Jz0YOTOb4T2P6BHWTei1vKvsMBosk6ASQARkv6ol_qadWl8qzdq8RDolR-ZV7uVWONUBXc7rL0mU7paKSimBq1

Tahapan dalam diagram ini bersifat iteratif yang berarti prosesnya bisa berulang sesuai kebutuhan. Anda mungkin perlu untuk mengevaluasi ulang proses yang Anda jalankan dan kembali ke langkah sebelumnya, kapan saja dibutuhkan selama prosesnya.


Proses pengumpulan data.

Pada modul Data Introduction Anda telah mengetahui beberapa sumber dataset untuk model machine learning. Dari sumber-sumber tersebut, Anda dapat memilih, mengunduh dan menggunakan dataset yang sesuai dengan kebutuhan Anda kapan saja. Proses ini relatif mudah. Tantangannya adalah memilih dataset yang tepat untuk model Anda. 

Tetapi jika Anda adalah seorang Machine Learning Engineer pada sebuah perusahaan yang bertugas untuk membangun model ML untuk keperluan perusahaan, tentu proses pengumpulan datanya tidak semudah Anda mengunduh dataset yang sudah jadi. Anda perlu mengumpulkan dan mengekstrak sendiri data dari berbagai sumber misalnya database, file, data sensor, dan sumber lainnya. Pada tahap ini Anda juga perlu berurusan dengan berbagai jenis tipe data dari mulai structured data (seperti excel file atau database SQL), sampai unstructured data (seperti text file, email, video, audio, gambar, data sensor, dan lainnya). Menurut Gartner lebih dari 80% data perusahaan adalah unstructured data.

Exploratory Data Analysis

Exploratory data analysis atau EDA bertujuan sebagai analisa awal terhadap data dan melihat bagaimana kualitas data untuk meminimalkan potensi kesalahan di kemudian hari. Pada proses ini dilakukan investigasi awal pada data untuk menemukan pola, anomali, menguji hipotesis , memahami distribusi, frekuensi, hubungan antar variabel, dan memeriksa asumsi dengan teknik statistik dan representasi grafik. 

Pada umumnya EDA dilakukan dengan dua cara, yaitu univariate analysis, bivariate analysis, dan multivariate analysis. Univariate analysis adalah analisis deskriptif yang memeriksa pola dengan satu variabel pada modelnya. Sedangkan bivariate analysis memiliki dua variabel pada modelnya. Multivariate analysis merupakan analisis deskriptif yang memeriksa pola dalam data multidimensi dengan membertimbangkan dua atau lebih variabel. Karena multivariate analysis mempertimbangkan lebih banyak variabel, ia dapat memeriksa fenomena yang lebih kompleks dan menemukan pola data yang mewakili dunia nyata dengan lebih akurat. 

Jika tertarik untuk belajar lebih lanjut mengenai exploratory data analysis, Anda dapat membaca tautan-tautan berikut: tautan 1tautan 2tautan 3tautan 4.


Data preprocessing

Data preprocessing adalah tahap di mana data diolah lebih lanjut sehingga menjadi siap dipakai dalam pengembangan model ML. Dengan kata lain, proses ini mengubah dan mentransformasi fitur-fitur data ke dalam bentuk yang mudah diinterpretasikan dan diproses oleh algoritma machine learning. Termasuk di dalam data preprocessing adalah proses data cleaning dan data transformation.

Beberapa hal yang bisa dilakukan dalam proses data cleaning adalah: penanganan missing value, data yang tidak konsisten, duplikasi data, ketidakseimbangan data, dll. Sementara beberapa hal yang bisa dilakukan untuk proses transformasi data adalah: scaling atau merubah skala data agar sesuai dengan skala tertentu, standarisasi, normalisasi, mengonversi data menjadi variabel kategori, dan sebagainya. Tidak lupa pula, proses train-test split yang pernah kita pelajari pada modul sebelumnya juga merupakan bagian dari data preprocessing. 


Model selection

K. P. Murphy dalam bukunya yang berjudul Machine Learning: a Probabilistic Perspective [16] menuliskan kalimat berikut: “when we have a variety of models of different complexity (e.g., linear or logistic regression models with different degree polynomials, or KNN classifiers with different values of K), how should we pick the right one?”. Berangkat dari pertanyaan ini, menentukan model yang sesuai dengan data merupakan tahapan yang penting dalam machine learning workflow.

Jie Ding, et al dalam tulisannya “Model Selection Techniques -An Overview” [17] menyatakan bahwa tidak ada model yang cocok secara universal untuk data dan tujuan apa pun. Pilihan model atau metode yang tidak tepat dapat menyebabkan kesimpulan yang menyesatkan atau performa prediksi yang mengecewakan. Sebagai contoh, saat kita memiliki kasus klasifikasi biner kita perlu mempertimbangkan apa model terbaik untuk data kita, apakah logistic regression atau SVM classifier. 

Setelah kita menentukan metode yang cocok untuk data yang ada, kita perlu mengubah hyperparameter untuk mendapatkan performa terbaik dari model. Mengubah nilai hyperparameter saat kita menjalankan algoritma ML akan memberikan hasil atau performa model yang berbeda. Proses menemukan performa terbaik model dengan pengaturan hyperparameter yang berbeda ini juga disebut model selection.

Dengan demikian, dalam konteks machine learning, model selection bisa berarti dua hal: pemilihan learning method atau algoritma ML dan pemilihan hyperparameter terbaik untuk metode machine learning yang dipilih. 


Model Evaluation

Setelah mengutak-atik model Anda dengan hyperparameter yang berbeda, akhirnya Anda mendapatkan model yang kinerjanya cukup baik. Langkah selanjutnya adalah mengevaluasi model akhir pada data uji. Sederhananya, langkah evaluasi model dapat dijabarkan sebagai berikut: memprediksi label pada data uji, menghitung jumlah prediksi yang salah (eror) kemudian membandingkannya dengan data label yang kita miliki. Dari data perbandingan ini kita dapat menghitung akurasi atau performa model.

Pada prinsipnya proses model evaluation adalah menilai kinerja model ML pada data baru, yaitu data yang belum pernah “dilihat” oleh model sebelumnya. Evaluasi model bertujuan untuk membuat estimasi generalisasi eror dari model yang dipilih, yaitu, seberapa baik kinerja model tersebut pada data baru. Idealnya, model machine learning yang baik adalah model yang tidak hanya bekerja dengan baik pada data training, tapi juga pada data baru. Oleh karena itu, sebelum mengirimkan model ke tahap produksi, Anda harus cukup yakin bahwa performa model akan tetap baik dan tidak menurun saat dihadapkan dengan data baru.

Deployment

Ketika model dievaluasi, model siap untuk dipakai pada tahap produksi. Caranya adalah dengan menyimpan model yang telah dilatih dari tahap preprocessing hingga pipeline prediksi. Kemudian deploy model tersebut ke tahap produksi untuk membuat prediksi dengan memanggil kode predict()-nya,

Geron [4] memberikan contoh ilustrasi model deployment seperti tampak dalam gambar berikut. 

dMFsxYnLOuUSNUXWWud42Xqx9MnU02lJ_rBCzruOjwTE9cj-QGWLzPQOVu-QMunLeuR1RFmF21TgGXOAi0oBlgRmRZagRNbBvBamnN0Vx0t0OoUKnT2aUWxwZBCaF1EGDjrXN95e

Misalnya sebuah model regresi untuk menentukan harga rumah akan digunakan dalam situs web. Pengguna akan mengetik beberapa data tentang lokasi yang diinginkan dan mengeklik tombol “Prediksi Harga”. Proses ini akan mengirimkan query yang berisi data ke server, kemudian meneruskannya ke aplikasi web Anda. Terakhir, kode akan memanggil fungsi predict() untuk memberikan hasil prediksi pada Anda. 


Monitoring

Model yang telah dipakai dalam tahap produksi masih harus tetap dimonitor untuk menjaga kualitasnya. Pada tahap produksi model bisa saja menemukan data yang tidak dikenali sehingga performa model dapat menurun. Contoh kasus misalnya, jika model Anda merupakan sistem rekomendasi yang menyarankan produk untuk pengguna, maka untuk memantau performa model bisa dengan cara menghitung jumlah produk rekomendasi yang terjual tiap hari. Jika angka ini turun (dibandingkan dengan produk yang tidak direkomendasikan), maka kemungkinan model kita perlu dilatih ulang menggunakan data-data baru. 

Jika Anda bekerja dengan model machine learning yang datanya terus berubah, Anda perlu melakukan update pada dataset dan melatih ulang model Anda secara reguler. Atau, Anda perlu membuat sistem yang dapat membuat proses update ini berjalan secara otomatis. 

Bagaimana, semoga cukup jelas ya? 

Machine learning melibatkan cukup banyak proses dan infrastruktur dalam membangun modelnya. Memahami algoritma machine learning memang penting, tapi memahami keseluruhan proses machine learning hingga ke tahap produksi juga tak kalah pentingnya. Pada kelas Belajar Pengembangan Machine Learning Anda akan belajar tentang bagaimana men-deploy model machine learning Anda ke tahap produksi. Tetap semangat belajarnya, ya!

ML dan Business Intelligence

Business Intelligence atau sering disebut BI telah menjadi bidang keahlian yang penting dalam Data Analytics. BI mengacu pada penggunaan berbagai alat dan teknologi dalam proses pengumpulan, analisis, dan interpretasi data bisnis. Tujuan utama business intelligence adalah untuk memberikan informasi dan analisis yang berguna untuk membantu proses pengambilan keputusan dan strategi perusahaan. 

Sebagai contoh, mari kita perhatikan studi kasus pada sebuah perusahaan 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. Machine learning adalah teknik yang bisa mendeteksi pola dari sekumpulan data. 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, kita bisa menyimpulkan bahwa BI adalah bidang yang menjelaskan apa yang terjadi di masa lampau dan analisis yang menyebabkan hal tersebut terjadi. BI memungkinkan data untuk dipahami dalam perannya untuk kepentingan bisnis dan dengan teknik visualisasi, kita menggunakan BI untuk membuat keputusan-keputusan bisnis. Sedangkan ML adalah bidang yang mencoba memprediksi apa yang akan terjadi di masa mendatang dari pola data di masa lalu.

Berikut adalah perbedaan antara BI dan ML yang dirangkum oleh Booz Allen Hamilton.

PNivdR7Svm9gosY6hecaawIEuJAVoLBcgUES3XheK6kBk2k8Rcl8LL__6YIBh1_5n_-__JiwCarzDoA7cWFo8eyqvke-ULMIWMKz1L9WiNSn0Blg4PbVVxV71cySyHyrY1ubQ-i2

 

ML di Bidang Data Analytic

Di era digital saat ini perusahaan menghasilkan sejumlah besar data dari berbagai sumber. Apakah itu dari sistem perusahaan, sosial media, smartphone atau komputer klien, sensor dan instrumen iOT, dan sumber lainnya. Data analytics adalah istilah luas yang mengacu pada penggunaan berbagai teknik untuk menemukan pola dalam data. Ia adalah proses di mana data diubah menjadi informasi berharga dan prediksi untuk masa mendatang. Data analytics memungkinkan kita untuk menjelaskan apa yang terjadi di masa lalu, mendapatkan informasi penting tentang masa kini, dan membuat prediksi tentang masa depan.

Data analytics bukanlah bidang yang baru, ia telah lama digunakan dalam dunia bisnis. Data analytics di masa lalu contohnya adalah penggunaan statistik untuk memperoleh rata-rata penjualan dalam jangka waktu tertentu atau menentukan tren penjualan di daerah-daerah tertentu. Anda tentu telah terbiasa mengoperasikan excel dari sejak lama, bukan? Betul, excel adalah bagian dari data analytics. Seiring berjalannya waktu, bidang data analytics terus dikembangkan untuk memenuhi kebutuhan analisis perusahaan yang juga terus berkembang.

Hingga saat ini, data analytics dan machine learning hampir selalu bekerja berdampingan untuk menyelesaikan permasalahan industri. Analis jadi bisa melihat lebih dalam suatu masalah berdasarkan data yang ada, 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. Dengan cara inilah machine learning membantu proses analisis data dan pengambilan keputusan di industri.

Overfitting dan 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.

Bagaimana untuk melihat apakah sebuah model overfit atau underfit?

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.

 

Overfitting

Bayangkan suatu saat Anda berkunjung ke suatu kota, kemudian Anda mengalami kejadian tidak menyenangkan seperti dicopet di dalam angkutan umum. Anda kemudian mungkin akan berpikir bahwa semua angkutan umum di kota tersebut tidak aman. Kadang-kadang, kita melakukan generalisasi yang berlebihan terhadap sesuatu.

Demikian halnya pada mesin yang juga bisa terjebak pada persepsi generalisasi yang sama. Dalam machine learning, kondisi ini disebut sebagai overfitting.

Overfitting terjadi ketika model memiliki prediksi yang terlalu baik pada data training, namun prediksinya buruk pada data testing. Ketika sebuah model overfit, model tidak dapat melakukan generalisasi dengan baik sehingga 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.

Sebelum men-deploy model ML ke tahap produksi, ada teknik sederhana untuk mengecek apakah model overfit atau tidak. Pada model klasifikasi jika akurasi model pada data training tinggi dan data testing rendah, maka model yang Anda kembangkan overfitting. Pada model jenis regresi, jika model membuat kesalahan yang tinggi pada data testing maka model tersebut overfitting.

Beberapa cara untuk menghindari overfitting yaitu:

  • 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.

 

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.

ItYEO3wMgY4c9_apMBfl90F4HhnlG8o3VvTge1LhRrDOYzFoYqQ4wab4meWDpIUvltz1iO3pv6fG__LXdVE0csurZ6disoONd3nV_cLulhLdTZsr7RSGG-CRjrDzAEzXe-yGczrm

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.

 

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.

TwY6U9_TdQvQyQTxrSav1LfjUaWqRMNVmh-WFY95Ml80py1WjxJ2TivZOdpPsIONNg6qTuJDglz5yelppuzZJgjSlNZzpy0HnLBkGDk2e1fJic5h0mvDbBXRa6FzLqZ0fkz7WJiv

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.

202101201406554a7694d254a6365a2629fa5b2ae46ebe.png

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.

202004301732466d6c95f7b7df543d9b49b6605663c731.png

Ketika mengembangkan model K-Means seperti di atas, mengubah parameter -- dalam hal ini memilih jumlah n_cluster -- merupakan bentuk dari tuning parameter.

Tuning Parameter adalah istilah yang digunakan untuk meningkatkan performa model machine learning. Proses ini mirip dengan proses tweak. Misalnya pada komputer di mana kita mengganti komponen komputer sehingga peranti tersebut memiliki performa lebih tinggi demi kinerja efisien. Pada model K-means di atas, jumlah cluster yang kurang atau terlalu banyak akan menyebabkan hasil pengklasteran kurang optimal. Tuning parameter dalam hal ini adalah bereksperimen mencari parameter terbaik untuk model K-Means tersebut.

Tujuan melakukan tuning pada model yaitu agar model memiliki tingkat eror yang lebih kecil atau akurasi yang lebih baik. Sebuah contoh dari tuning parameter adalah pada kasus spam filter, di mana model spam filter yang telah di-tuning akan lebih akurat dalam mendeteksi email spam, dan melakukan lebih sedikit kesalahan dalam memprediksi email spam yang bukan spam.

Berbagai model machine learning dari library SKLearn memiliki parameter-parameter yang bisa kita ubah untuk meningkatkan performa dari sebuah model tersebut. Contohnya pada decision tree terdapat beberapa parameter seperti di bawah. Kalau Anda tertarik mengetahui berbagai jenis model machine learning dan parameter setiap model tersebut, kunjungi tautan berikut yah.

2020043017315919187a186828fe71570a1bcc95e1e5ac.png

Ada salah satu teknik untuk menguji beberapa parameter sekaligus. Teknik ini disebut dengan Grid Search.


Grid Search

Grid search memungkinkan kita menguji beberapa parameter sekaligus pada sebuah model. Contohnya kita bisa menguji beberapa jumlah cluster untuk sebuah model K-Means dan melihat bagaimana performa model K-Means terhadap nilai K yang berbeda. Untuk lebih memahami grid search, kita akan mencoba grid search menggunakan SKLearn.

Latihan SKLearn dengan Teknik Grid Search

Kode program yang akan diajarkan di sini bisa diunduh di tautan berikut ini. Untuk membukanya upload berkasnya ke IBM Watson Studio atau Google Colab.


Tujuan

Untuk latihan kali ini kita akan menggunakan grid search untuk 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. Tujuan kita adalah menggunakan grid search untuk mencari parameter yang lebih baik bagi model.

2020043017423469a6a240d7a34bd10eefcb8f019c997a.png


Tahapan Latihan

Tahapan latihan kali ini sebagai berikut:

  1. Ubah dataset data menjadi Dataframe.
  2. Definisikan parameter yang akan diuji.
  3. Jalankan fungsi grid search.
  4. Latih model dengan parameter terbaik hasil grid search.
  5. Buat plot dari model.


Codelab

Pertama, unduh berkas "Salary_Data.csv", dari tautan berikut ini. Jika sudah jangan lupa upload ke Watson Studio atau Google Colab Anda. Berikut caranya.

Seperti modul sebelumnya, silakan ikuti cara mengimpor library pandas dan dataset-nya seperti latihan : latihan import dataset dan panda.

Sesuaikan dengan dataset Salary_Data yang sudah Anda unduh.

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. # memisahkan atribut dan label
  4. = data['YearsExperience']
  5. = data['Salary']
  6.  
  7. # mengubah bentuk atribut
  8. 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.

  1. from sklearn.model_selection import GridSearchCV
  2. from sklearn.svm import SVR
  3.  
  4. # membangun model dengan parameter C, gamma, dan kernel
  5. model = SVR()
  6. parameters = {
  7.     'kernel': ['rbf'],
  8.     'C':     [1000, 10000, 100000],
  9.     'gamma': [0.5, 0.05,0.005]
  10. }
  11. grid_search = GridSearchCV(model, parameters)
  12.  
  13. # melatih model dengan fungsi fit
  14. grid_search.fit(X,y)

Setelah grid search mencari parameter terbaik pada model, kita bisa menampilkan parameter terbaik dengan memanggil atribut best_params_ dari objek grid search.

  1. # menampilkan parameter terbaik dari objek grid_search
  2. print(grid_search.best_params_)

Selanjutnya Anda bisa mencoba membuat model SVM baru dengan parameter hasil grid search dan melatihnya pada data.

  1. # membuat model SVM baru dengan parameter terbaik hasil grid search
  2. model_baru  = SVR(C=100000, gamma=0.005, kernel='rbf')
  3. model_baru.fit(X,y)

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.

  1. import matplotlib.pyplot as plt
  2. plt.scatter(X, y)
  3. plt.plot(X, model_baru.predict(X))

 20200430175750c0258f1d2bdc64a9fd8bf76dda6d50cb.png

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.

Menambahkan/Mengurangi Fitur

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 sebelumnya.


Binning

Binning adalah pengelompokan nilai sesuai dengan batas besaran yang ditentukan. Pada binning, data dikelompokkan dalam tiap ‘bin’ sesuai dengan nilai yang cocok dengan bin tersebut. Bin sederhananya adalah sebuah kategori yang menampung nilai-nilai tertentu.

Ada beberapa jenis binning di mana salah satu contohnya adalah binning jarak. Pada binning jarak, nilai-nilai dari sebuah atribut akan dikategorikan ke dalam jumlah bin tertentu yang memiliki interval sama besar. Pada gambar dibawah dapat dilihat contoh kumpulan nilai yang dibagi menjadi 4 bin8 bin, dan 16 bin.

20200430175945f4cc1fc6bf54a840308a61a945d1ffd6.png

Binning bisa membantu untuk menghindari overfitting. Namun binning juga mengorbankan informasi yang terkandung dari sebuah atribut sehingga, penggunaanya perlu dilakukan dengan teliti. Di bawah adalah contoh untuk melakukan binning pada dataframe Pandas.

  1. data[‘bin’] = pd.cut(data[‘value’], bins=[0, 30,  70, 100], labels=[“Low”, Mid”, High”])
  2.  
  3.  
  4.     value    bin
  5. 0      13    Low
  6. 1      25    Low
  7. 2      32    Mid
  8. 3      94    High
  9. 4      49    Mid

Mari kita ulas aplikasi binning pada model linear seperti yang dituliskan oleh S. Guido dan A. C. Muller dalam bukunya [1]. Seperti yang kita tahu, model linear hanya bisa menghasilkan relasi linear, yang mana hasil regresinya merupakan garis pada fitur tunggal. Di sisi lain, model decision tree dapat menghasilkan model yang lebih kompleks dari data, meskipun model ini sangat bergantung pada representasi data. Salah satu cara untuk membuat model linear lebih efektif dalam data kontinyu adalah dengan melakukan proses binning pada fitur.

202104161403419af1d9ab5257be4008c76c468c0a1f28.jpeg

Gambar di atas menunjukkan perbandingan regresi linear dan decision tree pada dataset gelombang. Dengan teknik binning, kita membagi jangkauan input untuk fitur (dalam hal ini dari -3 ke 3) ke dalam angka/bin yang tetap, misal 10. Titik-titik data kemudian direpresentasikan ke dalam bin yang telah ditentukan tadi. Ada beberapa cara untuk menentukan batas bin, misalnya dengan membuat tepi bin berjarak sama, atau menggunakan kuartil data. Pada library sklearn, kedua teknik ini diimplementasikan dengan KBinsDiscretizer.

Jika kita melakukan proses binning pada data gambar di atas, maka hasilnya akan seperti berikut.

20210416140340ba962d5c4a5064232aa48359baf4f6ea.jpeg

Kalau Anda tertarik untuk mempelajari lebih lanjut tentang binning, kunjungi tautan-tautan berikut yah, tautan 1tautan 2tautan 3.


Splitting

Memisahkan sebuah atribut menjadi atribut-atribut baru juga merupakan salah satu cara yang berguna. Dengan splitting kita membuat atribut lebih mudah dipahami oleh model machine learning. Di lapangan sering kita temui data dengan kolom string melanggar prinsip tidy data (Hadley Wickham). Memisahkan sebagian data dalam kolom menjadi fitur baru memberikan keuntungan antara lain: 1) meningkatkan performa model dengan menemukan informasi berharga; dan 2) membuat kita lebih mudah untuk melakukan proses binning (yang akan dijelaskan kemudian) dan grouping.

Ada beberapa cara untuk melakukan fungsi split, tergantung pada karakteristik kolom. Mari kita ambil salah satu contoh kasus. 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.

Contoh lain adalah kolom ‘full_name’. Misal kita hanya membutuhkan informasi nama hanya terdiri dari satu kata. Maka, kita dapat membagi atribut pada kolom nama dengan memisahkan data ‘first_name’ dan ‘last_name’ kemudian menggunakan salah satu atribut baru tersebut sesuai kebutuhan.

Perhatikan contoh code berikut ya.

  1. import pandas as pd 
  2.  
  3. Developer = pd.DataFrame({'Name': ['Isyana Saraswati', 'Nicholas Saputra', 'Raisa Andriana'], 
  4.         'Age':[30, 36, 32]}) 
  5. print("Machine Learning Developer di Indonesia :\n", Developer) 
  6.  
  7. Developer[['First','Last']] = Developer.Name.str.split(expand=True) 
  8. print("\n Split kolom 'Name', lalu tambahkan kedua kolom : \n", Developer)

Jika dieksekusi, code di atas akan memberikan hasil sebagai berikut.

202104161403372b7f9daa436e5047362f144644392efc.jpeg


Interaction feature

Dalam model machine learning, kita juga bisa menciptakan fitur atau atribut baru dari atribut-atribut yang ada. Mengkombinasikan dua atribut kadang bisa menjelaskan varian data dengan lebih baik dibanding dua atribut yang dioperasikan secara terpisah. Membuat atribut baru melalui interaksi antar atribut disebut sebagai interaction feature. Sederhananya, interaction feature adalah perkalian produk antara dua buah fitur. Analoginya adalah logika AND.

Mari kita jabarkan penjelasan di atas dalam contoh berikut.

  • Misal kita telah memiliki sebuah atribut bernama ‘schools’ yaitu sejumlah sekolah yang berada dalam radius 5 km dari pusat kota.

  • Kita juga memiliki atribut lain yaitu ‘accredited_A’ yang merupakan sejumlah sekolah yang telah terakreditasi A.

  • Dalam menentukan pilihan sekolah, kita mungkin menginginkan sekolah yang dekat tapi juga telah memiliki akreditasi A. 

  • Untuk mengakomodasi kebutuhan tersebut, kita dapat membuat atribut baru misalnya: ‘selected_schools’ = ‘schools’ x ‘accredited_A’

Mudah bukan? Betul, interaction feature sangat mudah untuk dirumuskan, tetapi biaya komputasinya cukup tinggi. Untuk sebuah model linear dengan interaction feature berpasangan, kebutuhan waktu pelatihannya akan berubah dari O(n) menjadi O(n2), di mana n adalah jumlah fitur tunggal. 

Ada beberapa cara untuk mengatasi permasalahan ini. Pertama adalah dengan melakukan feature selection, teknik lain dalam feature engineering. Cara kedua adalah dengan menyusun (handcrafted) sejumlah kecil fitur kompleks secara hati-hati.

Pendahuluan 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 networkmulti layer perceptron, dan convolutional neural network. Setelah mempelajari modul ini Anda akan memahami bagaimana neural network dapat dipakai dalam bidang yang rumit untuk dikerjakan oleh model machine learning biasa, seperti computer vision.

Artificial Neural Network

Para penemu kerap mencari inspirasi dari alam dan fenomena sehari-hari. Dulu pada tahun 1904 burung menginspirasi Wright bersaudara untuk menciptakan pesawat laik terbang perdana di dunia. Kini, desain futuristik kapal selam tenaga nuklir milik Royal Navy Inggris, contohnya, juga meniru bentuk paus, belut, dan ikan pari manta.

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.

ANN merupakan salah satu model ML yang multiguna, powerful, dan memiliki skalabilitas tinggi. Dengan kelebihan tersebut ANN sangat ideal dipakai dalam menangani masalah ML yang sangat kompleks seperti mengklasifikasi miliaran gambar, mengenali ratusan bahasa dunia, merekomendasikan video ke ratusan juta pengguna, sampai belajar mengalahkan juara dunia permainan papan GO.


Neuron dalam Otak

Sebelum kita belajar mengenai saraf tiruan, kita akan mengenal lebih dahulu saraf biologis (neuron). National Institute of Neurological Disorders and Stroke [18] dalam tulisannya yang berjudul “Brain Basics: The Life and Death of a Neuron” menyatakan bahwa neuron atau saraf adalah pembawa pesan/informasi. Mereka menggunakan impuls listrik dan sinyal kimiawi untuk mengirimkan informasi antara area otak yang berbeda, serta antara otak dan seluruh sistem saraf.

Sebuah saraf terdiri dari 3 (tiga) bagian utama, yaitu badan sel yang disebut nukleus, akson, dan dendrit. Nukleus berisi materi genetik dan bertugas mengontrol seluruh aktivitas sel. Akson adalah cabang yang terlihat seperti ekor yang panjang, bertugas mengirimkan pesan dari sel. Panjang akson berkisar antara beberapa kali lebih panjang dari badan sel, sampai 10 ribu kali lebih panjang dari badan sel. Sedangkan dendrit adalah cabang-cabang pendek yang terlihat seperti cabang pohon, bertugas menerima pesan untuk sel. 

Setiap ujung akson dari sebuah neuron terhubung dengan dendrit dari neuron lainnya. Neuron berkomunikasi satu sama lain dengan mengirimkan senyawa kimia yang disebut neurotransmitter, melintasi ruang kecil (synapse) antara akson dan dendrit neuron yang berdekatan. Ketika sebuah neuron mendapatkan rangsangan, neuron tersebut akan mengirim sinyal ke neuron lainnya. Seperti ketika kita tidak sengaja menyentuh panci yang panas, saraf di  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.

_1IwNKpvuCdHWvk8kwhpO8hvj4lSOwnrjk1jePPFe6-cg35mO3PjOXDx0AEVM5T8X2-ffc9sxZbe5faomTTABJZG7sWPnFBo4wf52LV1AIuDekV-zrRZp3EpNAsgLn0xml_3TiBd

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?

17CUzttrzcFw6A2BbNAmxhfDilAulM2A8YjezEs-p4P6fqFKKpNG1rD2-R2jY5TMrzBPJaADp3GmjRVeSZaKaInf42KPQYt27UQ1sad5xiTzZ6Dh9Id1Ud6EPCP3f_QTxp-H_2_3

 

Perceptron

Perceptron adalah komponen dasar pembangun jaringan saraf tiruan. Frank Rosenblatt dari Cornell Aeronautical Library adalah ilmuwan yang pertama kali menemukan perceptron pada tahun 1957 [19]. 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. 

Lantas bagaimana perceptron bekerja pada jaringan saraf tiruan? 

Sebuah perceptron menerima masukan berupa bilangan numerik. Perceptron kemudian memproses masukan tersebut untuk menghasilkan sebuah keluaran. Agar lebih memahami cara kerja perceptron, kita akan menggunakan diagram di bawah.

pDeBAcup_I82X7CsRjSjHRxsPtUFLQnXjV8JKPRTZykkvRZpYeql-w2IwP0gkuJNHP4XkKc0Il-pB5g9LS1rvPeMStF3Ypj51eiNdzai60GgQnbKwj61Rw3WxFPb8p9vrGhkHaqq

Sebuah perceptron terdiri dari 5 komponen yaitu:

  1. Input (xi)

  2. Bobot atau weights (Wi) dan bias (W0)

  3. Penjumlahan atau sum (∑)

  4. Fungsi aktivasi atau non linearity function (⎰)

  5. Output (y)

Berikut adalah proses yang menjelaskan bagaimana perceptron bekerja, yaitu:

  • Input menerima masukan berupa angka-angka. 

  • Setiap input memiliki bobot masing-masing. Bobot adalah parameter yang akan dipelajari oleh sebuah perceptron dan menunjukkan kekuatan node tertentu. 

  • Selanjutnya adalah tahap penjumlahan input. Pada tahap ini setiap input akan dikalikan dengan bobotnya masing masing, lalu hasilnya akan ditambahkan dengan bias yang merupakan sebuah konstanta atau angka. Nilai bias memungkinkan Anda untuk mengubah kurva fungsi aktivasi ke atas atau ke bawah sehingga bisa lebih fleksibel dalam meminimalisasi eror. Penjelasan lebih lanjut tentang bias dapat Anda pelajari pada tautan berikut.

    Hasil penjumlahan pada tahap ini biasanya disebut weighted sum.
  • Langkah keempat, aplikasikan weighted sum pada fungsi aktivasi atau disebut juga Non-Linearity Function. Fungsi aktivasi digunakan untuk memetakan nilai yang dihasilkan menjadi nilai yang diperlukan, misalnya antara (0, 1) atau (-1, 1). Fungsi ini memungkinkan perseptron dapat menyesuaikan pola untuk data yang non linier. Penjelasan lebih lanjut tentang fungsi aktivasi akan diulas pada paragraf di bawah.

  • Setelah semua langkah di atas, akhirnya kita memperoleh output, yaitu hasil dari perhitungan sebuah perceptron yang merupakan bilangan numerik.

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) sehingga menghasilkan weighted sum, kemudian dimasukkan ke dalam fungsi aktivasi (g).

68N1mGs6v0nEfRI2ZWAEHys6Xd6Qmez-J_Bb-8wn3l7npMCaup6lV9-yytQeLGBrlZFmc5LLhKon5oYJ_8tbXTn_D9QbWfynZk3eYSI9227cShRmbmnIo30HqavjUvH0_vb0O-Hc

Fungsi aktivasi pada perceptron bertugas 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.

PmpW5B0TqjSHCl4VAIwy2OkRKEr0fQSwxTRk6zpaNBPRwtw59VdVvanh3Kv7eZiUvSmd3Q5urNsvoiIQ5pfh9kdcEYa_-k2lRM0Bn0J_9t1Y0iLm-FSQDcqqB8OQNsNo7FmoWD-I

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.

YbeB93g4yLpVwCw8hv-b19MjC7dvrQMlRzRaq5BqCa5vlytbjXquyuQ0RRr2JdRS798pGOtFEOu090SlICgKBwgot4lIk802w0UgwY95xL_CrZzn-hxZy4B0zpbYC8oVDKcq_i36

Ada 3 fungsi aktivasi yang paling umum yaitu sigmoid function, hyperbolic tangent, dan rectified linear unit (ReLU). Berikut adalah penjelasannya.


Sigmoid atau Logistic Function.

Fungsi ini berada di antara nilai 0 hingga 1 sehingga biasanya digunakan untuk memprediksi model probabilitas yang outputnya ada di kisaran 0 dan 1. Dengan kemiringan yang halus (smooth gradient) memungkinkan Gradient Descent (algoritma pengoptimalan yang mampu menemukan solusi optimal untuk berbagai masalah) berprogres pada setiap langkahnya. 

Selain itu, fungsi sigmoid memberikan nilai prediksi yang lebih jelas. Dari gambar di bawah [20], perhatikan bahwa nilai X di bawah -2 atau di atas 2 cenderung memberikan nilai prediksi yang sangat dekat dengan 0 atau 1.

xEJkmEAh7n96PZyOWJXDOmojkW2QCvmstP2VxLgenpeYKReLC2TF-jfKbyCiEMwPkwOXKOP_qEkp7gSbg0JH5q-rRHvMXDpiHSV8vCEiVtbn3slw3qOOVqn_PrpuyDXtzol-h2ah


Hyperbolic Tangent (tanh)

Sama seperti fungsi sigmoid, fungsi tanh berbentuk S, kontinu, dan dapat dibedakan. Perbedaannya adalah nilai keluarannya berkisar dari -1 hingga 1. Rentang tersebut cenderung membuat keluaran setiap lapisan kurang lebih berpusat di sekitar 0 pada awal pelatihan sehingga dapat membantu mempercepat konvergensi [4]. Sifat zero centered ini juga membuat fungsi ini lebih mudah dalam memodelkan masukan yang memiliki nilai sangat negatif, netral, dan sangat positif.

K4rbhP9KhJcdZW4vvwngFYRtBMvVagDhbRNidm6oxuXAuXukR8GqyNneKg16pNubNt1N35Cfu4-2G2lowjDN5x60jfgLrHdjQvA4pG9J5KtrrxLyfF0g0Z1IyzkXBgHVwoo2DIcL

  1. Rectified Linear Unit (ReLU) 

Fungsi ReLU bersifat kontinu meski kemiringannya berubah secara tiba-tiba dan nilai turunannya bernilai 0 pada z < 0. Akan tetapi, fungsi ini bekerja dengan sangat baik dan membuat jaringan bekerja secara efisien sehingga mempercepat waktu komputasi. Karena hal inilah, fungsi aktivasi ini sering digunakan sebagai fungsi aktivasi default pada jaringan saraf tiruan/ANN. 

xdFU1XEjVVCgR-hNWv4gSEpFc4FYUER2rSkZX-ayAQj_7HSf1vcxi8nunuucKOONJAJtvpN_W9H7Y8H6Wn6NxfSeFciOkixJSuCgwUb4N2vgzhqo2JFYatRU9Fa5-fhuw1OP15bN

Beberapa fungsi aktivasi dan turunannya ditunjukkan pada gambar berikut.

_nu8Wv3_k309tRK17nEDdiaAF07cXMeZe2Boju_xH-t_lHp8KbEZPtnjjWp75wAl0p_1O1q_rwCfELefTV7qls8rKxFSbdKl0fjgKl9eHPd--3HvWmKBVVsDJUG3QhtqP3Cg6i6e

Untuk memahami lebih lanjut tentang fungsi aktivasi, kunjungi tautan berikut yah.

Selanjutnya mari kita kembali pada pembahasan mengenai perceptron. Kita akan menggunakan diagram yang lebih sederhana untuk mengilustrasikan perceptron. Pada diagram di bawah, x1, x2, dan x3 adalah input, dan z adalah perceptron. Bias dan bobot tidak masuk dalam ilustrasi agar diagram terlihat lebih sederhana.

eqMZ4et4tu7GtSemzoA0egg2LdPEyaetG3B0EOSs9bl33X_3O5DNcS6Ymlu15U9HiAfmcywngby4okeswTenjYOWDztT2GgCMSODEFtqMVyUPLAYXJ7M4Vv4ZJ7BMiZFfC8Mihfa

Pada gambar di bawah terdapat 2 buah perceptron yaitu Z1 dan Z2. Karena koneksi tiap perceptron dan tiap input sangat padat, jadi dinamakan dengan dense layer. Dense layer adalah sebuah lapisan yang terdiri dari 2 perceptron atau lebih.

3PNB9pQ0JrJl6O9rzm-hz73Qx0a_n1VwN0YJ2Nm4lppcKjN1LlddW7n0cajKCMhxMjG1sp3_-ODyXKq32BmAFO8XtNxoJ5kgHAMaSj9IPxs-4krFbgir4oUFybMn884P1Ih49-GC

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.

5BxtlIv7b2QvWMR3EMVS24DtJwk8UGAkpk9XrleX_IPh0k3ZxpyMTTcv7AHFHkllN77TktS0VPPXBA2fDandkoNtvLYc3ZiySgKiO3ppYEYD8y9Q1qoUR81DNPD9_vpXSIsxweXW

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).

Gambar berikut [21] adalah arsitektur dari sebuah multilayer perceptron dengan dua input, satu hidden layer yang memiliki 4 neuron, dan tiga output neuron. Dalam ilustrasi ini juga kita bisa melihat bias, meskipun biasanya bias ini bersifat implisit. Setiap layer (kecuali output layer) memiliki satu neuron bias dan terhubung sepenuhnya dengan lapisan berikutnya. Pada arsitektur ini sinyal hanya mengalir dalam satu arah (dari input ke output), jadi arsitektur ini adalah contoh dari feedforward neural network (FNN).

20200430185956d9f0a66de0a9763d29454d47c33d82a3.png

Sebuah jaringan saraf tiruan seperti MLP mirip dengan seorang bayi baru lahir yang belum mengerti apa-apa. Dengan belajar lah seorang bayi 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.

Selama bertahun-tahun banyak peneliti yang kesulitan menemukan cara untuk melatih MLP. Barulah pada tahun 1986, David Rumelhart, Geoffrey Hinton, dan Ronald Williams mempublikasikan penelitian yang mengenalkan propagasi balik alias backpropagation [21]. Propagasi balik adalah sebuah algoritma untuk melatih MLP yang masih digunakan hingga sekarang. 

Geron dalam bukunya [4] menyatakan bahwa backpropagation adalah gradient descent dengan teknik yang efisien untuk menghitung gradien secara otomatis hanya dalam dua lintasan (satu maju dan satu mundur). Algoritma ini mampu menghitung gradien kesalahan jaringan dengan memperhatikan setiap parameter model. Ia dapat mengetahui bagaimana setiap bobot koneksi dan bias harus disesuaikan untuk mengurangi kesalahan. Setelah memperoleh gradien yang diinginkan, proses dilanjutkan dengan gradient descent biasa dan seluruh proses diulang sampai jaringan menyatu dengan solusi.

 

Propagasi Balik

Algoritma propagasi balik memungkinkan MLP untuk belajar membuat prediksi menjadi semakin baik dengan suatu teknik yang disebut chain rule. Algoritma ini bekerja dengan cara berikut [4].

  • Algoritma ini menangani satu kelompok kecil dalam satu waktu dan melewati keseluruhan set training beberapa kali. Tiap satu lintasan set training kita menyebutnya dengan istilah satu epoch.

  • Selanjutnya algoritma menghitung output semua neuron dalam satu layer. Hasilnya diteruskan ke layer berikutnya, dihitung lagi outputnya, dan diteruskan lagi ke layer berikutnya. Demikian seterusnya sampai kita mendapatkan output dari layer terakhir, layer output. Proses ini disebut forward pass, mirip seperti teknik membuat prediksi. Bedanya adalah seluruh hasil pada tahapan menengah disimpan untuk proses backward pass (umpan mundur).

  • Keluaran hasil prediksi kemudian diukur tingkat erornya menggunakan loss function dengan cara membandingkan output yang diinginkan dan output dari jaringan. 

  • Algoritma kemudian melewati setiap lapisan secara terbalik atau mundur hingga mencapai layer input untuk mengukur kontribusi kesalahan dari setiap kesalahan. Proses ini dilakukan secara analitis dengan menerapkan aturan rantai atau chain rule yang membuat langkah ini cepat dan tepat. 

  • Terakhir, algoritma melakukan langkah penurunan gradien untuk mengubah dan  menyesuaikan bobot koneksi di jaringan. Proses ini bertujuan untuk meminimalisir eror.

Sebuah contoh sederhana dari propagasi balik adalah pada permainan Angry Birds. Kita dapat memenangkan permainan dengan memilih lintasan terbaik untuk mengenai target.

ODcTa9C9FoalglbnsExgzL_EbMOkGSryznETitrhcsSSfvlRYxKjwrSRFRYUBi5lEpZV7G0nfELFJe_8c6iYLXafbxRXzsuNPXORX9oB8Oiy4e4uWfz9BmIdBGVROzZdrDQfNKEQ

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 di mana 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-tautan berikut yah: tautan 1 dan tautan 2.

 

Klasifikasi dengan MLP

Setelah kita memahami perceptron, multi layer perceptron, dan propagasi balik, kita dapat melihat bagaimana MLP bekerja. MLP adalah model machine learning kategori supervised sehingga MLP dapat dipakai dalam kasus klasifikasi dan regresi.

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.

2021012014101650c9366e692b19d143d171d636c6bbff.png

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.

dpU02smbcT2gQpFSH-QZTZbcNxWuMH-mkvLO5P7oYLr6xeLXDG025LmCLxaKijTZp6h6uMMwiL3qCAPTQnu7Ft7NbAgnKkyFBJa3gGx6OcSEKwowHT9NnY7FnfPrSU2YMfz0Egph

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

Convolutional neural networks (CNNs) pertama kali dikenalkan oleh Yann LeCun et all., pada tahun 1998 dalam makalahnya “Gradient-Based Learning Applied to Document Recognition” [22]. LeCun mengenalkan versi awal CNN yaitu LeNet (berasal dari nama LeCun) yang berhasil mengenali karakter tulisan tangan. Pada saat itu LeNet hanya mampu bekerja dengan baik pada gambar dengan resolusi rendah.

Database yang digunakan dalam LeCun adalah MNIST database of handwritten digits, terdiri dari pasangan angka 0 hingga 9 dengan labelnya. Dataset MNIST dikenal luas hingga saat ini dan banyak digunakan terutama oleh para pemula untuk melatih model machine learning.

Sejak ditemukannya LeNet, para peneliti terus melakukan riset untuk mengembangkan model CNN. Hingga pada tahun 2012, Alex Krizhevsky memperkenalkan AlexNet [23], versi lebih canggih dari CNN yang memenangkan perlombaan terkenal ImageNet. AlexNet ini adalah cikal bakal deep learning, salah satu cabang AI yang menggunakan multi-layer neural networks.

Selain deep learning, salah satu bidang menarik yang muncul dari perkembangan machine learning adalah computer vision. Computer Vision adalah bidang yang memberi komputer kemampuan untuk ‘melihat’ seperti manusia.

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

qi9c7whINaYDBhTReS4ZTnSAtOeBjp3VcD3XuF_yCfyVd6FzpoHRF2_y_4WTvTkQe5ks1MiyyxLEITg8925QT8p1FIk2WnmQq-xAfvItD8B0HKLUSid-DFciLW-fo9jVwMtXnkSJ

 

Bagaimana Komputer Melihat

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

rizfJ31GoE9CCKlx0MD1KFLteFW6exlF69A6YqTX_E1aSSXl8QDwlAlqpr-pW6mkmPTti1eKJbTY6QlhcEpDi_y8qv6ezZP13493_J-9jFcplBcOgOEeUckS1VtCLw5SBzsqfJ9F

 

Klasifikasi Gambar

Salah satu peran machine learning dalam computer vision adalah pada klasifikasi gambar. Contohnya, kita punya label yaitu nama beberapa presiden Amerika Serikat. Kita ingin memprediksi siapa presiden di gambar. Jaringan saraf seperti di bawah menunjukkan probabilitas siapa presiden di dalam foto.

opimzm9xRjlE7OvVvVOVBBcFk9DFy_2qLE18zmmtYY_iBSPTM46joY9xGpGSI09zcchhJ0DkFwx379we6Vr5zjVpoHdmFwGjRZNjbYu-mvgeLJcMkBeeeBSFNm-SzvD6SepvK-YF

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.

AeDiWJk2rUU2GZzAo8eZMhQKb2lGHWviXwFrf0ckckRAqNwO27sn1eOjREyo0CubpP3uYnz3a708rDNflcu3c6mp9JKcCBruP-eo7577PGyGu2htljFnYzP4uzVyEMWZMFqslGRC

Setiap objek dari gambar memiliki atribut unik. Seperti pada gambar di atas, objek orang memiliki atribut unik berupa hidung, mata, dan mulut. Pada objek mobil terdapat atribut roda, lampu, dan plat nomor, sedangkan objek rumah memiliki atribut pintu, jendela, dan tangga.

 

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 berfungsi untuk mengenali atribut-atribut unik pada sebuah objek.  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.

6xbwWtqDHNNdNysh4d_C3pkfJlKlHBy2ysqbWlGB5g49LvIe1_WeetBnxVZdca1_aXDGqBZTgiwEGUuxlKReCY6-sZnjEQJVuBnuj5niDgKCVJjvmNqa4HWQL7depQb1e4r_R3ik

 

Filter

Convolutional layer dapat mengenali atribut pada objek menggunakan filter. Filter hanyalah sebuah matriks yang berisi angka-angka. Pada gambar di bawah terdapat 3 buah 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.

r0g6lfdDX3Ampe4p9pO4ugY9HIjiMTVwX6VO6UwR06cgdTq4cF4uIyA7fUz3r_vhIfHg4rH-72vkgO1amvJrdN0z86patxd9OJVQR5WNuVHv0F3y7aM2g0ch4EM9c3hxE5uitCGC

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.

YfjVAMjeoINAkjDvif5667zAeBOcbS15oL5I_wn2Y9_RMw7sIcSr4z3LcSjza8XHUO22pTbWV63AdMTdVZ5gYw3-o-1HmX5MPuZ7gm_HtKQvFnrNf5tSvqL-TfUK-XPUWp4Dm1Pc

 

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.

Ls68A5L7pim9juer-pOpVKLdjgx9OUDyMRANi_L_YYKQ-ApkIQR94WG0Lue80ZeNmpqzYdxCE19zbfS7KC0xHli3D-k3CiHNPufN_UbIYnxuC7q9blBnRLJj9PvcHUlDvZ1chOKF

LuUlZsYRviKLl69CymdN8fd51RUT-4e0AaFyO8Yfcn15lV32A2ot1vHgbeESGp2Kgv1vOpoItthkygOjyTOxvh3z5nWTPd96z0oGdbffvlwIM-vU6N940m2148SSfHnz0TWG-9-P

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.

yomwcQahSG5PL2eFnBWkbj07P0wOYVF-r-Eh_TC41v0LSpIHUAmXrPvAIDYv7uK-3QTMb6FNwqNlP_lPsRH4nfsNpBwsc-QCYvvke5hDHvNSYVX-FUwllx2Et8QKNlez_NjABWT8

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.

VkXlxw5LBIedeym8qc3W31nvCUuAih00XDXX34s_asH_APlyKeFjSI9EdSoBEe0g-kWqbDrRBg9qREOfggQBtLEAc8yHwdIOfmK7_Xm-eHjrZDbSJ8R-RsiTYqbu7o-Td5BqA1rC

Proses max pooling dipakai karena pada praktiknya, jumlah filter yang digunakan pada proses konvolusi berjumlah banyak. Ketika kita menggunakan 64 filter pada konvolusi maka akan menghasilkan 64 gambar baru. Max pooling membantu mengurangi ukuran dari setiap gambar dari proses konvolusi.

 

Arsitektur Convolutional Neural Network

Arsitektur CNN adalah sebuah jaringan saraf yang menggunakan sebuah layar konvolusi dan max pooling. Pada arsitektur CNN di bawah, sebuah gambar masukan dideteksi atribut/fitur nya dengan menggunakan konvolusi 3 filter. Lalu setelah proses konvolusi akan dilakukan max pooling yang menghasilkan 3 buah gambar hasil konvolusi yang memiliki resolusi lebih kecil. Terakhir, hasil max pooling dapat dimasukkan ke dalam sebuah hidden layer MLP.

1CjZizogbIO6MyF9G5taJTJzrei16WC0Gy5hw69O4xUz_yihq0KpzFmfBfRNl4HKv9JrNLgq4ynbn9uMVkh9TnDONDkpklBe5qwkB1HlciJdV25xLX3dt1-_IRDofAJZ1OPiwW-g


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.

zcl742abAlEz494zUHwz7MBrTD-iaPoCPP5UTnFp9yTA2n8vhR_JcUrqcu8Nea1Rmr-WRP_CCCRGBdS-zNgK2dh3RpeMybRpUHv3IkTZoR6yA5-WV7o3rO_qFPT8E0FW-11wQ-rT

Dengan beberapa lapis proses konvolusi, makin detail fitur yang dapat dikenali dari gambar. Contohnya pada proses konvolusi pertama dapat mendeteksi wajah dari seorang manusia. Lalu pada proses konvolusi kedua, wajah hasil konvolusi pertama dapat dideteksi fitur yang lebih detail seperti hidung, mata, dan telinganya sehingga, model makin pintar membedakan wajah setiap orang. Jika Anda ingin mengetahui lebih detail mengenai CNN, Anda dapat mengunjungi tautan berikut yah.

Selamat! Sekarang Anda paham cara kerja CNN dan fungsinya dalam deteksi gambar. Di modul berikutnya kita akan praktik mengembangkan sebuah model CNN dengan TensorFlow.

TensorFlow 

TensorFlow(TF) adalah end-to-end open source platform yang dikembangkan oleh Google Brain dan sangat populer untuk pengembangan machine learning berskala besar. Ia memiliki ekosistem tools, library, dan sumber daya komunitas yang komprehensif dan fleksibel, yang memungkinkan para peneliti dan pengembang membangun dan menerapkan (deploy) aplikasi machine learning dengan mudah.

Pada awalnya TensorFlow digunakan untuk menjalankan komputasi numerik kompleks pada riset AI dan machine learning di internal Google. Dalam perkembangannya kemudian, TensorFlow menjadi tools efektif dan powerful untuk menyelesaikan permasalahan deep learning di kalangan  masyarakat luas. 

Jeff Hale, seorang pegiat data science melakukan riset pada akhir tahun 2018 tentang Deep Learning Framework Power Scores [1]. Riset tersebut menggunakan 11 sumber data pada 7 kategori yang berbeda untuk mengukur penggunaan dan popularitas framework dan ketertarikan pengguna. Hale menghitung dan melakukan visualisasi data risetnya pada platform kaggle, kemudian mempublikasikan hasil risetnya di medium. Dari riset tersebut, TensorFlow menempati urutan pertama seperti ditunjukkan pada gambar berikut.

2021041609383927e174a211c642bf437b1405ac70efe4.jpeg

Tensorflow dirilis pertama kali pada akhir tahun 2015 [2]. Versi stabil TensorFlow mulai dapat digunakan pada tahun 2017, sementara versi 2.x dirilis untuk publik pada bulan September 2019 lalu. Saat ini, TensorFlow digunakan secara luas pada berbagai produk keluaran Google yang kita gunakan sehari-hari, antara lain, Google Cloud Speech, Google Photos, Gmail, dan Google Search. Untuk melihat video singkat dari tim Google Brain tentang TensorFlow saat pertama kali diluncurkan, silakan buka tautan berikut.

 

Bagaimana TensorFlow Bekerja

Tim Google Brain dalam makalahnya yang berjudul “Tensorflow: A System for Large Scale Machine Learning”  menjelaskan bahwa pada TensorFlow, data dimodelkan sebagai tensor (array berdimensi-n) dengan elemen yang memiliki salah satu dari tipe data int32, float32, atau string. Secara alami, tensor mewakili masukan untuk operasi matematika dalam berbagai algoritma machine learning. Sebagai contoh, perkalian matriks membutuhkan dua buah tensor 2-D dan akan menghasilkan tensor 2-D juga. 

TensorFlow menggunakan grafik aliran data untuk mewakili seluruh proses komputasi dan state dalam algoritma machine learning, termasuk operasi matematika. Parameter, pembaruan aturan (update rules), dan masukan preprocessing. Grafik aliran data merepresentasikan komunikasi antara sub komputasi secara eksplisit sehingga mudah untuk menjalankan penghitungan independen secara paralel. Berikut adalah skema aliran data TensorFlow untuk pipeline pelatihan berisi subgraf untuk membaca data masukan, preprocessing, training, dan checkpointing [2].

2021041609383823c2d6b3f6f553e39fffcff74726b92a.jpeg

Secara sederhana, cara kerja TensorFlow dapat kita gambarkan sebagai berikut. Pertama kita tentukan sebuah komputasi graf untuk diselesaikan seperti gambar di bawah. Variabel x, y, dan angka 2 pada kotak berwarna jingga adalah input atau masukan, sedangkan operasi dilambangkan dalam lingkaran berwarna biru. Selanjutnya TensorFlow akan mengeksekusinya secara efisien dengan kode C++ yang teroptimasi. Hasilnya, operasi matematis gambar di bawah memberikan output berupa sebuah persamaan kuadrat.

202104160938380ab8aeb723350605cd6afc0381983c8f.jpeg

TensorFlow mampu membagi grafik 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. 

 

Keunggulan TensorFlow

TensorFlow menggunakan Python sebagai front-end API-nya sehingga mudah dan nyaman digunakan, bahkan oleh pemula sekalipun. Perlu dicatat bahwa TensorFlow ditulis dan dieksekusi dengan bahasa C++ yang berkinerja tinggi. Beberapa keunggulan TensorFlow antara lain.

  • Bisa dijalankan di hampir semua platform: GPU, CPU, dan TPU (TensorFlow Processing Units) yang secara khusus dimanfaatkan untuk mengerjakan matematika tensor. 

  • Memberikan performa terbaik dengan kemampuan melakukan iterasi dan melatih model secara cepat sehingga mampu menjalankan lebih banyak eksperimen.

  • Skalabilitas komputasi yang tinggi pada kumpulan data yang sangat besar.

  • Pembuatan model yang mudah dengan beberapa level abstraksi sesuai kebutuhan.

  • Menyediakan jalur langsung ke produksi, baik itu pada server, perangkat mobile atau web sehingga memudahkan kita melakukan pipeline machine learning hingga ke level produksi.

Banyak sekali ya, keunggulan TensorFlow?

Betul, salah satu keunggulan yang sangat memudahkan dalam membangun proyek machine learning adalah TensorFlow mampu mengerjakan pipeline ML dari level training hingga ke level produksi. Wow! 

Ekosistem TensorFlow 2.x dari training hingga produksi beserta framework yang digunakan untuk setiap prosesnya dapat kita pelajari pada gambar berikut [3].

20210416093839b2f5741e10429c741a378562c4001728.jpeg

Sampai sini jelas ya? 

TensorFlow menyediakan semua tools dan library yang kita butuhkan untuk proyek machine learning dari tahap training model hingga tahap produksi. Itulah alasan mengapa TensorFlow disebut sebagai end-to-end platform untuk machine learning. Untuk mempelajari lebih lanjut tentang TensorFlow Anda dapat membuka tautan berikut. Pelajari juga tutorial dan panduan menggunakan TensorFlow pada tautan ini ini dan tautan berikut.

Pada modul selanjutnya 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.

20201224170738ab2415a173666f09befd53df4668a753.png

Dengan Keras, kita dapat membuat sebuah model ML hanya dengan beberapa baris kode seperti di bawah.

202012241710462020a62c6cea32ea2f186fb28d9d2063.png

Mari kita bahas kode di atas satu per satu. Hal yang paling pertama adalah kita perlu mempersiapkan data kemudian membaginya menjadi data latih dan data uji. Data fashion MNIST bisa kita dapatkan dengan mudah dari library datasets yang disediakan Keras.

202012241711118545727f26e114ab79b272c99989c993.png

Dalam klasifikasi gambar, setiap piksel pada gambar memiliki nilai dari 0 sampai 255. Kita perlu melakukan normalisasi dengan membagi setiap pixel pada gambar dengan 255. Dengan nilai yang telah dinormalisasi, jaringan saraf dapat belajar dengan lebih baik.

20201224171129eedfe9a85ae363c1f274281e6261dac7.png

Pada langkah berikutnya kita mendefinisikan arsitektur dari jaringan saraf yang akan kita latih.

20201224171145741d3950ef47f1d4dfb859100f2d5cf7.png

Sama dengan yang kita pelajari pada modul sebelumnya, guna membuat sebuah MLP kita hanya perlu mendefinisikan sebuah input layer, hidden layer dan sebuah output layer. Untuk membuat sebuah model MLP di Keras kita bisa memanggil fungsi tf.keras.models.Sequential([...]) dan menampungnya pada sebuah variabel. Model sequential pada keras adalah tumpukan layer-layer, yang sama seperti pada sebuah MLP.

Berikut kita mendefinisikan 3 layer utama pada model sequential:

  • Input layer : Adalah layer yang memiliki parameter ‘input_shape’. Input_shape sendiri adalah resolusi dari gambar-gambar pada data latih. Dalam hal ini sebuah gambar MNIST memiliki resolusi 28x28 pixel. Sehingga input shape-nya adalah (28, 28). Sebuah layer Flatten pada Keras akan berfungsi untuk meratakan input. Meratakan di sini artinya mengubah 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, bahwa  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 : Ia 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 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.

202012241712424387fb2c541ca2cb810f22dc4bcb53e7.png

Setelah membuat arsitektur MLP dan menentukan optimizer serta loss functionnya, kita dapat melatih model kita pada data training. Parameter epoch merupakan jumlah berapa kali sebuah model melakukan propagasi balik.

20201224171302fb885dccf2135bc4a73565b82dc541e5.png

Begitulah bagaimana kita membuat sebuah jaringan saraf dengan Keras. Sangat mudah, bukan?

Pada submodul-submodul selanjutnya kita akan belajar menggunakan data yang sedikit lebih kompleks dari Kaggle.

Latihan Membuat Model Klasifikasi Gambar

Kode program yang akan diajarkan di sini bisa diunduh di tautan berikut ini. Untuk membukanya upload berkasnya ke Google Colab.


Tujuan

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. Setelah kita memahami masalah, kemudian kita dapat mengembangkan sebuah MLP sebagai sebuah solusi.

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?


Tahapan Latihan

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.

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

20200430204545d7406b6b0c0a9070a7bc26ddf43ad0cb.png

Tahapan latihan kali ini adalah:

  1. Memastikan tensorflow yang digunakan di Watson Studio dan Google Colab adalah versi di atas 2.0.
  2. Unduh dataset dan extract file dengan metode unzip.
  3.  Menampung direktori setiap kelas pada direktori train dan validasi ke dalam variabel.
  4. Pre-processing data dengan image augmentation.
  5. Mempersiapkan data latih yang akan dipelajari oleh model.
  6. Membangun arsitektur model dengan CNN.
  7. Compile dan latih model dengan model.compile dan model.fit hingga mendapatkan akurasi yang diinginkan.
  8. Prediksi gambar ruangan bersih dan ruangan rapi untuk mengetes model.


Codelab

Hal pertama yang perlu kita lakukan, memastikan bahwa versi TensorFlow yang Anda gunakan adalah versi 2 ke atas.

  1. import tensorflow as tf
  2. print(tf.__version__)

20201016170141725afe44290e55b1f4e53a8551d68398.png

Pada Watson Studio, default tensorflow yang ter-install adalah versi 1.13.1 sehingga Anda perlu meng-update tensorflow pada notebook Anda dengan versi di atas 2. Langkah-langkah untuk update tensorflow di Watson Studio adalah sebagai berikut.

Pertama, masukkan code untuk update tensorflow.

  1. #Install pip package di kernel Jupyter notebook saat ini
  2.  
  3. import sys
  4. !{sys.executable} -m pip install tensorflow==2.3.0 #versi tensorflow yang diinginkan bisa disesuaikan di baris ini

Biarkan proses download berjalan sampai muncul notifikasi "sucessfully installed ...".

20201016143613e87cc5d5822b4bec9ebb1b1d55510d2b.jpeg

Langkah selanjutnya, restart kernel notebook Anda di Watson Studio dengan cara arahkan kursor ke menu Kernel, klik, lalu pilih Restart, sebagai berikut.

20201016143613bfbe0b3fa542b69d7cf80ec1ca7e20ef.jpeg

Jalankan kembali code berikut untuk mengecek apakah tensorflow di notebook Watson Studio Anda berhasil di-update. 

  1. print(tf.__version__)

Jika berhasil, code di atas akan memberikan keluaran sebagai berikut.

20201016143612cac633573a9f49cd56efbbab44e1f59c.jpeg

Selamat! tensorflow Anda telah berhasil di-update ke versi 2.3.

Selanjutnya adalah mempersiapkan datanya.

Di Watson Studio, Anda perlu meng-upload berkas datanya terlebih dahulu ke Files. Unduh datanya di tautan berikut ini : messy-vs-clean-room.

Jika sudah maka upload berkas datanya dengan menggunakan Find and add data.
202010050109239ff7f7f60d923a413b14703055643145.png
Buatlah cell baru, dan masukkan credentials dari berkas dengan memilih Insert to Code -> Credentials.
2020100501120465a3b0cd5121982067630e15006c72f4.png
Maka akan secara otomatis informasi credentials-nya masuk ke dalam cell.
20201005011344dfd07e5ca9374a192da412fe5ff82fa3.pngCatatan : Credentials yang muncul di notebook pasti akan berbeda dengan gambar di atas. Bisa diperhatikan di sini disensor menggunakan simbol XXXXXXX.

Langkah selanjutnya adalah men-download berkas tersebut agar bisa dipakai di dalam notebook. Tambahkan kode berikut ini, dan sesuaikan dengan credentials yang ada (sesuaikan dengan credentials di notebook Anda).
  1. import ibm_boto3
  2. from ibm_botocore.client import Config
  3.  
  4. cos = ibm_boto3.client(service_name='s3',
  5.                          ibm_api_key_id=credentials_1['IBM_API_KEY_ID'],
  6.                          ibm_service_instance_id=credentials_1['IAM_SERVICE_ID'],
  7.                          ibm_auth_endpoint="https://iam.bluemix.net/oidc/token",
  8.                          config=Config(signature_version='oauth'),
  9.                          endpoint_url=credentials_1['ENDPOINT'])
Kemudian, jalankan kode download-nya. Jika Anda melakukan rename pada berkas sebelummya maka sesuaikanlah namanya pada Key dan Filename:
  1. cos.download_file(Bucket=credentials_1['BUCKET'],Key='messy-vs-clean-room.zip',Filename="messy_vs_clean_room.zip")

Pastikan datanya sudah terunduh ke dalam notebook dengan memanggil kode os.listdirseperti berikut ini:
  1. import os
  2.  
  3. os.listdir()
2020100500134680fd3d492121aafc96d6330d96043e17.png

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

  1. # melakukan ekstraksi pada file zip
  2. import zipfile
  3. local_zip = 'messy_vs_clean_room.zip'
  4. zip_ref = zipfile.ZipFile(local_zip, 'r')
  5. zip_ref.extractall()
  6. zip_ref.close()
  7.  
  8. base_dir = 'images'
  9. train_dir = os.path.join(base_dir, 'train')
  10. validation_dir = os.path.join(base_dir, 'val')

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

  1. os.listdir('images/train')
  1. os.listdir('images/val')
2020100500205938a10da050a004ed26752e871088ef2a.png

Hal selanjutnya adalah kita menampung direktori dari setiap kelas pada direktori latih dan direktori validasi ke dalam variabel. Pembuatan direktori di sini akan dipakai saat menggunakan objek image data generator.

  1. # membuat direktori ruangan rapi pada direktori data training
  2. train_clean_dir = os.path.join(train_dir, 'clean')
  3.  
  4. # membuat direktori ruangan berantakan pada direktori data training
  5. train_messy_dir = os.path.join(train_dir, 'messy')
  6.  
  7. # membuat direktori ruangan rapi pada direktori data validasi
  8. validation_clean_dir = os.path.join(validation_dir, 'clean')
  9.  
  10. # membuat direktori ruangan berantakan pada direktori data validasi
  11. validation_messy_dir = os.path.join(validation_dir, 'messy')

Langkah selanjutnya adalah kita membuat sebuah objek ImageDataGenerator untuk data training dan data testing. Image data generator adalah sebuah fungsi yang sangat berguna untuk mempersiapkan data latih dan data testing yang akan diberikan ke model. Beberapa kemudahan yang disediakan Image data generator adalah, preprocessing datapelabelan sampel otomatis, dan augmentasi gambar.

Kode di bawah menunjukkan proses augmentasi gambar pada setiap sampel di dataset. Augmentasi gambar adalah teknik untuk menciptakan data-data baru dari data yang telah ada. Contoh augmentasi gambar adalah horizontal flip di mana gambar akan dibalikkan secara horizontal. Detail mengenai augmentasi gambar dengan image data generator dapat Anda temui di tautan berikut.

  1. from tensorflow.keras.preprocessing.image import ImageDataGenerator
  2.  
  3. train_datagen = ImageDataGenerator(
  4.                     rescale=1./255,
  5.                     rotation_range=20,
  6.                     horizontal_flip=True,
  7.                     shear_range = 0.2,
  8.                     fill_mode = 'nearest')
  9.  
  10. test_datagen = ImageDataGenerator(
  11.                     rescale=1./255,
  12.                     rotation_range=20,
  13.                     horizontal_flip=True,
  14.                     shear_range = 0.2,
  15.                     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')

20200501013048b6157bc6304a3a5992ad3f597e29807b.pngSetelah 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. # compile model dengan 'adam' optimizer loss function 'binary_crossentropy'
  2. model.compile(loss='binary_crossentropy',
  3.               optimizer='Adam',
  4.               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. # latih model dengan model.fit
  2. model.fit(
  3.       train_generator,
  4.       steps_per_epoch=25,  # berapa batch yang akan dieksekusi pada setiap epoch
  5.       epochs=20, # tambahkan eposchs jika akurasi model belum optimal
  6.       validation_data=validation_generator, # menampilkan akurasi pengujian data validasi
  7.       validation_steps=5,  # berapa batch yang akan dieksekusi pada setiap epoch
  8.       verbose=2)

20200501013234d5757b1a1714ecabe7c2d392013ae39a.png

Selanjutnya Anda dapat langsung melihat hasil dari model yang telah Anda buat pada Notebook. 

Carilah gambar yang ingin dites menggunakan model baru. Jika sudah ketemu maka upload secara manual kembali menggunakan fitur Find and add data.
Setelah itu unduh kembali ke dalam notebook dengan menggunakan kode berikut ini:
  1. cos.download_file(Bucket=credentials_1['BUCKET'],Key='sample_room_image.jpg',Filename="sample_room_image.jpg")
Karena di awal kita sudah menambahkan credentials, maka tinggal Key dan Filename saja yang perlu disesuaikan. Bisa dilihat di sini nama file-nya adalah sample_room_image.jpg, silakan sesuaikan dengan nama file yang Anda pakai.

Kode di bawah memungkinkan kita untuk melakukan resize pada berkas gambar yang kita pilih dan mengubahnya menjadi larik numpy. Prediksi dari model kita:
  1. import numpy as np
  2. from keras.preprocessing import image
  3. import matplotlib.pyplot as plt
  4. import matplotlib.image as mpimg
  5. %matplotlib inline
  6.  
  7. # change it to your filename
  8. fn = 'sample_room_image.jpg'
  9.  
  10. # predicting images
  11. path = fn
  12. img = image.load_img(path, target_size=(150,150))
  13. imgplot = plt.imshow(img)
  14. x = image.img_to_array(img)
  15. x = np.expand_dims(x, axis=0)
  16.  
  17. images = np.vstack([x])
  18. classes = model.predict(images, batch_size=10)
  19.   
  20. print(fn)
  21. if classes==0:
  22.   print('clean')
  23. else:
  24.   print('messy')







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

20200430204624cfa50482fd05a15f50f51cba8ee865d2.png


Deployment dan Feedback

Kali ini kita akan membahas deployment dan feedback di dalam machine learning. Let's go.


Deployment

Kita telah belajar bagaimana mengembangkan dan melatih sebuah model pada IBM Watson Studio atau di 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.

Proyek machine learning umumnya terdiri dari tiga fase berbeda, yaitu training, saving model, dan deployment. Pada tahap pertama, kita melakukan proses pelatihan atau training model dengan data yang kita miliki. Selain itu, kita juga menguji model dengan data uji dan melatihnya kembali sampai kita merasa puas dengan performanya. Kita telah belajar tentang tahapan ini di modul-modul sebelumnya.

Tahap selanjutnya, kita menyimpan model menjadi file yang bisa digunakan di server produksi. Tahap terakhir, kita menerapkan model yang telah disimpan tadi ke server produksi dan siap membuat prediksi pada data baru. Tahap terakhir ini disebut penerapan model pada tahap produksi atau deployment.

Kita bisa melakukan proses deployment pada tiga platform yaitu.

  1. Mobile dan IoT (internet of things).
    Di sini kita menjalankan proses deployment dengan menggunakan tf.lite (TensorFlow lite) pada perangkat mobile dan embedded device seperti Android, iOS, Edge TPU, dan Raspberry Pi. Pelajari caranya di sini.

  2. Cloud menggunakan TensorFlow serving.
    Service ini memudahkan penerapan algoritma dan eksperimen yang baru, sekaligus mempertahankan arsitektur server dan API yang sama. Jika Anda tertarik untuk mempelajarinya lebih lanjut, silakan buka tautan ini dan tutorial berikut.

  3. Browser dan Node.js dengan menggunakan TensorFlow.js.
    TensorFlow.js merupakan library untuk machine learning pada JavaScript. Dengan library ini kita bisa membangun model ML dengan javascript, sekaligus menggunakannya langsung pada browser atau Node.js. Buka tautan berikut untuk mempelajari caranya.

Jika Anda tertarik untuk belajar lebih dalam dan berlatih deploy model machine learning, lanjutkan proses belajar Anda hingga kelas Belajar Pengembangan Machine Learning ya karena detailnya teruraikan di sana. Pada kelas ini kita akan berlatih mengembangkan model hingga ke tahap produksi.

Menarik, kan? Tetap semangat belajarnya, yah!


Feedback

Konsep feedback telah menjadi komponen penting dalam pemodelan sistem secara umum dan khususnya dalam siklus pengembangan perangkat lunak. Feedback loops adalah proses di mana perubahan atau output dari salah satu bagian sistem dikirimkan kembali ke dalam sistem sebagai input sehingga mempengaruhi tindakan atau output sistem selanjutnya. Jay Wright Forrester, seorang computer engineer dan system scientist menyatakan bahwa interaksi struktur fisik, arus informasi, dan proses keputusan menciptakan jaringan feedback loop yang menghasilkan dinamika sistem [24].

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 tergolong kredibel. Hal seperti inilah yang menunjukkan kenapa memonitor dan mengumpulkan feedback sangat penting setelah sebuah model diterapkan di tahap produksi.

Saat dijalankan dengan benar, feedback loops dapat membantu kita membuat model menjadi lebih baik (feedback positif). Tetapi, feedback loops juga bisa berujung pada konsekuensi negatif yang tidak diinginkan seperti bias, atau pengukuran performa model yang tidak akurat (feedback negatif).

Berikut adalah contoh kasus feedback positif dan negatif.

  1. Feedback Positif
    Pada tahun 2017 Netflix mengubah sistem rating-nya dari penilaian berbasis bintang (star rating) menjadi sistem yang lebih sederhana: thumbs up dan thumbs down. Hal ini dilakukan berdasarkan feedback bahwa star rating dianggap kurang merepresentasikan pengalaman pengguna dalam menonton film di Netflix. Perubahan menjadi thumbs rating yang lebih mudah dan sederhana ini mendorong lebih banyak pengguna untuk memberikan rating sehingga akan berpengaruh pada akurasi sistem rekomendasi.
  1. Feedback negatif
    Anda sedang membuat model machine learning untuk mengidentifikasi area berisiko tinggi yang memerlukan lebih banyak pengawasan oleh pihak kepolisian. Model Anda menemukan fakta bahwa daerah A memiliki banyak tindakan kejahatan selama 3 bulan terakhir. Dari hasil ini kemudian diputuskan untuk menambahkan lebih banyak polisi di daerah ini. Dengan ekstra personil, penangkapan tersangka tindak kejahatan juga semakin bertambah. Hal ini memvalidasi prediksi model bahwa daerah ini memiliki level kriminalitas yang di atas rata-rata. Kemudian anggota keamanan pun diterjunkan di daerah ini. Demikian seterusnya dan siklusnya terus berlanjut.
    Kasus ini adalah contoh bias pada model machine learning. Saat data dikirim kembali ke sistem, prediksi bahwa daerah A memiliki tingkat kejahatan tinggi (sehingga membutuhkan lebih banyak polisi) menjadi semakin kuat. Feedback ini menciptakan bias yang membuat hasil kumulatifnya bisa menyebabkan masalah di kemudian hari. Oleh karena itu, sebelum mengambil keputusan, kita perlu memahami alasan mengapa dan bagaimana pola tersebut ada.

Sampai di sini Anda telah mendalami feedback pada model machine learning. Anda juga telah paham mengapa kita perlu mengumpulkan feedback untuk terus memonitor performa model. Jangan lupa mengecek ulang apakah feedback tersebut termasuk feedback positif (yang bisa memperkuat model) atau negatif (menghasilkan bias) sebelum kita memasukkannya ke dalam model.

Memang tidak mungkin untuk sama sekali menghilangkan bias pada model machine learning. Kita perlu menilai dan mengidentifikasi potensi masalah yang terjadi pada sistem agar bisa mengatasi atau menghindarinya sedini mungkin. Perhatikan pola feedback dan berhati-hatilah dalam mengambil keputusan.

Adjustment and Re-learning

Umumnya sebuah model yang di-deploy kinerjanya akan turun seiring waktu. Kenapa?

Karena model akan terus menemui lebih banyak 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. Di mana data-data baru yang ditemui di tahap produksi akan digabung dengan data lama. Lebih lanjut, model dilatih ulang dari awal sekali menggunakan data lama dan data baru.

Bayangkan ketika kita harus melatih ulang model dalam jangka waktu mingguan atau bahkan harian. Sesuai yang Anda bayangkan, proses ini akan sangat memakan waktu.

Namun, manual retraining juga memungkinan kita menemukan model-model baru atau atribut-atribut baru yang menghasilkan performa lebih baik.

 

Continuous Learning

Teknik kedua untuk menjaga model kita up-to-date adalah continuous learning yang menggunakan sistem terotomasi dalam pelatihan ulang model. Alur dari continuous learning yaitu:

  1. Menyimpan data-data baru yang ditemui pada tahap produksi. Contohnya ketika sistem mendapatkan harga emas naik, data harga tersebut akan disimpan di database.
  2. Ketika data-data baru yang dikumpulkan cukup, lakukan pengujian akurasi dari model terhadap data baru.
  3. Jika akurasi model menurun seiring waktu, gunakan data baru, atau kombinasi data lama dan data baru untuk melatih dan men-deploy ulang model.

Sesuai namanya, 3 proses di atas dapat terotomasi sehingga kita tidak perlu melakukannya secara manual.

Latihan Membuat Model di Watson Studio


Tujuan

Pada latihan kali ini kita akan mencoba mengembangkan model ML tanpa menulis kode sama sekali di IBM Watson Studio. Silakan ikuti instruksi di bawah.


Tahapan latihan

Buka halaman project Anda seperti di bawah. Jika Anda belum membuat project sebelumnya pada Watson Studio, ikuti instruksi pada modul Data Processing.

2020092813284110cab74ff95a47864a24f77e32a4b4d1.jpeg

Agar dapat mengembangkan Machine Learning pada proyek kita, pertama pilih tab settings.

20200928132841ff282df7d6906869b1987e41806f8a3e.jpeg

Pada tab setting, scroll ke bawah sampai ke bagan Associated service. Klik Add service, dan pilih Watson.

20200928132842dfe057f02c562d1d44d9759394df15c3.jpeg

Halaman Associate service akan terbuka. Jika telah ada service sebelumnya dengan type Machine Learning, Anda tinggal berikan tanda centang. Namun jika belum, Anda dapat klik tombol New service kemudian pilih service Machine learning dan lengkapi informasi yang dibutuhkan.

20200928132842b31298664a35bf05acb2439af64e5bba.jpeg

Beri tanda centang pada service yang telah ada lalu klik tombol Associate service.

20200928132842ce7ade0e2a9709132fcefb4ca283ffe8.jpeg

Jika berhasil akan ada pemberitahuan seperti pada gambar di bawah. Kemudian antarmuka Associate service dengan klik tombol silang di kanan atas.20200928132843bd47cb50746b2d23a7c034b79b410722.jpeg

Hore! Pada tahap ini kita sudah mulai bisa untuk mengembangkan ML dengan IBM Watson Studios. Apa yang paling kita butuhkan untuk mengembangkan ML? Yup, kita membutuhkan data. 

Kita akan menggunakan dataset iklan di sosial media untuk memprediksi apakah seseorang akan membeli setelah melihat iklan sebuah produk. Untuk dataset yang akan kita pakai dapat Anda unduh pada tautan berikut. 

Setelah dataset Anda unduh, buka tab Assets pada project Anda dan klik tombol Find and Add data yang ada pada kotak berwarna merah. Selanjutnya unggah dataset Anda dengan drag and drop atau pilih berkas langsung dari penyimpanan lokal Anda.202009281328427dcf4632b2938b945dac8788879aae3e.jpeg

Jika dataset Anda berhasil diunduh, ia akan tampil di bagian Data assets.

202009281328439d9cb22c246789704982876f76ac7b36.jpeg

Untuk melihat data yang baru kita unggah, kita cukup klik nama dataset yang ada pada bagian Data Assets.

2020092813284474d9c99f031d589764fd9d6f072a5f2e.jpeg

Untuk menampilkan statistik interaktif dari data kita, kita bisa menuju ke tab profile. Pada tab profile pilih ‘Create Profile’. Proses pembuatan profile akan memakan beberapa waktu. Sabar menunggu hingga prosesnya selesai ya.

2020092813284430f7666b037b6d71dddfea5cd524b4d2.jpeg

Jika proses selesai, grafik interaktif serta statistik dari setiap kolom dapat kita lihat. Grafik batang menampilkan distribusi setiap objek dari setiap kolom. Rata-rata serta deviasi standar setiap kolom juga ditampilkan. Pada kolom Purchased yang merupakan label dapat dilihat bahwa distribusi kelasnya tidak seimbang. Jumlah kelas ‘0’ (tidak membeli) sekitar 2 kali lipat dari kelas ‘1’ (membeli). Kita akan melihat bagaimana performa model dari Watson Machine Learning dengan data yang tidak seimbang ini.

202009281328443b74ae313df35fe3adcf9826e485cea4.jpeg

Nah, selanjutnya apa tahapan yang perlu dilakukan setelah dataset tersedia? Yup kita perlu mengolah dataset terlebih dahulu sebelum data dapat diproses oleh model ML.

Untuk mengolah data pada IBM Watson Studio sangatlah mudah. Pertama, kembali ke tab preview lalu klik tombol Refine seperti yang ada pada gambar di bawah.

20200928132844e7a212e3e9d68701b48233781ea7b237.jpeg

Berikut adalah tampilan dari halaman refine data. Pada laman refine Anda dapat melakukan operasi-operasi pengolahan data seperti membersihkan data, mengubah tipe data, dan beberapa operasi lain. Untuk melihat operasi apa saja yang dapat dilakukan dengan refine, klik tombol Operation yang berwarna biru.

20200928132846cb90ea7d58238c03d7451e7fe9d2b5d0.jpeg

Untuk mengolah data, hilangkan kolom yang tidak relevan. Kolom User ID tidak memiliki pengaruh terhadap prediksi model sehingga kita perlu menghilangkan dataset tersebut. Caranya adalah dengan klik tombol 3 titik yang ada di kanan atas kolom User ID dan pilih ‘Remove’.

202009281328442975c8c8e050f72166909d731fd98f4d.jpeg

Ketika kolom User ID telah dihilangkan, akan muncul keterangannya di bagian Steps yang berada di sebelah kanan. Steps menunjukkan operasi apa saja yang telah kita lakukan pada dataset, memudahkan kita untuk melacak operasi-operasi yang telah kita lakukan. Dapat kita lihat bahwa ada 2 operasi pada bagian Steps yaitu operasi penghapusan kolom User ID dan operasi konversi tipe kolom. 

Operasi konversi tipe kolom ini mengubah tipe data dari setiap kolom agar lebih sesuai. Misalnya ada sebuah kolom ‘Gaji’ yang berisi gaji yang nilai-nilainya berupa angka, namun dalam format string. Kolom tersebut akan diubah menjadi tipe Integer secara otomatis.

2020092813284555afc1bdb6d286d469901a35d48bc3e5.jpeg

Sampai tahap ini, dataset kita sudah bisa untuk diproses oleh model. Simpan dataset ini dengan klik tombol jobs yang terdapat di dalam kotak berwarna merah, lalu pilih ‘Save and create a job’. Anda akan masuk ke halaman Create a job.

20200928132846fe5ff0171702b893430f9b5d979bd0dc.jpeg

Pada halaman Create a job isi kolom pada bagian define details lalu klik Next. Isilah nama job dan deskripsi sesuai keinginan Anda.

202009281328457c076f13553aebe39f38b054ab7d4106.jpeg

Pada bagian Configure Anda dapat langsung klik Next.

20200928132846760ea5008a1047eaab9f5870c60ded40.jpeg

Pada bagian selanjutnya biarkan Schedule off lalu klik Next.

2020092813284509f144033dbd29fb2e2700eb06c3a830.jpeg

Di bagian Review and create pilih ‘Create and run’ lalu tunggu sampai status Runs menjadi Completed.

20200928132846dd143ceaae9dcae978906af8eb22dabf.jpeg

Kembali ke halaman proyek Anda dan buka tab Assets. Jika tahapan sebelumnya berhasil maka akan muncul data baru pada bagian Data Assets. Data yang baru adalah data yang telah proses sebelumnya. Jika Anda klik data terbaru maka dapat Anda lihat bahwa data tersebut tidak memiliki kolom User ID.
20200928132846e885b35ec18d0fefbd66aec84ab8843f.jpeg

Sekarang kita dapat mulai melatih model ML kita. Dengan IBM Watson Studio, kita dapat tidak perlu menulis kode sama sekali untuk mengembangkan ML. Penasaran kan bagaimana caranya? Mari kita coba sama-sama.

Untuk membuat model ML pada Watson Studio kita dapat menggunakan fitur AutoAI. Fitur AutoAI secara otomatis memilih, menyeleksi, serta mencari sendiri parameter model yang paling optimal.

Untuk menggunakan fitur AutoAI, buka tab Assets pada halaman proyek kita dan klik tombol Add to Project yang berwarna biru.

20200928132846371310b8c8c05a7df254580d8f80bb56.jpeg

Lalu pilih AutoAI experiment

202009281328472238499bda1043b0a4e38582c1ff0831.jpeg

Di bagian New AutoAI experiment isi kolom yang ada. Untuk kolom Watson Machine Learning Service Instance pilih WatsonMachineLearning. Lalu klik Create.

2020092813284716672cb4f04727bf9878d734a74d6435.jpeg

Kemudian Anda akan diminta untuk menambahkan dataset yang akan diproses oleh model Anda. Pilih Select from project.

20200928132847ca7834ee791565cafd7416c8c4030b23.jpeg

Lalu pilih dataset yang telah diproses yaitu dataset yang tidak memiliki kolom UserID. Klik select asset.

20200928132847c7fc890ef315ff2aed21685f2516d0e6.jpeg

Pada bagian Configure details pilih kolom yang merupakan target, atau kolom yang berisi label pada dataset kita yaitu kolom Purchased. AutoAI cukup cerdas untuk mengetahui bahwa dataset kita merupakan dataset untuk klasifikasi biner. Klik tombol Run Experiment.

20200928132847d5c8ef69f0b98d6f782edb1b93c4b313.jpeg

Proses AutoAI akan berjalan selama beberapa waktu. Tunggu hingga selesai.

202009281328479d39836b96770533e1fc93be9b5ae12a.jpeg

Jika proses pelatihan model selesai, tampilannya akan menjadi seperti di bawah.

20200928132848d6079f848e71e8cd3fcf42f1d515718b.jpeg

Jika Anda scroll ke bawah, Anda dapat melihat bahwa AutoAI telah melakukan 7 kali pelatihan 2 buah model berbeda yaitu XGBClassifier dan Extra Tree Classifier. Dari mana model ini didapat? Tidak perlu khawatir. Watson Studio dengan cerdas memilih model-model terbaik yang sesuai dengan dataset yang kita masukkan. Hasilnya pun sangat memuaskan dengan akurasi di kisaran 0.89 sampai 0.92.

202009281328481c362de2607231908a91b3b6215b4b41.jpeg

Masih ingat dengan latihan kita pada modul Latihan SKLearn Logistic Regression? Di modul tersebut kita menulis kode untuk membuat model ML dengan dataset yang sama dengan latihan kali ini. Pada latihan tersebut akurasi yang kita dapat sekitar 0.63. Sedangkan dengan menggunakan IBM Watson Studio, tanpa menulis kode satu baris pun kita mendapatkan model dengan akurasi yang jauh lebih tinggi. Keren bukan.

Namun perlu diperhatikan bahwa model yang dihasilkan oleh IBM Watson Studio tidak selalu mengungguli model yang ditulis manual. IBM Watson Studio lebih tepat digunakan untuk menguji apakah sebuah proyek ML layak dikembangkan atau tidak. Salah satu implementasinya adalah menguji apakah sebuah dataset memiliki kualitas yang baik dan dapat dipakai. Seperti pada latihan kali ini, dataset yang kita pakai dapat menghasilkan model dengan akurasi 0.89 ke atas. Maka kita mendapat gambaran bahwa dataset ini layak dipakai dan model ML layak dikembangkan. Selanjutnya kita dapat mulai mengembangkan model ML dengan menulis kode manual yang memiliki fleksibilitas dan kompleksitas lebih baik, khususnya jika proyek ML yang kita kembangkan adalah proyek besar.


Proyek Akhir : Klasifikasi Gambar

Selamat, Anda telah berada di akhir pembelajaran dalam akademi ini. Anda sudah mempelajari dasar-dasar machine learning dan bagaimana jaringan saraf bekerja. Untuk bisa lulus dari akademi ini, Anda harus mengirimkan submission berupa program jaringan saraf tiruan menggunakan TensorFlow. Program Anda harus mampu mengenali bentuk tangan yang membentuk gunting, batu, atau kertas.


Kriteria Submission

Berikut kriteria submission yang harus Anda penuhi:

  • Dataset yang dipakai haruslah dataset berikut : rockpaperscissors, atau gunakan link ini pada wget command: https://dicodingacademy.blob.core.windows.net/picodiploma/ml_pemula_academy/rockpaperscissors.zip
  • Dataset harus dibagi menjadi train set dan validation set.
  • Ukuran validation set harus 40% dari total dataset (data training memiliki 1314 sampel, dan data validasi sebanyak 874 sampel).
  • Harus mengimplementasikan augmentasi gambar.
  • Menggunakan image data generator.
  • Model harus menggunakan model sequential.
  • Pelatihan model tidak melebihi waktu 30 menit.
  • Program dikerjakan pada Google Colaboratory.
  • Akurasi dari model minimal 85%.
  • Dapat memprediksi gambar yang diunggah ke Colab seperti gambar di bawah.
    202004302318257ec23b834046174a7d426680e488905e.png
  • Manambahkan data diri (sesuai profil Dicoding) pada submission/project yang dikirimkan.


Saran Submission

Submission Anda akan dinilai oleh reviewer dengan penilaian bintang berskala 1-5 berdasarkan dari parameter yang ada.

Anda dapat menerapkan beberapa saran untuk mendapatkan nilai tinggi, berikut sarannya:

  • Akurasi dari model di atas 85%
  • Anda menggunakan lebih dari 1 hidden layer.
  • Menerapkan lebih banyak augmentasi gambar.
  • Anda menggunakan optimizer dan loss-function yang tidak diajarkan di kelas.

Detail penilaian submission:

  • Bintang 1 : Semua ketentuan terpenuhi, namun terindikasi melakukan plagiat.
  • Bintang 2 : Semua ketentuan terpenuhi, namun penulisan kode masih perlu diperbaiki.
  • Bintang 3 : Semua ketentuan terpenuhi namun hanya mengikuti seperti apa yang ada pada modul.
  • Bintang 4 : Semua ketentuan terpenuhi dan akurasi dari program di atas 95%.
  • Bintang 5 : Semua ketentuan terpenuhi, akurasi di atas 96%, dan menggunakan tiga atau lebih teknik yang tidak diajarkan di modul seperti penggunaan Callback.

Jika submission Anda ditolak maka tidak ada penilaian. Kriteria penilaian bintang di atas hanya berlaku jika submission Anda lulus.


Submission yang Tidak Sesuai Kriteria

Jika submission Anda tidak sesuai dengan kriteria, maka akan ditolak oleh reviewer, berikut poin-poinnya:

  • Akurasi dari model Anda di bawah 85%.
  • Proses pelatihan model Anda memakan waktu lebih dari 30 menit.
  • Tidak menambahkan data diri (sesuai profil Dicoding) pada submission/project yang dikirimkan.


Resources dan Tips

Berikut Tips yang dapat Anda terapkan untuk mempermudah Anda menyelesaikan submission:

  • Model merupakan klasifikasi multi kelas sehingga loss function yang digunakan bukan binary_crossentropy.
  • Pastikan Anda membagi direktori untuk image data generator sesuai dengan jumlah label.
  • Untuk export project yang Anda kerjakan di Colaboratory sebagai berkas .ipynb, klik tombol file yang berada di pojok kiri atas Colaboratory dan pilih download .ipynb.
    20200501002401b773f40df397fb5aed15666f519e0e49.png


Forum Diskusi

Jika mengalami kesulitan, Anda bisa menanyakan langsung ke forum diskusi. https://www.dicoding.com/academies/184/discussions

Beberapa diskusi berikut ini dapat digunakan untuk membantu submission Anda: 


Ketentuan Berkas Submission

Beberapa poin yang perlu diperhatikan ketika mengirimkan berkas submission:

  • Menggunakan bahasa pemrograman Python.
  • Dataset menggunakan data yang disediakan di resource.
  • Mengirimkan pekerjaan Anda dalam bentuk berkas .ipynb.
  • Program yang Anda kirim pastikan adalah berkas .ipynb yang sudah dieksekusi/dijalankan. Sederhananya, jalankan semua cell pada submission Anda. Ketika seluruh output telah keluar, baru simpan program anda dalam format .ipynb.


Ketentuan Proses Review

Beberapa hal yang perlu Anda ketahui mengenai proses review:

  • Tim penilai akan mengulas submission Anda dalam waktu selambatnya 3 (tiga) hari kerja, tidak termasuk hari sabtu, minggu dan libur nasional.
  • Tidak disarankan untuk melakukan submit berkali-kali karena akan memperlama proses penilaian yang dilakukan tim penilai.
  • Anda akan mendapat notifikasi hasil pengumpulan submission Anda via email, atau Anda dapat mengecek status submission pada akun Dicoding Anda.

Perhatian!

No Plagiarism

Sesuai dengan terms of use di Dicoding, submission kelas Dicoding Academy haruslah hasil karya Anda sendiri.

Kode yang didapatkan dari sumber lain (website, buku, forum, GitHub, dan lain-lain) hanya digunakan sebagai referensi. Tingkat kesamaannya tidak boleh lebih dari 70%.

Kami memiliki hak mutlak untuk mengenakan sanksi kepada peserta plagiat yang melanggar ketentuan di atas. Sanksi tersebut berupa penangguhan akun Dicoding. Artinya Anda tidak dapat melakukan submission apapun di kelas Dicoding Academy selama masa penangguhan. Progress belajar peserta kelas Dicoding Academy pun, otomatis kami reset ke 0 (nol), tanpa terkecuali.

Ref : [1]