Belajar Machine Learning via StackExchange

Salah satu yang menantang menurut saya untuk belajar Artificial Intelligence/Machine Learning/Data Mining adalah untuk belajar saja, kadang kita perlu menuliskan sintaks kode yang lumayan panjang dan kompleks. Mulai dari merapikan data, preprocessing, feature extraction, sampai proses utamanya sendiri. Kadang hal ini yang bikin jadi down dulu sebelum memulai belajar, apalagi bagi kita yang kesulitan meluangkan banyak waktu untuk sekadar latihan.

Nah, salah satu solusi belajar yang saya temui cukup membantu saya adalah dengan aktif di ruang diskusi yang membahas Machine Learning di internet. Salah satu forum diskusi yang cukup baik menurut saya adalah forum-forum terbitan StackExchange, seperti Stackoverflow, CrossValidated, atau AIStackExchange. Bagi kita programmer, saya yakin nama-nama itu bukanlah nama yang asing. Walau bukan benar-benar “forum diskusi” (situs StackExchange adalah situs tanya jawab atau QA site) situs-situs tersebut cukup baik untuk digunakan sebagai sarana belajar.

Salah satu sisi positif yang saya rasakan dari aktif di StackExchange kita bisa belajar dengan memperdalam logika dan teori dengan waktu yang relatif lebih singkat, tanpa harus membuat kode yang cukup panjang.

Note: aktif di forum hanyalah salah satu alternatif bagi teman-teman yang kesulitan meluangkan waktu banyak tapi tetap ingin belajar. Namun, bagi teman-teman yang ingin serius mendalami bidang ini, saya tetap sangat menyarankan untuk meluangkan waktu khusus untuk belajar untuk menyelesaikan kasus-kasus dan coding dari scratch.

Belajar Machine Learning via StackExchange

Ada beberapa cara bagi yang ingin belajar machine learning via stackexchange. Bisa dengan cara membaca-baca pertanyaan yang telah dijawab, aktif bertanya, ataupun aktif menjawab.

Belajar dari Pertanyaan Orang Lain

Cobalah mencari pertanyaan yang setopik dengan materi yang ingin kalian perlajari. Telusuri satu persatu pertanyaan yang sudah pernah ditanyakan, siapa tahu kalian menemukan pertanyaan atau jawaban yang menarik yang sebenarnya cukup penting untuk ditanyakan tapi kita tidak pernah terpikirkan.

Seperti pertanyaan yang baru-baru ini saya temui: kenapa kita menggunakan istilah “Machine Learning”, bukan “Program Learning” atau Bisakah kita menggunakan Neural Network untuk mendeteksi suatu bilangan ituΒ  prima atau bukan.

Dengan melihat jawaban orang lain kita juga jadi bisa menambah wawasan dengan menemukan solusi solusi menarik bagaimana orang menyelesaikan masalahnya.

Berani Bertanya

Tidak ada salahnya untuk bertanya asal dengan cara yang baik. Ada dua cara untuk kita bertanya di StackExchange, yang pertama kita bisa membuat pertanyaan baru, dan yang kedua adalah bertanya untuk meminta kejelasan jawaban via kolom komentar (ini butuh reputasi).

Untuk membuat pertanyaan baru, pastikan terlebih dahulu pertanyaan itu belum pernah ditanyakan sebelumnya. Untuk lebih yakin, cobalah googling kembali pertanyaan itu, atau bahkan lakukan parafrase jika perlu. Selain itu, pastikan juga kalian sudah membaca aturan singkat di halaman tour yang selalu ada di situs StackExchange manapun.

Contohnya di StackOverflow kalian akan mengenal istilah MVCE (Minimum Veriviable Complete Example), yakni sebuah aturan bagaimana memberikan contoh program kita yang eror secara minimalis. Secara tidak langsung, kita akan belajar bagaimana menjelaskan eror pada program kita secara baik kepada orang lain.

Note: Ingat, jika ingin mendapat jawaban yang baik, maka bertanyalah dengan cara baik.

Mencoba Memberi Jawaban

Selalu ada ilmu yang bisa kita bagi! Cobalah cari pertanyaan-pertanyaan sederhana yang sekiranya bisa kita jawab. Dengan mencoba menjawab beberapa pertanyaan, kita akan belajar untuk memahami lebih dalam materi yang kita pelajari. Kalau ada orang bilang, dengan mengajar ilmu kita bertambah, maka benar saja, dengan mencoba menjawab pertanyaan-pertanyaan di sana kita akan semakin bertambah wawasannya. Kita akan belajar bagaimana menjelaskan dan memberi contoh yang menjawab pertanyaan pengguna lain.

Takut di-downvote πŸ™

Ketika memberi jawaban atau pertanyaan, tentunya kita akan mendapat beragam feedback entah dari pengguna lain atau dari si-penanya. Mulai dari komentar, flag, atau downvote. Jangan minder jika ada feedback negatif, toh, namanya juga belajar dan diskusi πŸ™‚ Manusia tidak ada yang sempurna untuk luput dari kesalahan dan juga tidak semua manusia baik dan ramah untuk berdiskusi. Gunakan hal tersebut sebagai pengalaman untuk menjawab di kemudian hari.

