Friday, December 27, 2019
Membuka (terjemah) Quran di Terminal
Friday, December 13, 2019
Tes Signifkansi (Paired t-test) dengan LibreOffice Calc
Tes Signifikansi
Tes signifikansi digunakan untuk menilai apakah dua hal (benar-benar) berbeda. Menggunakan logika penalaran (logical reasoning), kita tidak bisa menilai dua hal secara subyektif. Misal, A dan B itu berbeda, karena tidak sama persis. Tidak demikian. Kita harus berbicara berdasarkan data. Nah bagaimana menunjukkan kalau A dan B itu berbeda dengan data? Tes signifikansi-lah salah satu caranya.Perlu dicatat, sebelum saya lanjutkan tulisan ini, banyak kritik atas penggunaan tes signifikansi. Salah satunya adalah tulisan ini. Sebagai solusinya, penulis artikel tersebut menyarankan penggunaan confidence level. Saya tidak akan membahas hal tersebut (meskipun saya setuju). Prinsip saya, mempelajari apa yang sedang digunakan (meski dianggap salah atau tidak layak), tetap bermanfaat sehingga kita tahu kekurangannya.
Paired t-test
Ada beberapa macam t-test: paired, two samples with equal variance, dan two samples with unequal variance. Kali ini saya akan membahas paired t-test, karena itu yang saya pakai. Pair t-test digunakan untuk mengecek dua proses (misal sebelum dan sesudah improvement), Asumsi yang dipakai adalah bahwa bahwa perbedaan rataannya 0. Paired t-test baik dipakai jika:- Proses/metode yang berbeda pada subyek yang sama
- Tidak ada data outlier
One-tail vs Two-tail dan p-value
Analisis One-tail vs Two-tail dilihat dari kurva distribusinya. Perhatikan gambar di bawah ini. Jika memakai two-tail (ini yang akan dipakai) kita memakai dua sisi-nya. Jika memakai satu-sisi maka hanya dipakai setengah sisinya. Memakai two-tail, dengan confidence level 95% maka significance leevel-nya adalah 5% atau 0.05. Inilah batas nilai p-value (asserting p-value=0.05). Jika nilai p-value di bawah nilai batas tersebut, maka null hypothesis kita tolak dan alternatif hypothesis kita terima (artinya: perbedaan yang kita dapatkan signifikan).Monday, December 02, 2019
Panduan Berpikir Kritis
Berpikir kritis, menurut definisi buku tersebut, adalah mengacu pada tiga dimensi seperti pada gambar di bawah ini. Ketiganya harus terpenuhi, dan untuk memenuhinya "menanyakan pertanyaan yang tepat" adalah kuncinya.
Manfaat Berpikir Kritis
Berpikir kritis bermanfaat untuk meningkatkan kemampuan menulis dan berbicara karena akan menuntun anda ketika:
- Bereaksi kritis atas tulisan, baik di buku, website, jurnal maupun makalah.
- Menilai kualitas dari sebuah pemaparan (kuliah, presentasi, dll)
- Membentuk argumen
- Membuat essai
- Berpartisipasi pada diskusi (kelas, dll)
Prinsip Berpikir Kritis
Prinsip yang dimaksudkan disini adalah nilai, standar acuan. Lebih lengkapnya:Values are unstated ideas that people see as worthwhile.Dari definisi diatas, maka prinsip-prinsip berpikir kritis adalah sebagai berikut:
They provide standards of conduct by which we measure the quality of human behavior.
- Merdeka. Pemikiran anda tidak dikekang oleh siapapun dan apapun.
- Keingintahuan. Untuk 'mendulang emas' dalam hidup, anda harus mendengar dan membaca.
- Legowo. Bisa menerima perbedaan dan mengakui jika tidak tahu.
- Respek. Menghormati (pendapat) orang lain.
The right questions: Pertanyaan yang tepat
Menanyakan pertanyaan yang tepat adalah isi bab-bab dalam buku ini. Berikut adalah pertanyaan yang seharusnya mampu dijawab dan ditanyakan pada saat yang tepat oleh seorang pemikir kritis.Thursday, November 28, 2019
A (Muslim) Trip to Lanzhou, China
Departure
I depart from Kansai Airport. Because the flight is in the morning, at 9 am, I stay one night in Kansai AP (first cabin hotel) before departure. A prayer room is available on the 3rd floor. The halal ざ-udon on the second floor is what I always visited when departing from Kansai. For subuh prayer, I can do it in my bed. Although it is very small, we can use it to stand face to qibla. Another choice is to do it in a private area of the bathroom. One of the bathrooms in First Cabin Kansai has a large space (about 3 x 1.5 m outside shower room).Transit in Beijing (BCIA, Beijing Capital Int'l Airport)
China is complicated (compared to Japan). The security is very strict. You need to be scanned in a dedicated base. No laptop, tablet, phone, coin, liquid more than 100 ml, should be inside the bag. Separate it. Prohibited items such as a knife, cutter, liquid more than 100 ml, should be moved into the suitcase, not as in cabin baggage.Prepare the arrival statement card (yellow) in advance before entering the immigration post. The staff (police) also asked about my last boarding pass. Once they passed me to enter China, I can look for space to pray (Dhuhur and Ashr) inside the terminal (T3).
There is no dedicated prayer room in T3. I used the most quite waiting space (near a gate) to pray, behind digital signage advertisements. Some peoples see me when I pray. I think it is no problem. Once finished, I go for waiting the time in a space near my gate.
There is free wifi in BCIA (Beijing Capital Intl Airport). To use it, you must scan your passport in a machine to get id and password. Lanzhou airport also provides free wifi. Note that all Google services are blocked in China. A vpn is required beforehand to use Google service.
Stay in AirBnB rented room
First Walking Course
On the second day, I take a walking course along the Yellow River. I used two different bridges to go and back to my hotel. This is my first impression of real life in China. They have such facilities as the futsal field, parks, and pavement along the river. However, urban areas still lack proper facilities. Some road is not asphalted yet. The image below is my first walking course path in the Lanzhou area. The distance of my walk is 4.3 km.First walking course path |
Saturday, November 16, 2019
Menjadi Logis [5]: Prinsip-prinsip Pemikiran Tidak Logis
Penalaran yang tidak masuk akal (mis-reasoning), disebut kekeliruan (fallacy), dibagi menjadi dua:
- Kekeliruan formal: berkaitan dengan bentuk atau struktur dari argumen.
- Kekeliruan informal: selain kekeliruan formal.
6. Asumsi yang salah
Wednesday, November 13, 2019
"Logika dan Percakapan"-nya Grice beserta Kritiknya
Logika dan Percakapan
"Berkata" berhubungan erat dengan apa yang diucapkan, tidak termasuk hal-hal lain yang ingin diutarakan pembicara diluar apa yang diucapkan (kecuali hanya apa yang dikatakannya). Berkata adalah ungkapan semantik (makna dari kata). Sederhananya, anda tidak bisa ngomong A tapi yang anda maksudkan B (misalnya seperti ini, "maksudku begini lho...."). Tidak bisa.Hal ini berbeda dengan membayangkan, menyarankan, menyampaikan, mengindikasikan, dll. Hal-hal tersebut di luar apa yang dikatakan. Berimplikasi (implicating) adalah ungkapan pragmatik (kesesuaian antara apa yang dikatakan dengan apa yang dimaksudkan).
Grice mengusulkan teori implikatur, salah satu aspek kajian pragmatik yang perhatian utamanya adalah mempelajari ‘maksud suatu ucapan’ sesuai dengan konteksnya. Implikatur cakapan dipakai untuk menerangkan makna implisit dibalik “apa yang diucapkan atau dituliskan” sebagai “sesuatu yang diimplikasikan” (implicatum: what is implied) [3].
Implikatur: Konvensi vs Cakapan
Implikatur, berdasarkan ragamnya, oleh Grice dibagi menjadi dua: implikatur konvensi dan implikatur cakapan. Perhatikan kalimat dalam bahasa Inggris berikut.“He’s an Englishman, so he’s brave.”
Pada kalimat di atas, kata 'brave' merupakan implikasi dari 'Englishman', tanpa disebutkan secara langsung. Bandingkan dengan contoh.
“She is poor, but she is honest.”
Kata 'honest', pada kalimat diatas merupakan implikasi kebalikan dari kata 'poor'. Namun disini perlu kata 'but', untuk menerangkan pertentangan 'poor' dengan 'honest' untuk membawakan implicatum. Ini adalah contoh implikatur cakapan (conversational implicature) yang mana merupakan bagian dari semantik.
Prinsip Kooperatif (kerja sama)
Monday, November 11, 2019
Menjadi Logis [4]: Sumber pemikiran tidak logis
Friday, November 08, 2019
Ergonomic touch typing - finger placement revisited
Introduction
If you work with a computer, having a typing skill is a must. You may slow at typing and you think that is not a problem. That is right. But by having precision and fast typing, we can increase our work productivity. It means we use less time to finish the same amount of workload than unproductive work. This article is my sharing of using appropriate finger placement to increase the accuracy and speed of my typing. Please note, accuracy is come first before speed. That is my ultimate goal. As a metric, I used accuracy (%) and word per minute (wpm) to measure my typing accuracy and speed. I evaluate this performance in a month using the keybr.com tool.Rationale
Every people has a different length and size of fingers. Making a standard layout for finger placement on a computer keyboard (touch typing) may work for some people, but also may not work for other people. For example, the following two images are photographs of my fingers. As you can see, my middle fingers longer than any other fingers with a significant factor; 1 cm from ring finger and 1.5 cm from the index finger.Fig 1. My fingers on MBP 2012 keyboard |
Thursday, October 31, 2019
Menjadi Logis [3]: Argumen: Bahasa Logika [2]
Saya mulai penomoran itemnya dari 11, melanjutkan tulisan sebelumnya 1-10.
11. Kebenaran Premis
Dalam argumen silogisme ada kesesuaian antara konten dan struktur. Konten akan benar jika premisnya benar. Jika premisnya salah, maka secara konsisten kesimpulannya menjadi salah. Contohnya adalah berikut.
Setiap anjing memiliki tiga kepala.
Corolla adalah anjing.
Corolla memiliki tiga kepala.
Meski secara struktur benar, namun karena premisnya salah, kesimpulannya menjadi salah. Dapat dikatakan, jika inputnya sampah, maka outputnya juga sampah (garbage in, garbage out).
12. Relevansi Premis
Meski premis harus benar, namun itu saja tidak cukup. Kebenaran premis harus relevan dan menjangkau kesimpulan. Contohnya adalah berikut.
Pak XXX merupakan purnawirawan jenderal TNI AD.
Beliau sekarang seorang wirausahawan yang sukses.
Karenanya, beliau seharusnya terpilih menjadi presiden.
Pada pernyataan diatas, premisnya benar (kalimat satu dan dua), namun kurang relevan dengan kesimpulan yang diambil (kalimat 3). Bandingkan dengan argumen berikut.
Pak YYY adalah wirausahawan sukses.
Beliau terpilih menjadi walikota ZZZ dan gubernur AAA selama dua periode.
Melihat kecakapannya memimpin kota dan provinsi, maka beliau layak menjadi presiden.
Argumen kedua ini lebih logis karena ada relevansi antara premis dan kesimpulan.
13. Pernyataan Fakta, Pernyataan Nilai
Pernyataan bisa berupa fakta atau berupa nilai. Contohnya berikut,
Musisi adalah mereka yang piawai memainkan alat musik.
Bagus adalah musisi.
Kesimpulan: Bagus piawai memainkan alat musik.
Bandingkan dengan pernyataan berupa nilai berikut.
Musisi adalah manusia yang sangat unggul.
Bagus adalah musisi.
Kesimpulan: Bagus adalah manusia yang sangat unggul.
Kata unggul sebagai nilai pada argumen di atas samar (vague). Premis dengan pernyataan nilai tidak bisa digunakan secara presisi seperti pernyataan nilai. Untuk mengetes validitas pernyataan nilai, premis tersebut diuji dengan fakta lainnya yang ada, bila cocok maka bisa diterima.
Tuesday, October 29, 2019
Menjadi Logis [3]: Argumen: Bahasa Logika [1]
1. Membangun Argumen
Perpindahan ke satu ide dari ide yang lain yang telah diketahui kebenarannya, dan menjadikan ide kedua menjadi benar, merupakan inti argumen. Argumen terdiri atas pernyataan-pernyataan, dan pernyataan-pernyataan itulah yang menyampaikan ide dimana perpindahan inferensial (bersifat dapat disimpulkan) terkonsentrasi.
Argumen tersusun atas dua: pernyataan premis dan pernyataan simpulan. Premis adalah pernyataan pendukung. Pernyataan ini merupakan awal argumen dimana kebenaran pernyataan tersebut sudah diketahui. Simpulan adalah pernyataan yang didukung. Premis bisa bermacam-macam, namun simpulan yang baik seharusnya hanya berisi satu hal. Contoh argumen sederhana yang terdiri atas satu pernyataan premis dan satu simpulan.
Karena tidak cocok dengan kepala kantor cabang di Surabaya, Pak Budi dipindahkan ke kantor cabang di Bandung.Kalimat pertama merupakan premis; alasan, yang dianggap benar. Kalimat kedua adalah simpulan yang menjadi benar karena premisnya benar. Premis adalah dasar dari argumen, dan cakupannya harus bisa mampu menjangkau apa yang disimpulkan.
2. Perpindahan dari universal ke partikular
Perpindahan dari pernyataan universal bisa dilakukan ke pernyataan partikular. Perhatikan contoh berikut.
(i) Semua anjing adalah karnivora. (ii) Beberapa anjing adalah karnivora.Karena pernyataan universal (i) adalah benar, maka pernyataan partikular (ii) juga benar. Logika dari prinsip ini cukup sederhana, jika semua anggota dari satu kelas adalah benar, maka sebagiannya juga benar.
3. Perpindahan dari partikular ke universal
Berbeda dengan kaidah sebelumnya, kita tidak bisa secara asa menggeneralisasi dari pernyataan partikular ke pernyataan universal. Perhatikan contoh berikut.
(i) Beberapa wanita adalah ibu. (ii) Semua wanita adalah ibu.Pernyataan partikular (i) tentu saja benar, namun tidak dengan pernyataan universal (ii). Untuk berpindah dari pernyataan partikular ke universal dibutuhkan premis yang kuat dan runtut. Perhatikan contoh berikut.
Setiap orang China yang saya temui di sana bermata sipit. Penduduk Lanzhou 99% bermata sipit berdasarkan data sensus tahun 2010. Di beberapa propinsi lain, persentase penduduk bermata sipit juga mendekati 100%. Bisa disimpulkan, sebelum terjadinya perkawinan antar ras, semua penduduk China bermata sipit.
Sunday, October 27, 2019
Menjadi logis [2]: Prinsip Dasar Logika
1. Prinsip-prinsip utama
Sains adalah kumpulan pengetahuan terstruktur yang dibangun dari prinsip-prinsip utama. Logika, sebagai sains, juga demikian, dibangun atas prinsip-prinsip utama. Ada empat prinsip utama logika sebagai berikut:
- Prinsip identitas: sesuatu adalah apa adanya.
- Prinsip pengecualian nilai tengah: antara ada dan tidak ada tidak ada nilai tengah.
- Prinsip alasan yang cukup: ada alasan yang cukup untuk semua hal (Ya! semua).
- Prinsip kontradiksi: tidak mungkin sesuatu menjadi dan tidak menjadi pada satu waktu.
Daerah abu-abu adalah daerah dimana kebenaran tidak secara jelas dapat dinyatakan. Dalam hidup, banyak daerah abu-abu, namun jangan terlalu banyak menggunakannya. Abu-abu, sebagai warna, ada karena perbedaannya sebagai alternatif warna putih dan hitam. Jika dalam hidup kita berada pada situasi dimana tidak ada alternatif yang jelas, secara objektif, bukan berarti tidak ada alternatif yang jelas. Tidak adanya alternatif bukan karena tidak ada, namun karena kita tidak bisa melihatnya. Daerah yang dibuat abu-abu ada karena kita tidak bisa melihat daerah abu-abu, (sebenarnya) disebabkan ketidakpastian kita atau kurangnya pengalaman.
Sebagai contoh, anda berada pada suatu masalah, menentukan benar atau salah. Anda tidak memiliki pengalaman kalau masalah tersebut benar, namun anda punya pengalaman kalau masalah itu salah. Prinsipnya: negatif hanya dapat dikenali sebagai negatif, "secara tidak pasti", karena positif telah diketahui. Disini ada kemungkinan kepastian. Jika pasti itu mungkin, maka kepastian itu mungkin terjadi, meski tidak pasti. Itulah yang harus dipilih.
Menjadi logis [1]: Menyiapkan akal untuk logika
Ada tiga materi utama kuliah ini:
1. Logika dan penalaran
2. Argumentasi
3. Diskusi ilmiah (lisan dan tulisan)
Untuk menjadi logis kita perlu menyiapkan sikap, pandangan dan prosedur praktis agar logika bisa masuk, diterima maupun keluar dari akal kita. Hal-hal tersebut, dibahas dalam Bab 1 buku "Being Logical", adalah sebagai berikut.
1. Memberi atensi
Menjadi atensif adalah hal mutlak diperlukan untuk menerima logika. Banyak kesalahpahaman karena kita tidak menaruh perhatian terhadap apa yang kita dengarkan. Mendengar (hear) saja tidak cukup, harus mendengar secara seksama (listen). Fokus kita bisa dilatih. Dengan melatih fokus kita pada hal-hal kecil, kita akan terhindar dari permasalahan besar.
2. Mendapatkan fakta secara langsung
Fakta bisa didapatkan secara langsung untuk objek riil (benda, tempat, dll), dan tidak langsung untuk suatu kejadian. Contoh: anda mendengar bahwa ada diskon di Matahari. Anda datang ke Matahari dan ternyata memang ada diskon. Bagaimana jika kita tidak bisa mendatanginya langsung. Contoh: Presiden Jokowi menang pemilu 2019. Dengan mendatangi website KPU, kita bisa mengkonfirmasi bahwa fakta itu benar adanya. Jika kita tidak bisa membuktikannya langsung (dengan mendatangi), maka kita perlu mengeceknya secara tidak langsung, dengan perangkat lain, misalnya website pada contoh di atas.
3. Ide dan objek dari ide
Ide dan objek dari ide berbeda. Suatu ide harus dapat direpresentasikan menjadi objek. Contoh kita punya ide mempercepat suatu proses komputasi dengan mem-by pass prosesnya. Ide tersebut direpresentasikan dalam bahasa pemrograman (objek dari ide). Cara terbaik untuk mengklarifikasi ide (apakah berjalan atau tidak) adalah dengan melihat objeknya, berhasil atau tidak.
4. Memperhatikan asal ide
Kita pada dasarnya yakin bahwa ide dari akal kita. Murni dari akal kita? Tidak. Lingkungan berpengaruh. Ide kita muncul karena lingkungan, tempat, waktu dan latar belakang lainnya. Jika gagal menghubungkan ide kita dengan asalnya (ide) secara sistematis, maka ide tersebut menjadi unreliable, tidak terpercaya.
Sunday, September 22, 2019
Banyak Tahu itu Tidak Baik
Di situlah tersadar, banyak tahu itu tidak baik. Orang Jepang, hanya mengurusi yang menjadi urusannya. Mereka hanya mengetahui apa yang digelutinya. Saya perhatikan teman-teman saya orang Jepang, tidak ada satupun yang mentweet tentang politik, pun urusan lainnya. Bisa jadi, nama menteri nya sendiri pun mereka tidak hafal. Bahkan saya pernah bercakap dengan orang Jepang yang nama kaisarnya sendiripun dia tidak ingat.
Kemudian saya mencari (googling) dengan kata kunci: "Know everything is bad", dan menemukan artikel cukup bagus di link ini:
http://davidsearson.com/2015/11/14/why-knowing-everything-is-a-bad-idea/
Di situ dijelaskan juga, banyak tahu itu merupakan ide yang buruk. Kenapa ide yang buruk? Karena tidak ada artinya, tidak ada maknanya (untuk masa depan). Contoh kasus saya diatas, kalaupun saya tahu nama-nama professor di bidang saya tersebut, apa untungnya buat saya? Untuk mencari tempat postdoc? untuk mencari kerjaan/lowongan? Kalau dicari-cari, pembenaran selalu ada. Dalam link artikel bahasa inggris tersebut, sebenarnya bukan pengetahuan yang lebih penting, tapi hikmah (untuk merencanakan masa depan). Jadi urutannya adalah,
Dari diagram alir diatas, yang kita butuhkan adalah tapis, atau filter. Kita menapis banyak (big) data menjadi pengetahuan, dan menggunakannya untuk merencanakan masa depan menjadi hikmah. Jadi kalau ada kebingungan ketika mengambil sebuah keputusan karena banyaknya pilihan atau informasi, sesungguhnya bukan kebanyakan informasi yang salah, tapi kegagalan filter kita untuk menyaring informasi tersebut.
Bukan karena kebanyakan informasi, tapi karena kegagalan filter.
Implementasi
Lalu bagaimana mengimplementasikan "filter" untuk menapis banyaknya informasi/pengetahuan disekitar kita?Tombol "unfollow", "unsubscribe", "I don't like this (ads)", adalah beberapa yang saya sukai. Bayangkan kalau kita follow/subscribe 1000 akun (youtube, twitter, fb, dll), dan setiap akun memposting 1 tweet/video/status dalam setiap hari, maka dalam sehari kita menerima 1000 posting, diluar iklan. Jika satu jam dari tiap akun tersebut memposting/share video/status/twitter baru, maka kita akan menerima informasi sejumlah:
24000
Setiap jamnya, diluar iklan.
Aturan saya dalam memfollow/subscribe akun cukup sederhana: "Follow/Subscribe" yang bermanfaat, lainnya: abaikan. Sekalipun itu akun orang terkenal, orang berpengaruh ataupun pejabat. Masa depan, kita tentukan sendiri, dari informasi yang kita dapatkan, dan kita filter.
Banyak mencari tahu juga tidak baik
Internet memudahkan kita untuk mencari tahu. Cukup duduk manis di depan laptop, mengetikkan kata kunci dari apa yang ingin kita ketahui dan whoala! apa yang kita cari tahu kita dapatkan. Ini tidak baik. Pencarian terhadap satu kata kunci akan memicu pencarian-pencarian kata kunci lainnya. Begini logikanya. Dari hasil pencarian satu kata kunci, anda mendapatkan informasi tentang kata kunci A dalam suatu halam internet (web page). Di laman tersebut anda kemudian menemukan istilah lain. Bisa juga anda penasaran apa agama si A, siapa istri si A, siapa mantan si A, dimana A dilahirkan, dst. Memiliki pengetahuan atas pencarian tersebut menyenangkan, sebagaimana makan camilan atau memiliki uang. Begitu kata hasil penelitian [1]. Bahkan, kesenangan mendapatkan atas jawaban dari apa yang kita cari tersebut bisa disetarakan dengan uang [1]. Inilah tantangannya: meredam kesenangan kita mencari tahu dari sesuatu yang tak penting.Terakhir, less is more, dan diam itu emas (tapi sedikit orang yang bisa melakukannya). Sedikit tahu akan menjadikan kita ahli dan pro di bidang kita masing-masing.
Referensi
[1] Kobayashi, Kenji, and Ming Hsu. "Common neural code for reward and information value." Proceedings of the National Academy of Sciences 116, no. 26 (2019): 13061-13066.
Thursday, September 19, 2019
Numpy Array: merubah nilai tertentu (NaN) menjadi nilai lain
TL;DR (too long; didn't read):
a_without_nan = np.nan(a_with_nan, nan=0) # change NaN to 0
Lebih lengkapnya:
https://bagustris.blogspot.com/2020/06/menghapus-dan-mengganti-data-nan-pada.html
Sunday, September 15, 2019
Memahami size dan shape NumPy array
Langsung saja, perhatikan gambar berikut.
Sehingga, bentuk-bentuk matriks dapat dibagi sebagai berikut:
- 1D array, contohnya matrik berbentuk (2, ), (3, ), (4, ).
- 2D array, contohnya matrik berbentuk (3, 1), (2,3), (3,3).
- 3D array, contohnya matrik berbentuk (3, 1, 1), (3, 2, 3), (4,3,2).
- ND array, contohnya matrik berukuran (n, 4, 3, 2), (n, n, 4, 3, 2).
- a.ndim: untuk mengetahui banyaknya dimensi dari variabel np array (1D, 2D, dll).
- a.shape: untuk mengetahui bentuk/shape dari variabel np array (misal (2,3)).
- a.size : untuk mengetahui total elemen matriks.
- len(a): untuk mengetahui panjang (baris/axis 0) dari np array, sama dengan a.shape[0].
Sesuai dengan judul artikel ini, size dan shape merujuk pada ukuran dan bentuk. Ukuran bernilai skalar, yakni banyaknya elemen, sedangkan bentuk bernilai matriks (baris, kolom). Namun kedua istilah tersebut kadang disamakan. Contohnya berikut.
In [1]: a = np.random.randint(0,10, size=(4, 3)) In [2]: a.shape Out[2]: (4, 3) In [3]: a.size Out[3]: 12 In [4]: b = np.zeros(shape=(3, 2)) In [5]: b.shape Out[5]: (3, 2) In [6]: b.size Out[6]: 6Jadi sebagai attribut kelas, shape dan size berbeda, sedangkan sebagai argumen keduanya sampai saat ini masih disamakan. Mungkin karena pengaruh bahasa C seperti yang didiskusikan pada forum ini.
Friday, September 13, 2019
Menghapus data NaN pada Pandas DataFrame
Untuk menghapus data NaN, beserta baris pada data nan tersebut perintah dasarnya adalah,
df.dropna()
dimana "df" adalah pandas dataframe. By default, perintah di atas akan menghapus baris yang mana ada data NaN. Jadi yang dihapus adalah barisnya, axis=0. Untuk menghapus kolom yang berisi Nan, gunakan argumen `axis=1`.
df.dropna(axis=1)
Jika kita syaratkan, baris yang dihapus adalah baris yang semuanya berisi nan, tambahkan argumen "how='all'". Sehingga perintahnya menjadi
df.dropna(axis=0, how='all') # untuk menghapus baris jika semua adalah nan df.dropna(axis=1, how='all') # untuk menghapus kolom jika semua isinya adalah nan
Jadi by default, perintah df.dropna() sama dengan df.dropna(axis=0, how='any').
Silakan lihat screencast di bawah ini untuk prakteknya.
By default juga, hasil penghapusan data NaN tidak disimpan (tidak embedded), jadi perlu disimpan dalam variabel baru, misal b = df.dropna(). Jika ingin langsung, gunakan argumen `inplace=True`. Perhatikan screencast di bawah ini untuk lebih jelasnya.
Jika anda lebih suka menggunakan Numpy untuk menghapus data NaN, caranya ada disini: Menghapus dan mengganti data NaN pada Numpy.<
Monday, September 09, 2019
Beberapa shortcut penting Byobu
Berikut beberapa shortcut penting ketika menggunakan byobu via ssh:
- Ctrl A, D : keluar dari ssh tanpa menghentikan proses (=F6)
- F2: membuat jendela baru
- Alt + Panah Kanan/Kiri: berpindah jendela
- Ctrl + F6: keluar dari jendela, split
- Fn + F7: enable scroll
- Ctrl + C: keluar (dari enable scroll)
- Alt + F6: menghentikan ssh dari komputer lain kecuali yang dipakai
- F9: menampilkan help (gunakan tab untuk berpindah menu, =Shift+F1)
- ketik 'exit': keluar dari sesi
Friday, August 23, 2019
Ketika Laptop Tersiram Air
Daleman laptop saya, MBP 2012, yang tersiram air, masih ada sisa-sisa tetesan air di dalamnya. |
1. Segera matikan, cabut kabel power, tahan (hold) power button.
Meski ada air diatas keyboard dan mungkin menghalangi anda untuk mematikan komputer, tetap matikan laptop secara paksa. Cabut kabel charger, tahan tombol power. Semua komputer/laptop bisa dimatikan dengan cara ini.
2. Angin-anginkan dengan posisi terbalik.
Saya mempraktekkan hal tersebut kurang lebih 8 jam sejak laptop saya tersiram air. Letakkan laptop pada posisi "tenda pramuka", dan pasang kipas di bawahnya menghadap ke atas.
Posisi laptop ketika diangin-anginkan, tambahkan kipas angin di bawah laptop tsb (sumber gambar: Wikihow, CC) |
3. Buka casing laptop, bersihkan.
Setelah 8 jam saya angin-anginkan, saya coba buka penutup belakang laptop saya. Hasilnya: ada banyak tetesan air di motherboard dan beberapa komponen lainnya. Saya bersihkan sisa-sisa air tersebut, kemudian saya pasang lagi.
Daleman MBP setelah saya lepas motherboard, HDD, CD drive, dll. Tampak: keyboard. |
4. Cabut battery, dan komponen-komponen lainnya.
Karena laptop saya memiliki battery di dalam (MBP 2012), untuk mencabut battery saya harus membuka casingnya.
5. Diamkan, angin-anginkan lagi, semakin lama semakin baik.
Ini adalah langkah dimana saya tidak sabar. Ketika selesai saya bersihkan, laptop saya nyalakan. Awalnya saya senang. Kemudian saya matikan, dan tidak bisa nyala lagi! saya coba buka lagi, lepas battery dan nyalakan lagi. Bisa! Namun satu komponen rusak total: Keyboard. Kemungkinan terjadi konslet pada komponen tersebut saat saya menyalakan ulang pertama kalinya sejak tersiram air, karena masih ada sisa-sisa air. Idealnya, waktu minimum untuk untuk menunggu sebelum kembali menyalakan laptop (menurut saya) adalah 24 jam.
Ini adalah pengalaman saya kesekian kalinya "menyiram" laptop, seingat saya tiga kali. Dan pada ketiganya saya sama-sama harus kehilangan keyboard. Komponen yang relatif lebih murah daripada komponen lainnya. Saya beli keyboard MBP 2012 (model A1278) di AliExpress seharga 350 ribu. Sebelumnya, hal yang sama terjadi pada Lenovo G580 dan e-Machine D725 saya, keduanya harga keyboardnya lebih murah. Pada kasus lain, beberapa komponen seperti battery dan motherboard harus diganti karena tersiram air (konslet).
Untuk langkah lebih lengkap, bisa merujuk ke WikiHow.
Saturday, August 17, 2019
Blogger sebagai media sosial
Blogger sebagai media sosial
Saya punya ide untuk menggunakan blogger atau blogspot sebagai media sosial saya. Alasannya sederhana, media itulah yang lebih dulu saya kenal dan banyak tulisan saya yang dapat dicari dengan mudah disitu. Setidaknya ada dua manfaat penting dengan menggunakan blog sebagai media sosial. Berikut deskripsi singkatnya.Membiasakan menulis
Sejak awal tahun ini saya berniat menulis minimal satu artikel di blog saya ini. Nyatanya, bulan saya saya tidak menulis satu artikel pun. Menulis itu memang tidak mudah, tapi juga tidak susah. Perlu membiasakan diri untuk melakukannya. Untuk membiasakan menulis perlu media, dan blog saya pikir merupakan media yang paling efektif. Bandingkan dengan Twitter yang dibatasi 14 karakter atau Facebook yang menakutkan untuk dibilang riya'. Untuk menulispun, bukan "membiasakan menulis", juga tidak mudah. Ada penghalang besar yang harus dirobohkan agar bisa menulis, baca selengkapnya di sini: Merobohkan penghalan dalam "menulis". Orang yang tidak biasa menulis akan terlihat dari tulisannya yang amburadul, susah dibaca dan dimengerti. Sebaliknya, orang yang biasa menulis biasanya tulisannya terstruktur dan mudah difahami.Sunday, June 30, 2019
Mengecek grammar dan spellchek bahasa inggris file Latex lewat Terminal
Sebagai seorang mahasiswa, saya dituntut untuk mempubikasikan makalah (karya tulis) saya pada sebuah seminar, atau konferensi bahasa kerennya. Publikasi tersebut merupakan syarat wajib. Agar bisa lulus setidaknya saya harus publikasi pada dua konferensi dan dua jurnal, itu harapan (dan mungkin juga syarat) dari profesor saya di sini. Karena level bahasa Inggris saya masih pada tahap belajar, dan terlalu mahal untuk melanggan Grammarly Pro, saya menggunakan tools gratis untuk mengecek grammar tulisan saya. Perkakas tersebut namanya textidote, bisa diunduh di sini.
Perkakas yang dibutuhkan (saya gunakan):
- Textidote
- Gedit (dengan embedded terminal)
Gedit dengan embedded terminal, textidote siap mengeksekusi (check grammar dan spell check) file latex di atasnya. |
Instalasi
Thursday, June 20, 2019
Tentang layer TimeDistributed pada Keras...
Saya punya data X. Ukurannya (32, 10, 16), seperti contoh pada dokumentasi Keras.
x = np.random.random(size=(32, 10, 16)
Artinya, saya punya 32 data (sample). Setiap sample berisi data (10, 16): 10 baris dan 16 kolom. Ketika saya mengaplikasikan suatu layer (katakanlah, dan paling umum: Dense), agar bobot dari satu layer tersebut merata pada setiap elemen maka perlu kita gunakan timedistributed layer ini.
Perhatikan contoh berikut,
model0 = Sequential() model0.add(Dense(8, input_shape=(10, 16))) model0.summary()Hasilnya adalah sebagai berikut,
---
Model: "sequential_6" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= time_distributed_1 (TimeDist (None, 10, 8) 136 ================================================================= Total params: 136 Trainable params: 136 Non-trainable params: 0Bedakan dengan ini,
model1 = Sequential() model1.add(Dense(8, input_shape=(10, 16))) model1.summary()Hasilnya,
---
Model: "sequential_5" _________________________________________________________________ Layer (type) Shape Param # ================================================================= dense_3 (Dense) (None, 10, 8) 136 ================================================================= Total params: 136 Trainable params: 136Apa perbedaannya? Tidak ada. Saya juga bingung. Mari kita cari contoh lain, dari machinelearningmastery.
Sebenarnya, jika kita teliti, ada perbedaan bentuk output shape dari kedua contoh diatas, yang pertama memberikan bentuk ouput (TimeDist(None, 8, 10)), sedangkan yang kedua hanya (None, 8, 10).
Wednesday, June 19, 2019
Implementasi Pengenalan Emosi dari Sinyal Wicara Berbasis Deep Learning dengan Keras
Ide
Ide dasar penelitian di bidang speech emotion recognition (pengenalan emosi dari sinyal wicara) adalah bahwa sinyal wicara mengandung informasi emosi dari pembicara. Contoh sederhana, suara orang marah akan sangat berbeda dengan suara orang sedih dan senang. Dengan mengenali (pola) suara orang marah, senang, sedih, dll, kita akan bisa mengenali emosi seseorang dari suaranya. Berikut ilustrasi pengenalan emosi dari penelepon.Pengenalan emosi penelepon secara otomatis oleh Artificial Intelligence (AI) Sumber:https://medium.com/@alitech_2017/voice-based-emotion-recognition-framework-for-films-and-tv-programs-2a6abbb77242 |
Diagram Alir Sistem
Secara umum, sistem pengenalan emosi dari sinyal wicara terdiri dari dua blok utama (selain input dan output):- Ekstraksi Fitur
- Klasifikasi
Diagram blok pengenalan emosi dari sinyal wicara |
Dataset
Friday, May 31, 2019
Keras untuk permasalahan regresi
Problem
Permasalahan yang kita angkat sebagai contoh adalah fungsi matematik sederhana berikut,$$ f(x) = 2x + 3 $$
Dimana $x$ merupakan input dan $f(x)$ merupakan nilai output. Misal, kita ingin membuat model yang bisa memberikan prediksi nilai $f(x)$ diberikan nilai input $x$ dimana sebelumnya model kita latih dengan range nilai $x$ yang diberikan. Model deep learning ini akan kita implementasikan dengan Keras.
Implementasi
Implementasi deep learning ini akan mengikuti pola yang saya tulis disini: https://bagustris.blogspot.com/2019/04/implementasi-deep-learning-dengan-keras.html
Input-Output data
Input-output data, sesuai persamaan di atas, didefinisikan dalam python numpy sebagai berikut.import numpy as np x_train = np.arange(0, 10.01, 0.01) y_train = 2*x_train + 3 #**2 + 3
Model
Untuk membuat model, kita buat fungsi `build_model`. Model yang kita bangun terdiri dari tiga layer: 2 dense (fully connected) layer dan satu output layer. Input layer akan masuk pada dense layer pertama. Model tersebut bisa kita gambarkan sebagai berikut.Berikut fungsi `build_model` untuk membangun model seperti gambar di atas.
Friday, April 26, 2019
Menggunakan GridSearchCV untuk optimasi hyperparameter pada Keras
- Berapa ukuran batch_size optimal: 16, 32, 64 atau 128?
- Berapa epoch optimal untuk menjalankan model deep learning: 10, 20, 50 atau 100?
- Apa optimizer terbaik untuk deep learning model ini: atam, rmsprop, atau adadelta...?
Thursday, April 25, 2019
How-to: Install cartopy on Ubuntu 16.04 using pip3
It is a python package. Hence, the best way to install is by using pip. Here is how on Ubuntu 16.04
Requirements:
$ # install geos $ sudo apt install libgeos++-dev $ # install proj $ sudo apt install libproj-dev
Install cartopy
$ # clone github repo $ git clone https://github.com/SciTools/cartopy.git $ # cd ke repo $ cd cartopy $ # install from source $ python3.6 setup.py install --user
In that case, I used Python 3.6 in user environment, not root.
Sunday, April 21, 2019
Start-end silence removal dengan Librosa
Start-end silence removal
Start-end silence removal merupakan teknik untuk menghilangkan suara silence di awal dan akhir utterances (sinyal wicara). Teknik ini dilatarbelakangi bahwa kebanyakan silence berada pada awal dan akhir pembicaraan.Dengan library librosa, menghilangkan silence pada awal dan akhir kalimat ini cukup mudah sebagai berikut,
import librosa x, fs = librosa.load('Ses01F_impro01_F000.wav') # ganti dengan nama file wav kamu xt, ind = librosa.effects.trim(x, top_db=30)
Untuk melihat hasilnya, kita ceck panjang sinyal atau kita plot (bisa juga didengarkan suaranya dengan library sounddevice.
In [12]: len(x) Out[12]: 42900 In [15]: len(xt) Out[15]: 24576
Hasil plotnya adalah sebagai berikut:
figure() subplot(211); plot(x) subplot(212); plot(xt)
Perlu dicatat, karena saya menggunakan ipython --pylab, saya tidak perlu menuliskan plt.* untuk mengakses library matplotlib. Selain menghasilkan output `xt`, fungsi librosa.effects.trim yang digunakan untuk menghilangkan silence ini juga memberikan indeks (start, end) dimana sinyal xt diambil.
Perhatikan gambar di atas, yang ditandai dengan elips warna oranye adalah sinyal silence yang ingin kita hilangkan, sedangkan, didalam kotak merah adalah sinyal yang ingin kita ambil. Parameter utama untuk menghilangkan silence ini adalah threshold (dB).
Friday, April 19, 2019
Ekstraksi fitur MFCC dan zero paddingnya dengan library LIBROSA
Instalasi
pip3 install --user librosa
Workflow
Misalkan dalam direktory saat ini (`./`), kita memiliki 30 file wav sinyal wicara. Dari 30 file tersebut, tiap file akan kita ekstrak 20 MFCC per frame/window (dari default librosa). Karena panjang tiap file berbeda, maka bentuk/ukuran variabel MFCC untuk tiap file tersebut berbeda, misalnya: (20, 44), (20, 193) dan (20, 102). Karena default window size atau hopsize (n_fft) dari librosa adalah 2048 (25ms) dengan 512 hop length /stride (10 ms overlap), maka untuk file suara dengan durasi 2 detik banyaknya frame mffc yang didapat adalah,
output _length = (seconds) * (sample rate) / (hop_length)
output_length = 2 * 22050/512 = 87 --> (20, 87)
Jika panjang file 3 detik maka panjang output_length adalah,
output_length = 3 * 22050/512 = 130 --> (20, 130)
Variabel lebar window and stride untuk memproses MFCC pada librosa bisa dikontrol dengan argumen n_fft dan hop_length. Misal n_fft = int(sr/40), hop_lenghth=int(sr/100) untuk lebar window 25 ms dan hop length (geser ke kanan) sebesar 10 ms. Perhatikan gambar berikut untuk lebih jelasnya, K adalah lebar window (n_fft) dan Q adalah stride atau hop length (disebut juga hop size). Pada beberapa literatur sinyal sistem, variabel pergeseran antar window memakai nilai % overlap yang pada gambar dibawah disimbolkan dengan 0. Jika default hop_length=512 dan n_fft = 2048, maka overlap defaultnya adalah 75%.
Windowing: window length, hop size, and its overlap. |
Jadi, by default MFCC yang dihasilkan oleh librosa berbeda ukurannya bergantung pada ukuran file input. Padahal, agar bisa diproses oleh deep learning, kita inginkan panjang semua variabel MFCC tersebut sama, misal (20, 100). Jika kurang kita zero-paddingkan, jika lebih kita potong sampai 100 sample sehingga menjadi (20, 100). Karena input deeplearning berupa (sample, fitur), bentuk (20, 100) kita transpose menjadi (100, 20). Tujuan akhir kita adalah memperoleh bentuk dari variabel fitur berupa (30, 100, 20) yang siap dimasukkan pada arsitektur deep learning.
Berikut caranya:
import os import librosa lenmin = 100 mfcc =[] for i in os.listdir('.'): x_i, sr = librosa.load(i, sr=None) mfcc_i = librosa.feature.mfcc(x_i, sr) if mfcc_i.shape[1] < lenmin: mfcc_i = np.hstack((mfcc_i, np.zeros((mfcc_i.shape[0], lenmin-mfcc_i.shape[1])))) mfcc_i = mfcc_i[:,:lenmin] mfcc.append(mfcc_i.T) mfcc = np.array(mfcc)Cek ukuran variable mfcc dengan:
In [1]: np_mfcc.shape Out[1]: (30, 100, 20)
Mengekstrak Delta dan Delta-delta MFCC
Pada banyak aplikasi pemrosesan sinyal wicara, tidak hanya MFCC yang dipakai sebagai fitur, namun juga perbedaan antar koefisien MFCC (delta) dan perbedaan antar delta MFCC (delta-delta). Librosa menyediakan fungsi untuk mengekstrak kedua fitur tersebut.
Untuk mengekstrak delta MFCC dari MFCC:
delta = librosa.feature.delta(mfcc)
Untuk mengekstrak delta-delta dari MFCC:
deltad = librosa.feature.delta(MFCC, order=2)
Zero padding dengan Tensorflow
Ada cara yang lebih singkat untuk zero padding, yakni dengan tensorflow. Dengan tensorflow, kita hanya butuh satu perintah (dan satu baris jika memungkinkan). Contoh jika kita mempunyai list MFCC dengan ukuran seperti [(100, 20), (28, 20), (53,20), ...]. Semua MFCC tersebut kita rubah menjadi ukuran (100, 200) dengan cara berikut.
import tensorflow as tf mfcc_padded = tf.keras.preprocessing.sequence.pad_sequence(mfcc, maxlen=100, dtype=float)Dimana mfcc_list merupakan list MFCC yang berbeda-beda ukuran dan hasilnya, mfcc_padded, merupakan list MFCC yang kesemuanya berukuran (100, 20) melalui teknik zero padding.
Tuesday, April 09, 2019
Python: konversi array ND ke 1D
In [4]: x = np.arange(9.).reshape(3, 3) In [5]: x Out[5]: array([[0., 1., 2.], [3., 4., 5.], [6., 7., 8.]])Apabila kita cari tahu panjang dan bentuk vektor x
In [6]: x.shape Out[6]: (3, 3) In [179]: len(x) Out[179]: 3 In [180]: x.size Out[180]: 9
Artinya, kita memiliki array 3D (N-dimensional atau ND) dengan panjang 3 baris dan total berisi 9 elemen. Kita ingin merubah matrix 3x3 tersebut menjadi matrikx 1x9 (atau 9x1). Berikut caranya:
x.flatten()
Cek panjang vektor x.flatten sebagai berikut:
len(x.flatten())
Update:
2019-04-22: Selain dengan `flatten`, konversi ke 1D dilakukan dengan ravel dan ini cara lebih cepat.
Monday, April 08, 2019
Implementasi Deep Learning dengan Keras: Terminologi dasar
model = Sequential() model.add(Dense(XX, input_dim=Y) model.add(Dense(Z)) model.compile(loss='nama_loss_function', optimizer='nama_optimizer', metrics=['nama_metrik']) model.fit(training_input, training_ouput, epochs=AA)
Terminologi penting (tak kenal maka tak paham?!):
Model: Tipe model yang digunakan. Ada dua: sekuensial dan functional API.Contoh:
model = Sequential()
Dense: Menambahkan unit atau node beserta argumennya, dari satu layer ke layer selanjutnya. Dengan kata lain, "fully-connected layer", atau "feed forward network", atau "multi-layer perceptron".
Contoh:
model.add(Dense(32, input_dim=2)Kode di atas membuat layer dengan jumlah 32 unit dan 16 unit input. Jumlah learnable parameternya adalah 16*32+32 = 544. Check dengan
model.summary()
. Jika kita tambahkan lagi,model.add(32)Maka sekarang kita mempunyai dua layer yang masing-masing berisi 32 unit. Total learnabale parameternya adalah 544+ (32*32+32) = 1600. Check dengan kode yang telah diberikan di atas.
Compile: Mengkonfigurasi model untuk melatih data yang diberikan
Contoh:
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])Fit: Mencari hubungan input dan output data, dengan kata lain: membangun/melatih model.
Contoh:
model.fit(train_input, train_output, batch_size=16, epochs=500)
Empat terminologi di atas merupakan step dasar untuk melakukan training data dengan deep learning. Namun masing-masing terminologi memiliki argumen. Agar lengkap, berikut penjelasan singkat argumen-argmunen tersebut.
Thursday, April 04, 2019
Numpy: Menggabungkan dua list menjadi N x 2 vektor
kata = ["Bagus!", "Ampuh!", "cantik!", "Mantap!", "Cakep!", "Jelek", "Rusak", "Nol", "Omong kosong", "Busuk", "Tidak"] label = [1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0]
Kita ingin menggabungkan dua list tersebut sehingga menjadi seperti ini:
array([['Bagus!', '1'], ['Ampuh!', '1'], ['cantik!', '1'], ['Mantap!', '1'], ['Cakep!', '1'], ['Jelek', '0'], ['Rusak', '0'], ['Nol', '0'], ['Omong kosong', '0'], ['Busuk', '0'], ['Tidak', '0']])
Maka, kita dapat menggunakan skrip berikut:
kata_label = hstack([np.array(kata, ndmin=2).T, np.array(label, ndmin=2).T])
Friday, March 29, 2019
Word Embedding dan Implementasinya dalam Python (Keras)
Misalkan kita punya kumpulan lima kata-kata baik dan enam kata-kata jelek seperti dibawah. Kata-kata baik kita labelkan dengan angka "1" sedangkan kata-kata jelek kita labelkan dengan angka "0".
import numpy as np kata = ["Bagus!", "Ampuh!", "cantik!", "Mantap!", "Cakep!", "Jelek", "Rusak", "Nol", "Omong kosong", "Busuk", "Tidak"] label = np.array ([1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0])
Kemudian kata-kata di atas kita rubah menjadi integer
# merubah kata menjadi integer from keras.preprocessing.text import one_hot vocab_size = 50 encoded_docs = [one_hot(d, vocab_size) for d in kata] print(encoded_docs)
Karena panjang maksimal dari elemen kata adalah dua buah (yakni kata "Omong kosong"), kita jadikan kata-kata lainnya memiliki panjang dua buah kata.
Thursday, March 28, 2019
Data yang besar mengalahkan algoritma yang baik
Benar adanya, tak semata-mata algoritma/metode yang baik, tapi juga data yang banyak. Gampangannya, orang yang yamg "pintar" tapi jarang belajar dibanding dengan orang yang "rajin" belajar dari banyak data. Pengalaman menunjukkan, tipe orang disebut terakhir lebih banyak berhasilnya daripada tipe orang yang disebut pertama.
Analogi lagi, data vs algoritma: mana yang lebih penting adalah seperti membandingkan mana yang lebih dulu: telur atau ayam. Awalnya saya, mungkin seperti kebanyakan orang juga, berpikiran telur lebih dahulu. Alasannya: telur lebih rigid, lebih statis, dan lebih kecil daripada ayam. Namun hasil penelitian membuktikan bahwa ayam lebih dahulu daripada telur (artinya Tuhan menciptakan ayam dulu, ini lebih masuk akal). Begitu juga dengan data vs algoritma: data-lah akhirnya yang menang, tentunya data yang banyak, big atau bahkan very big.
Jadi tunggu apa lagi? Cari data sebanyak-banyaknya, seakurat mungkin! Mengumpulkan data tidak sesulit membangun algortima. Kalau membangun algortima, kita butuh mikir exktra, menurunkan rumus matematik, dan mengimplementasikannya dalam bahasa pemrograman. Sedangkan untuk mengumpulkan data, kita cuma butuh waktu, keuletan, dan ketekunan. Contohnya untuk data teks, kita perlu sabar dan rajin mengumpulkan kalimat, tokenisasi, mengetik dan sebagaiknya. Untuk data suara, kita perlu merekam, mengedit dan memanipulasi (tambahkan noise, hilangkana noise, dsb). Jauh lebih mudah untuk memperbanyak data daripada memperbaiki algoritma.
Garbage In Garbage Out
Salah satu prinsip yang penting dalam machine learning dan pengenalan pola adalah "data yang baik", berkualitas. Jika data yang kita masukkan adalah sampah, maka hasilnya juga sampah. Maka, selain memperbanyak data, yang harus kita perhatikan adalah kualitas data tersebut. Jangan sampai data yang kita latih, misal dengan deep learning, merupakan data sampah, sehingga hasilnya juga sampah. Disinilah pentingnya preprocessing.
Berapa data yang "besar" itu?
Jadi, 5000 data yang terlabeli dengan benar merupakan data minimal dari sisi best practice. Tenju saja, semakin besar semakin baik.As of 2016, a rough rule of thumb is that a supervised deep learning algorithm will generally achieve acceptable performance with around 5,000 labeled examples per category, and will match or exceed human performance when trained with a dataset containing at least 10 million labeled examples. Working successfully with datasets smaller than this is an important research area, focusing in particular on how we can take advantage of large quantities of unlabeled examples, with unsupervised or semi-supervised learning.
- Alon Halevy, P. Norvig, F. Pereira, "The Unreasonable Effectiveness of Data". Available online:https://static.googleusercontent.com/media/research.google.com/ja//pubs/archive/35179.pdf
- https://www.datasciencecentral.com/profiles/blogs/data-or-algorithms-which-is-more-important
Tuesday, March 26, 2019
Vektor dari kata dan GloVe embedding
Vektor kata: Raja, ratu, pria, wantia |
Vektor dari Kata
Apa itu vektor dari kata, atau singkatnya 'vektor kata'? Sederhananya: a vector of weights. Tugas dari vektor dari kata adalah untuk mencari representasi (numerik) dari kata-kata yang dicari. Contoh sederhana adalah sebagai berikut.
Sebuah data terdiri dari kata-kata:
data = {raja, ratu, pria, wanita, anak-anak}
maka kata "raja" dapat kita tuliskan:
raja = {1, 0, 0, 0, 0}
ratu = {0, 1, 0, 0, 0}
pria = {0, 0, 1, 0, 0}
wanita = {0, 0, 0, 1, 0}
anak-anak={0, 0, 0, 0, 1}
Teknik diatas disebut dengan one-hot encoding.
Friday, March 15, 2019
Atensi, hubungannya dengan cocktail party problem dan deep learning
Atensi
Apakah atensi itu? Atensi merupakan proses kognitif dan perilaku untuk memilih informasi tertentu dan mengabaikan informasi lainnya. Studi tentang atensi ini mulai berkembang ketika Cherry pada tahun 1953 mempublikasikan papernya tentang eksperimen "shadowing task": dimana responden diperdengarkan dua pesan melalui headphone secara dichotic (satu pesan untuk tiap kanal, kanan dan kiri). Pesan terserbut merupakan pesan utama (attended) dan sampingan (non-attended). Cherry menemukan bahwa sangat kecil sekali reponden memperhatikan pesan sampingan, misalnya apakah pesan itu diucapkan oleh laki-laki/wanita, bahasa apa yang digunakan, dll. Eksperimen Cherry ini membuka jalan lahirnya teori tentang atensi dan beberapa modelnya.Gambar 1. Model atensi Broadbent dan Treisman |
Wednesday, March 06, 2019
Mencoba Kaldi di Ubuntu 18.04, cuda9.0
Instalasi
Instalasi kaldi adalah proses pertama, dan bisa jadi, tersulit. Jika anda "SUCCESS" menginstall Kaldi, proses selanjutnya akan mudah. Jika tidak, akan terhenti. Berikut adalah dasar alur kerja setelah meng-clone Kaldi.Pertama clone Kaldi ke direktori PC kita.
Monday, February 04, 2019
Phase Unwrapping
Phase unwrapping adalah metode untuk "membuka" fase sinyal. Algoritma metode untuk unwrapping fase ini adalah sebagai berikut: "Jika selisih antara dua skalar fase dalam array lebih dari dikont, yakni $\pi$ (3.14, dalam radian), maka nilai skalar yang lebih tinggi tadi dikurangi $2 \pi$. Nilai diskont ini bisa dirubah, namun defaultnya adalah $\pi$.
Perhatikan contoh berikut. Vektor $x$ adalah array yang berisi fase dari suatu sinyal.
$$ px = [0~ 1~ 3.24~ 5~ 6.28~ 10~ 13~ 16]$$
Jika selisih antara $x[n]$ dengan $x[n+1]$ lebih besar dari $\pi$ maka dilakukan unwrapping fase. Sehingga untuk vektor fase $x$ diatas hasilnya adalah,
$$ px2 = [0.0~ 1.0~ 2.0~ 3.24~ 5.0~
6.28~ 3.72~ 6.72~ 9.72] $$
Vektor $px2$ merupakan hasil phase unwrapping dalam radian agar tracking fase terlihat lebih halus. Lihar gambar di bawah ini untuk hasil plot fase (atas) dengan unwrapping fase (bawah).
Plot fase (atas) dengan unwrapping fase (bawah) |
Friday, February 01, 2019
Zero Padding dan efeknya pada FFT
$$ x = [0 ~1~ 2 ~3 ~1~ 2~ 3~ 2~ 4~ 3] $$
Vektor tersebut memiliki ukuran 10 data. Zero padding adalah menambahkan nol di belakang vektor tersebut, misalnya kita tambahkan lima nol di belakang data terakhir sehingga menjadi,
$$x = [0 ~1~ 2~ 3~ 1~ 2~ 3~ 2~ 4~ 3~ 0~ 0~ 0~ 0~ 0]$$
Zero padding banyak dipakai untuk menyamakan ukuran vektor/matriks. Pada machine learning/deep learning, ukuran input harus sama, dan zero padding dilakukan untuk tujuan tersebut (menyamakan ukuran input). Pada analisa sinyal di domain frekuensi, zero padding ini biasanya digunakan agar spektrum yang kita plot menjadi lebih halus.
Implementasi dengan Python
Implementasi zero padding dengan python bisa bermacam-macam, salah satunya dengan np.pad (salah lainnya dengan menggunakan np.zeros).Contohnya adalah sebagai berikut:
>>> x = np.array([1, 2, 3, 4, 5]) >>> xpad = np.pad(x, (0, 5), 'constant') # menambahkan lima nol di belakang vektor a >>> x [1, 2, 3, 4 , 5, 0, 0, 0, 0, 0]
Friday, January 18, 2019
Merobohkan penghalang dalam "menulis"
- Penghalang #1: "Saya tidak punya waktu untuk menulis" Solusi: Alokasikan waktu menulis, sediakan dan jadwalkan waktu tersebut.
- Penghalang #2: "Saya butuh membaca lebih banyak, menganalisa tulisan orang lain, dll untuk menulis" Solusi: Lakukan sekarang juga dan tulislah hasil bacaanmu dan analisamu, langsung setelah itu.
- Penghalang #3: "(Kayaknya) Saya butuh laptop baru ..." Solusi: Tidak, kamu tidak butuh laptop baru. Tulisan ini ditulis dengan laptop produksi 6 tahun yang lalu.
- Penghalang #4: "Saya tidak punya inspirasi untuk menulis" Solusi: Kamu tidak perlu menunggu inspirasi datang, cukup duduk, tulis. Gerakkan tanganmu di atas tuts keyboard, tulis.
- Penghalang #5: "Saya tidak punya motivasi (untuk menulis)" Solusi: