RSS

Pengalaman kuliah di swedia

Pada post kali ini, saya hendak membagi sedikit pengalaman saya dan hal-hal menarik yang saya temui setelah kurang lebih selama 7 bulan atau 28 purnama melanjutkan kuliah tingkat Master untuk program Machine Learning di KTH Royal Institute of Technology di Stockholm, Swedia.

Latar belakang

Semua itu bermula dan diawali dengan saya mendaftarkan diri kuliah di universitas di Swedia pada awal Januari 2013. Pendaftaran dilakukan di satu tempat terpadu, yaitu university admission (https://www.universityadmissions.se/intl/start) dengan membayar biaya pendaftaran sekitar 900 SEK. Untuk biaya kuliah dan biaya hidup, saya mendaftar ke beasiswa Swedish Institute (http://studyinsweden.se/scholarship/swedish-institute-study-scholarships/)

universityadmission

si scholarship

Setelah pengumuman penerimaan universitas lewat website, datanglah paket, kotak merah, dari KTH yang isinya kurang lebih kalendar, buku petunjuk mahasiswa baru, dan flash disk berisi video profil KTH.

kotakmerahkth.

Seminggu setelah pengumuman universitas, keluarlah pengumuman untuk beasiswa, dan Alhamdulillah nama saya keluar sebagai salah satu penerima dari Indonesia, bersama 14 teman saya lainnya.

Berangkatlah saya ke Swedia pada tanggal 15 Agustus 2013, di penghujung, akhir musim panas.

Tujuhbelasan

Karena saya berangkat sebelum tanggal 17 Agustus, maka saya merasakan tujuhbelasan di negeri orang. Melihat bendera merah putih berkibar di negeri orang adalah pengalaman yang cukup berkesan.

merahputih

Di kota Vienna ternyata ada bendera merah putih juga yang berkibar. Namun, ternyata itu adalah bendera kota Vienna itu sendiri.

benderavienna

Perkuliahan

kthdaridepan

Beban kuliah saya adalah 120 ECTS (European Credit Transfer and Accumulation System). Jika dibagi kedalam 2 tahun, maka saya harus menyelesaikan 60 credit untuk tahun pertama, 30 credit untuk semester 3, dan 30 credit sisanya untuk thesis.

Kuliah di dalam setahun dibagi menjadi 2 semester. Masing-masing semester dibagi lagi menjadi 2 period dimana masing-masing period kurang lebih berjalan selama 2 bulan. Dalam 1 period normalnya mengambil 2 mata kuliah yang masing-masing bebannya 7.5 credit walaupun hal ini bergantung dari mata kuliah dan program masing-masing.

Hal menarik lainnya adalah ujian akhir bisa berlangsung hingga 5 jam. Tak jarang mahasiswa membawa botol air minum dan makanan ringan agar bisa bertahan duduk mengerjakan soal selama itu. Selain itu ujian biasanya bisa diulang, dengan jarak sekitar 1 bulan setelah ujian sebelumnya berakhir, istilahnya reexam (walaupun saya belum pernah coba).

Yang menarik lagi, sistem perkuliahan di KTH menganut academic quarter, atau kuliah dimulai 15 menit dari waktu yang ditetapkan. Dan setiap satu jam sekali akan ada istirahat sekitar 15 menit. Hal ini sangat membantu apalagi kalau jadwal kuliahnya panjang langsung 4 jam. Bisa teler kalau tidak ada istirahat.

Perpustakaan

Setelah mendaftar ke kantor pajak Swedia (skatteverket) dan memiliki personnummer, maka kita bisa mendaftar dan meminjam buku dari perpustakaan Stockholm. Buku dapat dipinjam dari perpus manapun dan juga dapat dikembalikan ke perpus mana saja yang kita mau. Perpustakaan di Stockholm sendiri jumlahnya banyak, hampir tiap kommun memiliki perpus tersendiri. Namun yang terbesar tentunya adalah Perpus publik Stockholm atau Stockholm Stadsbiblioteket.

perpus

Kartu

Orang Swedia suka kartu. Total saya punya 13 kartu baru sejak datang ke Swedia.

kartu

Transportasi

Transportasi di Stockholm sangat bagus, dimana jumlah angkutan yang tersedia banyak dan memiliki jadwal yang tepat. Rute transportasi juga menjangkau hingga daerah-daerah terjarang di Stockholm. Namun kualitas yang bagus itu harus dibayar dengan harga tiket yang tidak murah. Satu kali naik sarana transportasi untuk zona yang sama harganya sekitar 36 SEK dan harga tiket bulanan untuk pelajar adalah 560 SEK atau hampir 1 juta rupiah.

kereta

Masjid

Ada masjid di Stockholm yang terletak di daerah Medborgarplatsen. Bisa dijangkau dengan menggunakan tunnelbana jalur hijau berhenti di Medborgarplatsen atau menggunakan bis nomor 59 arah Norra Hammarbyhamen. Khutbah jum’at biasanya menggunakan bahasa Arab, yang kemudian diterjemahkan ke bahasa Swedia.

masjid

Pos

Disini Swedia tidak ada lagi kantor pos. Sebagai gantinya, tersedialah banyak kotak surat di semua penghujung kota dimana masyarakat tinggal memasukkan surat kedalamnya yang kemudian akan diambil dan diantarkan oleh petugas setiap waktu tertentu. Perangko sendiri bisa dibeli di toko minimarket seperti Seven-Eleven dan pressbyran atau supermarket seperti ICA dan Co-op.

kotakpos

Stockholm

Kota Stockholm sendiri adalah kota yang sangat indah dan nyaman untuk dihuni. Berikut sedikit cuplikan kondisi Stockholm dari berbagai waktu dan tempat.

halloween

lampuwinter

3seasons

collage stockholm

Internet

Internetnya juga cukup kencang disini.

speedtest

Yak, demikian yang bisa saya utarakan pada post kali ini. Post berikutnya akan kembali membahas mengenai Machine Learning dan kerabatnya (kalau saya enggak malas). Untuk penutup, tinggal di luar negeri tidaklah mudah namun sangat layak untuk diperjuangkan. Hal yang diperoleh tidak hanya dalam bentuk ilmu yang didapat di kelas saja namun juga dari pengalaman bagaimana ketika kita berhadapan dan merasakan semua hal yang sebelumnya belum pernah ditemui. Hal ini bisa dalam bentuk pergaulan dengan orang-orang yang lebih beragam lagi latar belakangnya dibanding yang ditemui dari tempat asal namun juga kondisi geografis dan lingkungan yang bisa sangat berbeda dan membuat takjub walau padahal sebenarnya kita masih tinggal di planet yang sama.

Salam.

 
1 Comment

Posted by on April 8, 2014 in Other

 

Tags: , , , ,

Essay discovery of computer

Pada post kali ini, saya akan membagi tulisan saya dalam essay 4 halaman yang berjudul discovery of computer. Tulisan ini membahas sedikit mengenai perjalanan bagaimana komputer dahulu pertama dikonsepsikan hingga bisa direalisasikan menjadi sekarang. Tentunya tulisan ini bukan sejarah komprehensif melainkan ingin memberikan sedikit sudut pandang dengan kaitannya terhadap bagaimana science berperan dalam perkembangannya.

Salam,

essay_thumb

 
Leave a comment

Posted by on March 4, 2014 in Writing

 

Tags: ,

Menghitung jumlah kata di abstrak

Oke, venue publikasi tempat Anda akan mengirimkan paper conference atau jurnal Anda mengisyaratkan batasan maksimal kata untuk abstrak, misalnya 200 kata. Jadi, apa yang harus dilakukan untuk menghitung jumlah kata di abstrak yang sudah Anda tulis, misalkan di Latex jika Anda tidak memiliki Microsoft Word?

Untungnya, ada utilitas wordcount dari commandline Linux untuk mengerjakan fungsi tersebut

wc -w

Misalkan abstrak sudah ditulis di file dengan nama abstrak.txt maka jumlah kata bisa dihitung dengan

cat abstrak.txt | wc -w

atau

wc -w abstrak.txt

Contoh, misalkan kita punya abstrak yang isinya kurang lebih begini

Intrauterine growth restriction (IUGR) is one of many fetal abnormalities which has high contribution on maternal mortality rate and perinatal mortality rate in Indonesia. The impact of IUGR can be reduced if only the symptoms are detected earlier and the correct treatment is applied. However, fetal growth detection and monitoring process in Indonesia is obstructed as the number of physicians is very limited and USG tools are expensive. Prototype of fetal growth telehealth system was initiated to answer some of this problem. This system consists of mobile component which is developed using Android operating system and server component which is developed using Django. The main feature of this system is automatic fetal head parameter detection and its ability to operate in the limited internet access environment. Experiment result shows that the implemented system with Randomized Hough Transform (RHT) achieve delta ellipse average of 79.564, delta Head Circumference (HC) average of 1.29 cm, and delta Biparietal Diameter (BPD) average of 0.25 cm.

Maka jumlah kata yang dihitung adalah
jumlahkata

Salam. Semoga berguna.

 
Leave a comment

Posted by on February 13, 2014 in paper

 

Tags: ,

Gibbs Sampling

Pada post ini, saya akan menjelaskan mengenai implementasi algoritma Gibbs sampling untuk mendeteksi pola pada deret DNA atau populer dengan istilah motif finding seperti yang dijabarkan oleh Lawrence di paper-nya pada tahun 1993 Detecting Subtle Sequence Signals: A Gibbs Sampling Strategy for Multiple Alignment.

Sekilas mengenai Gibbs sampling. Gibbs sampling adalah salah satu algoritma keluarga dari Markov Chain Monte Carlo (MCMC). Kurang lebih intinya adalah kita bisa menghitung joint probability distribution dengan cara melakukan sampling satu per satu terhadap setiap variabel dengan berdasarkan nilai variabel lainnya alias full conditional probability. Materi pengenalan Gibbs sampling yang lebih lanjut bisa dipelajari di sini dan di sini.

Motif itu sendiri adalah pola yang terdapat pada beberapa deret DNA yang memiliki tingkat kemiripan yang tinggi. Contohnya bisa dilihat pada gambar di bawah. Seperti yang bisa dilihat, terdapat kemunculan pola dengan bentuk CAGGAT pada 3 deret dengan lokasi yang berbeda-beda. Motif finding bertujuan menemukan pola tersebut berdasarkan data semua deret string yang dimiliki. Karakter yang muncul selain pada motif biasa disebut background.

motif

Nah, bagaimana caranya kita bisa menggunakan Gibbs sampling untuk melakukan deteksi motif? Ada 2 asumsi sebelum kita memulai memakan Gibbs sampling. Pertama, pada satu deret DNA hanya ada 1 buah pola dan kedua, kita mengetahui berapa panjang dari pola tersebut. Kita akan implementasi Gibbs sampling dengan menggunakan bahasa pemrograman Python.

Pertama, kita inisialisasi state posisi secara acak

pos = [randint(0, len(seq)-w+1) for seq in sequences]

Kemudian kita lakukan iterasi sampai posisi yang kita cari konvergen. Kita lakukan iterasi terhadap semua deret satu per satu. Sebutlah deret yang aktif pada iterasi ini sebagai i.

    last_pos = None
    while last_pos != pos:
        last_pos = pos[:]
        
        # We pick the sequence, well, in sequence starting from index 0
        for i in xrange(K):

Kemudian dari semua deret yang kita punya, selain deret yang sedang aktif dalam iterasi, kita hitung model probabilitas motif dan background. Model untuk background cukup dihitung dengan menghitung berapa kali karakter suatu karakter muncul. Sedangkan untuk model motif, kita harus menghitung berapa kali sebuah karakter muncul pada posisi ke j pada motif tersebut.

 seq_minus = sequences[:]; del seq_minus[i]
 pos_minus = pos[:]; del pos_minus[i]
 q, p = compute_model(seq_minus, pos_minus, alphabet, w)
...
def compute_model(sequences, pos, alphabet, w):
    """
    This method compute the probability model of background and word based on data in 
    the sequences.
    """
    q = {x:[1]*w for x in alphabet}
    p = {x: 1 for x in alphabet}
    
    # Count the number of character occurrence in the particular position of word
    for i in xrange(len(sequences)):
        start_pos = pos[i]        
        for j in xrange(w):
            c = sequences[i][start_pos+j]
            q[c][j] += 1
    # Normalize the count
    for c in alphabet:
        for j in xrange(w):
            q[c][j] = q[c][j] / float( len(sequences)+len(alphabet) )
    
    # Count the number of character occurrence in background position
    # which mean everywhere except in the word position
    for i in xrange(len(sequences)):
        for j in xrange(len(sequences[i])):
            if j < pos[i] or j > pos[i]+w:
                c = sequences[i][j]
                p[c] += 1
    # Normalize the count
    total = sum(p.values())
    for c in alphabet:
        p[c] = p[c] / float(total)
    
    return q, p

Setelah mendapatkan model untuk motif dan background, kita coba hitung probabilitas untuk semua posisi motif yang mungkin pada deret i dengan cara mengalikannya dengan dua model yang sudah dihitung sebelumnya. Semua karakter dimulai dari posisi awal hingga panjang motif dikalikan dengan nilai probabilitas kemunculan karakter tersebut pada posisi yang bersangkutan.

N = len(sequences[i])
qx = [1]*(N-w+1)
px = [1]*(N-w+1)
for j in xrange(N-w+1):
    for k in xrange(w):
        c = sequences[i][j+k]
        qx[j] = qx[j] * q[c][k]
        px[j] = px[j] * p[c]

Setelah itu, kita bisa menghitung rasio antara motif dan background untuk setiap kemungkinan posisi motif pada deret tersebut. Rasio yang paling besar menandakan bahwa posisi tersebut adalah posisi yang paling mungkin sebagai awal dari motif.

Aj = [x/y for (x,y) in zip(qx, px)]
norm_c = sum(Aj)
Aj = map(lambda x: x/norm_c, Aj)

Kita lakukan sampling posisi baru berdasarkan distribusi rasio. Rasio yang lebih besar tentunya memiliki peluang untuk terpilih lebih besar. Hal ini dilakukan untuk memberikan randomness dan menghindari local maxima (walaupun mungkin kurang berhasil).

pos[i] = sample(range(N-w+1), Aj)
...
def sample(alphabet, dist):
    """ This method produce a new discrete sample list by alphabet with probability
    distribution given by dist.
    The length of alphabet and dist must be same."""
    sampl = None
    cum_dist = np.cumsum(dist)
    r = rand()
    for i in xrange(len(dist)):
        if r < cum_dist[i]:
            sampl = alphabet[i]
            break
    
    return sampl

Hal ini diulang untuk semua deret, dan dilakukan hingga tidak ada lagi perubahan posisi untuk motif.

Kode lengkapnya bisa dilihat di https://github.com/mitbal/gibbs-sampler-motif-finding pada file gibbs.py

Sekarang untuk tes algoritma kita buat satu file python baru dan masukkan kode berikut

seqs = ['muhammadiqbal', 'iqbaltawakal', 'miqbalt']
k = 5

new_pos = gibbs.sampling(seqs, k)

words = [seqs[i][new_pos[i]:new_pos[i]+k] for i in xrange(len(seqs))]
print words

Jika sukses, seharusnya program di atas mengeluarkan output seperti berikut

['iqbal', 'iqbal', 'iqbal']

Namun terkadang Gibbs sampling bisa terjebak di local maxima karena inisialisasi posisi awal yang kurang baik atau pemilihan sampling posisi baru yang kurang beruntung.

['uhamm', 'iqbal', 'iqbal']

Untuk mengurangi risiko tersebut, kita bisa menjalankan gibbs sampling beberapa kali dan menghitung berapa kali output yang dihasilkan keluar. Dengan memilih output yang paling sering keluar kita bisa meningkatkan akurasi dari Gibbs sampling. Istilahnya adalah multiple chains.

result = {}
for i in xrange(20):
    new_pos = gibbs.sampling(seqs, k)
    #print new_pos
    tnp = tuple(new_pos)    
    if tnp in result:
        result[tnp] += 1
    else:
        result[tnp] = 1

max_vote = 0
max_pos = None
for key in result:
    #print key, result[key]
    if result[key] > max_vote:
        max_pos = list(key)
        max_vote = result[key]

words = [seqs[i][max_pos[i]:max_pos[i]+k] for i in xrange(len(seqs))]
print words

Selain cara diatas, module gibbs bisa dipanggil langsung dari command line. Pertama masukkan data mengenai deret dalam sebuah file dengan format baris pertama adalah panjang motif, dan kemudian setiap barisnya adalah satu deret. Contoh file “test.txt”

3
thequickdog
browndog
dogwood

Kemudian panggil program dari terminal dengan cara

 cat test.txt | python gibbs.py

atau

 python gibbs.py test.txt

Output-nya adalah posisi motif untuk setiap deret dalam bentuk list.

Semoga berguna. Salam.

 
Leave a comment

Posted by on January 27, 2014 in Machine Learning, Programming, Python

 

Tags: , , , ,

[ML] Apa itu Machine Learning

Bermula dari pembicaraan dengan teman-teman saya beberapa waktu yang lalu, motivasi dari post ini adalah untuk memberikan penjelasan mengenai apa itu Machine Learning.

Machine Learning — dialihbahasakan bebas menjadi pembelajaran mesin, atau disingkat menjadi ML — adalah ilmu cabang dari kecerdasan buatan yang mempelajari bagaimana caranya belajar dari data. Istilah Machine Learning sendiri cukup membingungkan atau misleading karena hampir tidak berhubungan dengan mesin apapun (kecuali diimplementasikan di robot). Mesin disini merujuk kepada algoritma atau program yang berjalan di komputer. Istilah lain yang biasa dipakai adalah Data Mining, Pattern Recognition, atau Knowledge Discovery.

Contoh aplikasinya bermacam-macam, sebagai contoh:

1. Bidang kedokteran: bagaimana mendeteksi penyakit seseorang dari gejala-gejala yang ada, atau deteksi apakah seseorang mengidap penyakit jantung dari rekaman elektrokardiogram, dan mencari tahu gen yang terlibat pada penyakit kanker.

2. Bidang computer vision: menemukan dan memberi label muka orang pada foto (seperti di facebook) atau face recognition, pengenalan tulisan tangan menjadi teks pada komputer atau handwriting recognition.

3. Bidang teks atau information retrieval: menerjemahkan bahasa menggunakan mesin atau machine translation, mengubah suara menjadi teks atau speech recognition, atau memisahkan email antara yang spam dan yang non-spam.

Untuk bisa lebih mengenal mengenai maka kita harus tahu terlebih dahulu bahasa atau istilah-istilah yang sering dipakai dalam bidang tersebut.

Untuk bisa mengaplikasikan teknik-teknik machine learning maka hal yang pertama harus ada adalah data. Tanpa data maka algoritma machine learning tidak dapat bekerja. Data yang dimiliki biasanya dibagi menjadi 2, yaitu data training dan data testing. Data training digunakan untuk melatih algoritma, sedangkan data testing dipakai untuk mengetahui performa algoritma yang sudah dilatih sebelumnya ketika menemukan data baru yang belum pernah dilihat sebelumnya. Ini biasanya disebut dengan generalisasi. Hasil dari pelatihan tersebut bisa disebut dengan model.

Dari model tersebut kita bisa melakukan prediksi yang biasanya dibedakan menjadi dua tergantung tipe keluarannya. Jika hasil prediksinya bersifat diskrit, maka proses itu disebut klasifikasi. Contohnya klasifikasi. Jika keluarannya bersifat kontinyu, maka itu disebut dengan regresi. Contohnya prediksi cuaca besok berdasarkan data cuaca 3 bulan terakhir. Performa dari sebuah algoritma machine learning itu sendiri bisa dihitung dari akurasi  atau seberapa banyak prediksi yang dibuat yang sesuai dengan kenyataan.

Skema machine learning secara garis besar

Skema machine learning secara garis besar

Lebih lanjut lagi, algoritma pembelajaran machine learning bisa dibagi menjadi 2, supervised learning dan unsupervised learning. Pada supervised learning, data yang dimiliki dilengkapi dengan label/kelas yang menunjukkan kepada kelompok mana data tersebut seharusnya berada. Misalkan untuk kasus deteksi spam, maka kita harus tahu apakah email ini termasuk spam atau tidak. Pada kasus unsupervised learning, data yang kita miliki tidak memiliki label sehingga yang ingin kita ketahui adalah terdiri dari berapa kelompok kira-kira data yang kita punya berdasarkan kemiripannya. Algoritma yang dipakai disini biasanya adalah algoritma clustering.

Pada post berikutnya saya akan membahas algoritma-algoritma populer yang sering dipakai dalam Machine Learning.

Salam,

 
Leave a comment

Posted by on January 18, 2014 in Machine Learning

 

Tags: , , ,

Koneksi SSH ke Virtual Machine

Misalkan kita sudah membuat sebuah virtual machine di komputer/laptop kita dengan VirtualBox dan kita ingin melakukan koneksi dengan protokol SSH ke VM tersebut maka langkah-langkah yang diperlukan adalah:
1. Masuk ke menu Setting > Network, lalu aktifkan network adapter pada tab Adapter 2 dan pilih Attached to Host-only adapter
setting adapter
2. Nyalakan kembali VM. Setelah login buka dan edit file berikut /etc/network/interfaces dengan editor favorit Anda.

sudo vim /etc/network/interfaces

3. Tambahkan dua baris berikut di akhir file, silakan ganti address dengan address apapun yang Anda mau, asalkan masih 192.168

auto eth1
iface eth1 inet static
        address 192.168.56.10
        netmask 255.255.255.0

setting interfaces
4. Kemudian jalankan kode berikut

sudo ifup eth1

5. Instal openssh-server jika belum

sudo apt-get install openssh-server

Sekarang seharusnya dari komputer host, koneksi SSH ke VM dapat dilakukan dengan perintah

ssh mitbal@192.168.56.10

Jika komputer host menggunakan Windows, silakan gunakan putty atau instal cygwin dan pilih package openssh-server ketika instalasi.

Selamat mencoba, salam.

 
Leave a comment

Posted by on October 31, 2013 in Programming

 

Tags: ,

Memanggil Java dari Cygwin

untuk memanggil Java dari Cygwin, kita harus menambahkan alamat direktori Java ke environment variable PATH di cygwin.

Contoh jika Java di instal di direktori “C:\Program Files\Java\jdk1.7.0_25\bin” maka dari terminal cygwin ketikkan instruksi berikut:

export PATH=$PATH:/cygdrive/C/Program\ Files/Java/jdk1.7.0_25/bin/

Setelah itu kompilasi program Java dapat dilakukan seperti biasa.
Semoga berguna, salam.

 
Leave a comment

Posted by on October 21, 2013 in Programming

 

Tags: ,

 
Follow

Get every new post delivered to your Inbox.