Saya juga masih beberapa kali dapat komentar pedas atau “flag” pada pertanyaan saya karena tidak sesuai topik, tetapi bukan berarti lalu saya akan menghakimi forum tersebut tidak ramah dan melepas kesempatan saya belajar di sana.

Mulai Belajar!

Banyak pengalaman dan ilmu yang saya peroleh dengan aktif di StackExchange. Saya ingat bagaimana StackExchange telah membantu saya tidak hanya menyelesaikan skripsi saya, tetapi juga memahami lebih dalam tools yang saya gunakan. Selain itu semenjak aktif di StackExchange, saya juga merasa banyak terlatih untuk berkomunikasi dengan bahasa inggris secara natural. Jadi, Jangan ragu untuk memulai πŸ˜‰ Semoga Bermanfaat!

Sumber gambar: Pexels

simple neural net

Neural Net in 4 lines! using Scikit-Learn MLPClassifier

See the code below:

from sklearn.neural_network import MLPClassifier

mlp = MLPClassifier(hidden_layer_sizes=(10),solver='sgd',
                      learning_rate_init=0.01,max_iter=500)

mlp.fit(X_train, y_train)

print mlp.score(X_test,y_test)

That’s right, those 4 lines code can create a Neural Net with one hidden layer! 😐

Scikit-learn just released stable version 0.18. One of the new features is `MLPClassifer` and you can see in the code above, it’s powerful enough to create a simple neural net program.

That code just a snippet of my Iris Classifier Program that you can see on Github. Of course, in practice, you still need to create loader, pre-process, pre-training, or other modules. But, if you see other python libraries like Keras, Lasagne, or Theano, I think this is the easiest way to create a simple neural net. I said “simple” because when you need to create more complex model that need more complex algorithm or many addons, I think it’ll become difficult to use `MLPClassifier`. But, for some simple project, I think I’ll choose this scikit tool πŸ™‚

Program Explanation

Line 1: you need to load `MLPClassifier`

Line 2: we create an object called ‘mlp’ which is a `MLPClassifier`. We set hidden_layer_size to (10) which means we add one hidden layer with 10 neurons. Then we set solver as ‘sgd’ because we will use Stochastic Gradient Descent as optimizer. Then we set learning_rate_init to 0.01, this is a learning rate value (be careful, don’t confuse with alpha parameter in MLPClassifer). Then the last, we set 500 as the maximum number of training iteration.

Line 3: Train the model

Line 4: Test the model

That’s it! and my first run I got more than 90% accuration in Iris Dataset πŸ™‚ try it!

And actually, you can create “Deeper” neural net with add more layers easily, just change `hidden_layer_sizes`. For example, `hidden_layer_sizes=(10,10,10)` will create 3 hidden layer with 10 neuron each.

source image: Flickr

documentation neural network

How Do I Learn Neural Network (and Deep Learning)

First, I am nobody in this topic, please don’t hesitate to give better suggestion. This is actually just a “documentation” about my experience when I work on my undergraduate thesis in 2015. Once again, please don’t hesitate to discuss and give better suggestion about this topic, or.. correct my English if I made some mistakes πŸ™‚

Background

Okay, before I tell you my story, I’ll tell you about my background when I started to learn neural network. I wrote this section only have one intention, to make you easy measure what you need, nothing else.

  1. I have familiarity with some of mathematical symbols, like how to read sigma symbol, derivative symbol and many others (but not every symbols).
  2. I have familiarity with basic math operation like derivative function, algebra, matrix and vector operation (but only “the basic”).
  3. I’ve never coded in python, but I’ve been using C++ around 2-3 years and I used to code  Matlab style programming language in some project before (and thanks, this knowledge is very helpful)
  4. I studied the Introduction of Artificial Intelligence at the fourth semester in college, but I won’t said I did it well πŸ™

After a month googling randomly, I started to make a list what should I learn, the order of the list below it’s just the best order in my opinion. In my experience I jumped many times over the topic because at that time, I didn’t know what I didn’t know πŸ™

If you want to learn about Deep Learning, lets begin with: What is Machine Learning?

Then start to learn about Neural Network

Let’s do some math, Backpropagation?

I suggest you to fully-understand this algorithm in order to give some intuitions to help you in model tuning or error handling when you start implement the neural network

  • Easy start : I watched again the neural network demistifyed, and slowly got the intuition how backpropagation work, I followed and tried the math step-by-step
  • Watch the 4th week on Coursera Introduction to Machine Learning
  • Try the example of how backpropagation works : https://mattmazur.com/2015/03/17/a-step-by-step-backpropagation-example/
  • Read carefully the second chapter from http://neuralnetworksanddeeplearning.com/
  • And if you start thinking they have different formula / calculation / interpretation, start to prove that you are wrong. I started to compare all the calculations to understand more

Python for machine learning?

So what is Deep Learning?

What is Convolutional Neural Network (I use CNN in my undergraduate thesis)?

Backpropagation in CNN?

I don’t know it is necessary or not, but I learned it. I think if you understand the basic of backpropagation it’s enough. But if you are curious how backpropgation through max pooling or convolution layer, it does not hurt to learn it.

And…great, It’s done, That’s all my references that I used when I did my undergraduate thesis, I hope it will be useful for someone :/ or at least for me in the future πŸ™‚