Yang Sering Berkunjung

Cari Blog Ini

Entri Populer

Rabu, 25 Mei 2016

Machine Learning adalah

Baca 2 artikel mengenai machine learning dari codepolitan,  ijin copy paste codepolitan ya

Sejarah Machine Learning

Sejak pertama kali komputer diciptakan manusia sudah memikirkan bagaimana caranya agar komputer dapat belajar dari pengalaman. Hal tersebut terbukti pada tahun 1952, Arthur Samuel menciptakan sebuah program, game of checkers, pada sebuah komputer IBM. Program tersebut dapat mempelajari gerakan untuk memenangkan permainancheckers dan menyimpan gerakan tersebut kedalam memorinya.

Istilah machine learning pada dasarnya adalah proses komputer untuk belajar dari data (learn from data). Tanpa adanya data, komputer tidak akan bisa belajar apa-apa. Oleh karena itu jika kita ingin belajar machine learning, pasti akan terus berinteraksi dengan data. Semua pengetahuan machine learning pasti akan melibatkan data. Data bisa saja sama, akan tetapi algoritma dan pendekatan nya berbeda-beda untuk mendapatkan hasil yang optimal.

Belajar Machine Learning

Machine Learning merupakan salah satu cabang dari disiplin ilmu Kecerdasan Buatan (Artificial Intellegence) yang membahas mengenai pembangunan sistem yang berdasarkan pada data. Banyak hal yang dipelajari, akan tetapi pada dasarnya ada 4 hal pokok yang dipelajari dalam machine learning.

1. Pembelajaran Terarah (Supervised Learning)

2. Pembelajaran Tak Terarah(Unsupervised Learning)

3. Pembelajaran Semi Terarah (Semi-supervised Learning)

4. Reinforcement Learning

Untuk mengetahui lebih lengkap tentang Machine Learning, kawan-kawan bisa mengikuti course diCoursera dengan instruktur profesor Andrew NG dari Stanford University.

Aplikasi Machine Learning

Contoh penerapan machine learningdalam kehidupan adalah sebagai berikut.

1. Penerapan di bidang kedoteran contohnya adalah mendeteksi penyakit seseorang dari gejala yang ada. Contoh lainnya adalah mendeteksi penyakit jantung dari rekamanelektrokardiogram.

2. Pada bidang computer visioncontohnya adalah penerapan pengenalan wajah dan pelabelan wajah seperti pada facebook. Contoh lainnya adalah penterjemahan tulisan tangan menjadi teks.

3. Pada biang information retrivalcontohnya adalah penterjemahan bahasa dengan menggunakan komputer, mengubah suara menjadi teks, dan filter email spam.

Salah satu teknik pengaplikasianmachine learning adalah supervised learning. Seperti yang dibahas sebelumnya, machine learning tanpa data maka tidak akan bisa bekerja. Oleh karena itu hal yang pertama kali disiapkan adalah data. Data biasanya akan dibagi menjadi 2 kelompok, yaitudata training dan data testingData training nantinya akan digunakan untuk melatih algoritma untuk mencari model yang cocok, sementara datatesting akan dipakai untuk mengetes dan mengetahui performa model yang didapatkan pada tahapan testing.

Dari model yang didapatkan, kita dapat melakukan prediksi yang dibedakan menjadi dua macam, tergantung tipe keluarannya. Jika hasil prediksi bersifat diskrit, maka dinamakan prosesklasifikasi. Contohnya klasifikasi jenis kelamin dilihat dari tulisan tangan (output laki dan perempuan). Sementara jika kelurannya bersifat kontinyu, maka dinamakan prosesregresi. Contohnya prediksi kisaran harga rumah di kota Bandung (output berupa harga rumah).

Dampak Machine Learning di Masyarakat

Penerapan teknologi machine learningmau tidak mau pasti telah dirasakan sekarang. Setidaknya ada dua dampak yang saling bertolak belakang dari pengembangan teknolgi machine learning. Ya, dampak positif dan dampak negatif.

Salah satu dampak positif dari machine learning adalah menjadi peluang bagi para wirausahawan dan praktisi teknologi untuk terus berkarya dalam mengembangkan teknologi machine learning. Terbantunya aktivitas yang harus dilakukan manusia pun menjadi salah satu dampak positif machine learning. Sebagai contohnya adalah adanya fitur pengecekan ejaan untuk tiap bahasa pada Microsoft Word. Pengecekan secara manual akan memakan waktu berhari-hari dan melibatkan banyak tenaga untuk mendapatkan penulisan yang sempurna. Tapi dengan bantuan fitur pengecekan ejaan tersebut, secarareal-time kita bisa melihat kesalahan yang terjadi pada saat pengetikan.

Akan tetapi disamping itu ada dampak negatif yang harus kita waspadai. Adanya pemotongan tenaga kerja karena pekerjaan telah digantikan oleh alat teknologi machine learning adalah suatu permasalahan yang harus dihadapi. Ditambah dengan ketergantungan terhadap teknologi akan semakin terasa. Manusia akan lebih terlena oleh kemampuan gadget-nya sehingga lupa belajar untuk melakukan suatu aktivitas tanpa bantuan teknologi.

Senin, 02 Mei 2016

Install Elasticsearch, Install Fluentd, Install Kibana

Saya akan mengurai installasi tiga serangkai elasticsearch, fluentd, dan kibana.
Ok kita mulai...

Install Elasticsearch
Elasticsearch di sini akan berfungsi sebagai storage. Elasticsearch adalah aplikasi berbasis java.  Jadi pertama kali kita harus pastikan bahwa environment java sudah terpasang di mesin kita.

Persiapan Java:
Cek java:

user@komputer:~#java -version[enter]
java version "1.7.0_75"
OpenJDK Runtime Environment (IcedTea 2.5.4) (7u75-2.5.4-1~precise1)
OpenJDK 64-Bit Server VM (build 24.75-b04, mixed mode)

Bila belum ada java terinstall maka kita harus terlebih dahulu menginstall Oracle Java dengan langkah berikut:

user@komputer:~#sudo add-apt-repository ppa:webupd8team/java[enter]
user@komputer:~#sudo apt-get update[enter]
user@komputer:~#sudo apt-get install oracle-java7-installer[enter]

Unduh dan Install Elasticsearch
Setelah kita yakin bahwa environment java telah tersedia, maka kita lanjutkan dengna mengunduh elasticsearch 1.5 dengan menjalankan perintah berikut

user@komputer:~#mkdir elastic
user@komputer:~#cd elastic
user@komputer:~/elastic#wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.5.0.deb

setelah selesai proses unduhnya, lanjut dengan menjalankan perintah ini

user@komputer:~/elastic#sudo dpkg -i elasticsearch-1.5.0.deb

yang harus diperhatikan dalam instalasi elasticsearh adalah bahwa service elasticsearch telah terbetuk, tetapi tidak automatik jalan saat boot.  Dan untuk membuatnya jalan saat boot, jalankan perintah ini.

user@komputer:~#sudo update-rc.d elasticsearch defaults 95 10

Untuk menjalankan elasticsearch secara manual, jalankan perintah ini.

user@komputer:~#sudo /etc/init.d/elasticsearch start

Ok, elasticsearch kita telah siap.

Install Fluentd

Fluentd di sini akan berfungsi, kalau saya bilang sebagai grabber.  Fluentd akan listening pada port-port tertentu untuk menangkap stream log yang dilempar oleh server. Dalam bahasan ini, saya akan menggunakan fluentd dan fluentd-ui secara bersamaan.  Fluentd-ui akan mempermudah konfigurasi fluentd.
Untuk menginstall fluentd maupun fluentd-ui pertama-tama kita harus mempersiapkan environment ruby terlebih dahulu.

Cek ruby.

user@komputer:~#ruby -v[enter]
ruby 1.9.3p0 (2011-10-30 revision 33570) [x86_64-linux]
user@komputer:~#gem -v[enter]
1.8.11

Bila hasil pengecekan memberikan return error program belum terinstall, silakan jalankan perintah ini.

user@komputer:~#sudo apt-get install ruby1.9.1-full[enter]

Install fluentd-ui (dan fluentd)

Pada dasarnya installasi fluentd-ui juga akan menjalankan installasi fluentd bila fluentd gems tidak diketemukan pada koleksi gems. Jadi kita hanya perlu menjalankan installasi fluentd-ui.


user@komputer:~#sudo gem install -V fluentd-ui[enter]


Setelah proses installasi selesai kita bisa melanjutkan dengan membentuk initial file configuration untuk fluentd.
misalkan configuration file akan kita letakkan di /opt/fluent



user@komputer:~#sudo fluentd -s /opt/fluent



Menjalankan fluentd-ui
Untuk menjalankan fluentd-ui silakan ketik



user@komputer:~#sudo fluentd -ui start > /dev/null 2>&1 &


Kemudian buka Chrome (browser lain) dan ketik alamat: http://localhost:9292.  Masukkan "admin" sebagai user, dan "changeme" sebagai password.

Layar login fluentd-ui

Setelah berhasil masuk, kita akan dihadapkan pada interface setup fluentd. Perhatikan pula bahwa kita juga diminta untuk merubah password.  Namun kali ini, kita tidak bahas untuk perubahan password.

Interface install fluentd

Interface ini akan membantu kita untuk mengkonfigur fluentd dan td-agent. Namun karena kita tidak pernah menginstall td-agent, maka td-agent tampil disabled. Klik "Setup fluentd" sehingga tampil layar berikut:

Memasukkan parameter start fluentd
Isikan sesuai dengan konfigurasi yang telah ditentukan.  Setelah kita klik "Create" maka akan muncul "Dashboard" seperti pada gambar berikut.

Dashboard fluentd-ui
Klik "Start" dan pastikan fluentd telah berjalan dan tampilan "Dashboard" telah berubah seperti pada gambar berikut:

Dashboard ketika fluentd telah dijalankan

Selanjutnya, kita harus menginstall plugin elasticsearch.  Klik recomended plugin dan klik install pada "fluent-plugin-elasticsearch" dan "fluent-plugin-record-reformer"

Penambahan Plugin

Bila plugin telah terinstall, maka bila kita klik "Installed Plugin" akan kita lihat dua plugin yang kita pilih muncul di list.

Installed Plugin

Catatan:
Seringkali penambahan plugin gagal karena kurangnya library libcurl terinstall pada system.  Untuk itu, silakan jalankan perintah berikut:

user@komputer:~#sudo apt-get install libcurl4-gnutls-dev

Setelah installasi plugin selesai, kita bisa lanjutkan dengan penambahan "Source" dan "Output". 
Klik "Ad Source and Output"

Add Souce and Output
Karena kita akan menggunakan elasticsearch, maka kita tentukan output "Elasticsearch"
Add Output Elasticsearch
Lengkapi isian pada Output Elasticsearch.  Klik "Update & Restart". 
Kemudian, setelah kita persiapkan outputnya, kita persiapkan inputnya.
Untuk kasus kita saat ini, kita akan menangkap syslog dari mesin-mesin produksi. Kita pilih "Syslog Protocol".

Add Input Syslog Protocol
Lengkapi isinya dan lanjutkan dengan klik "Update & Restart".  Pada installasi kita kali ini, kita menggunakan port "5140" sebagai listening port untuk menangkap log stream.

Apabila instalasi kita berhasil, maka log yang ditangkap bisa kita lihat baik pada "Dashboard" maupun "Log".

Dashboard dengan system telah berjalan.


Install Kibana

Untuk menginstall kibana, pertama-tama kita harus mengunduh file nya dari elasticsearch.co.

user@komputer:~#sudo mkdir /opt/kibana[enter]
user@komputer:~#cd /opt/kibana[enter]
user@komputer:/opt/kibana#sudo wget https://download.elasticsearch.org/kibana/kibana/kibana-4.0.1-linux-x64.tar.gz[enter]
ekstrak tarball kibana:

user@komputer:/opt/kibana#tar -xzvf kibana-4.0.1-linux-x64.tar.gz[enter]
Jalankan kibana:
user@komputer:/opt/kibana/#cd kibana-4.0.1-linux-x64/bin[enter]
user@komputer:/opt/kibana/kibana-4.0.1-linux-x64/bin#./kibana[enter]
{"@timestamp":"2015-03-31T07:39:31.112Z","level":"info","message":"Listening on 0.0.0.0:5601","node_env":"production"}
Aktifkan Chrome (atau browser lain) dan buka halaman http://localhost:5601 pada menu Discover
Discover log event dengan Kibana 4.

Perbandingan Twitter River VS Logstash pada Elasticsearch

Analisis media sosial Twitter dapat menunjukkan rating seseorang, layanan, atau suatu produk di mata pengguna Twitter. Sebagai salah satu media sosial dengan pengguna terbanyak di dunia, Twitter menyediakan API yang memudahkan pengambilan data Twitter secara real time. Analisis ini menjadi penting karena dapat dimanfaatkan sebagai dasar penarikan keputusan. Elasticsearch adalah tools yang mampu melakukan analisis big data; termasuk data Twitter yang realtime. Dari sekian banyak tools input yang dimilikinya, Elasticsearch memiliki dua tools yang dapat menginputkan data Twitter dari Twitter API ke Elasticsearch. Cara pertama adalah melalui Twiter River dan cara kedua adalah melalui Logstash. Faktor input adalah faktor yang sangat mempengaruhi output. Keakuratan data input serta efisiensi pengolahan serta penyimpanan data sangat penting dalam menunjang sebuah sistem yang menangani big data. Dalam rangka mengoptimalkan kinerja sistem analisis media sosial Twitter dengan Elasticsearch dan Kibana, diperlukan sebuah penelitian yang membandingkan kedua tools input tersebut.

Penelitian dilakukan dengan memonitor dua buah server HPC yang melakukan crawling data dari Twitter API secara bersamaan. Server HPC pertama adalah server Elasticsearch yang menggunakan input Logstash, sedangkan server HPC kedua menggunakan input Twitter River. Parameter pembanding yang digunakan adalah beban pemrosesan CPU, penggunaan RAM, penggunaan disk, jumlah data Twitter (twit) yang diinputkan, serta jumlah field yang diinputkan pada Elasticsearch.
 
Hasil penelitian menunjukkan bahwa Logstash menggunakan lebih banyak sumber daya dibandingkan Twitter River termasuk 0,99% beban pemrosesan CPU dan 7,2% penggunaaan RAM per hari, 112 MB penggunaan disk per minggu, dan 497 field lebih banyak per twit. Sebaliknya, Twitter River menginputkan 191 twit lebih banyak dibandingkan Logstash dalam satu minggu.

Pencarian Full Text dengan Elasticsearch

Sebelum nya kita kenalan dulu apa itu elasticsearch, elasticsearch adalah search engine full-text yang bisa diakses melalui RESTful API. Elasticsearch berorientasi dokumen (hampir seperti MongoDB) artinya engine ini akan menyimpan objek atau dokumen daripada menyimpan data dengan representasi baris dan kolom. Dokumen yang disimpan tersebut akan di serialisasi sebagai JSON ketika diakses.
  • Indexing
  • Indexing adalah proses memasukkan data ke dalam elasticsearch. index kalau dalam relational database bisa dikatakan sebagai database.
    untuk membuat indexing bisa menggunakan postman chrome atau terminal dengan curl.

    indexing-postmanchrome
    membuat index dengan postman chrome
    jika hasilnya seperti diatas berarti sudah berhasil membuat index blog_db.
  • Mapping
  • Mapping adalah mendefinisikan tipedata dan beberapa atribut elasticsearch.
    sekarang kita akan membuat type posts pada index blog_db yang telah kita buat tadi. Jadi jika dalam relational database, blog_db adalah database dan posts adalah table.
    kita akan membuat mapping dengan post json dibawah ke dalam url http://localhost:9200/blogging/_mapping/posts

     {
        "posts" : {
            "properties" : {
                "judul" : {"type" : "string"},
                "isi" : {"type" : "string"},
                "author" : {"type" : "string"}
            }
        }
    }


ElasticSearch adalah

ElasticSearch merupakan search engine full-text yang bisa diakses melalui RESTful API. Search engine ini berorientasi dokumen (hampir seperti MongoDB) artinya engine ini akan menyimpan objek atau dokumen daripada menyimpan data dengan representasi baris dan kolom. Dokumen yang disimpan tersebut akan di serialisasi sebagai JSON ketika diakses.
Artikel ini hanya akan mengenalkan sedikit dasar dasar dari ElasticSearch.

Instalasi

Download paket ElasticSearch di sini dan ekstrak. Kemudian jalankan dengan perintah
$ ./bin/elasticsearch
Deafult port search engine ini akan berjalan pada 9200. Test query bisa dilakukan meskipun data belum ada, yaitu dengan menjalankan perintah berikut untuk mengetahui informasi engine ElasticSearch yang sedang berjalan
$ curl localhost:9200
{
  "status" : 200,
  "name" : "Black Queen",
  "version" : {
    "number" : "1.1.0",
    "build_hash" : "2181e113dea80b4a9e31e58e9686658a2d46e363",
    "build_timestamp" : "2014-03-25T15:59:51Z",
    "build_snapshot" : false,
    "lucene_version" : "4.7"
  },
  "tagline" : "You Know, for Search"
}

Indexing

Proses memasukkan data ke dalam ElasticSearch dinamakan dengan indexing. Karena engine ini memakai RESTful API maka data-data yang akan di indexing dengan mudah bisa dimasukkan melalui curl dan operasi HTTP seperti GET, PUT, DELETE.
Di Elasticsearch, dokumen adalah termasuk tipe dan tipe tersebut termasuk dalam index. Secara paralel bisa dibandingkan dengan database relasional:
Relational DB ⇒ Database ⇒ Table ⇒ Baris ⇒ Kolom
Elasticsearch ⇒ Index ⇒ Tipe ⇒ Dokumen ⇒ Field
Sebagai contoh:
Untuk memasukkan data index film dengan tipe (kategori) action dan mempunyai id 1.
$ curl -XPUT http://localhost:9200/film/action/1 -d '
{   
    nama: "The Raid 2: Berandal", 
    tahun: "2014",rating:"8.9", 
    imdb: "http://www.imdb.com/title/tt2265171/", 
    storyline: "Only a short time after the first raid, Rama goes undercover with 
    the thugs of Jakarta and plans to bring down the syndicate and uncover the corruption 
    within his police force."
}'
Pada keluaran konsol mungkin akan seperti ini
{
    "_index":"film",
    "_type":"action",
    "_id":"1",
    "_version":1,
    "created":true
}
Nilai "created"=true bearti data baru dimasukkan. Jika anda memakai operasi PUT dengan id yang sama maka data akan terupdate dan "created"=false.
$ curl -XPUT http://localhost:9200/film/action/1 -d '
{
    judul: "The Raid 2: Berandal", 
    tahun:"2014",rating:"8.9", 
    imdb:"http://www.imdb.com/title/tt2265171/", 
    storyline:"Only a short time after the first raid, Rama goes undercover with 
    the thugs of Jakarta and plans to bring down the syndicate and uncover the corruption 
    within his police force."
}'

Query

Query data sangat mudah dilakukan dengan operasi sederhana GET. Misalnya untuk mencari film dengan judul kata mengandung kata "berandal"
curl -XGET http://localhost:9200/film/action/_search?q=judul:berandal

{
    "took":7,
    "timed_out":false,
    "_shards":{
        "total":5,
        "successful":5,
        "failed":0
    },
    "hits":{
        "total":1,
        "max_score":0.15342641,
        "hits":[{
            "_index":"film",
            "_type":"action",
            "_id":"1",
            "_score":0.15342641, 
            "_source" : {
                judul: "The Raid 2: Berandal", 
                tahun:"2014",rating:"8.9", 
                imdb:"http://www.imdb.com/title/tt2265171/", 
                storyline:"Only a short time after the first raid, 
                Rama goes undercover with the thugs of Jakarta 
                and plans to bring down the syndicate and uncover 
                the corruption within his police force."
            }
        }]
    }
}
Jenis query string diatas termasuk dalam Search Lite. Untuk query data yang lebih lanjut sebaiknya memakai Query DSL.

Query DSL

Query ini memakai format JSON sebagai parameter query. Sebagai contoh
$ curl -XGET http://localhost:9200/film/action/_search 
'{
    "query":{
                "match": {
                    "about":"raid"
                }
            }
 }'
Query match diatas merupakan full-text search yang akan mencari semua dokumen yang MENGANDUNG kata "raid". Query DSL lebih fleksibel jika diinginkan query data yang lebih kompleks seperti filter search, , phrase search & highlighting. Untuk lebih jelasnya silahkan lihat Guide Query DSL.

Cluster, Node & Shard

Oh ya salah satu kekuatan dari engine ini yaitu secara alami merupakan sistem terdistribusi artinya dengan mudah sistem engine ini bisa diperbesar maupun diperkecil jika ada penambahan server atau istilahnya horizontal scaling.
Cluster
ElasticSearch Cluster
Untuk mengetahui kesehatan kluster, indikatornya yaitu warna seperti lampu lalu lintas green, yellow atau red
curl -XGET http://localhost:9200/_cluster/health
Contoh hasil keluaran di konsol bisa seperti ini
{
"cluster_name":"elasticsearch",
"status":"yellow",
"timed_out":false,
"number_of_nodes":1,
"number_of_data_nodes":1,
"active_primary_shards":2,
"active_shards":2,
"relocating_shards":0,
"initializing_shards":0,
"unassigned_shards":2
}
yang perlu menjadi perhatian adalah key status. 3 kemungkinan warna ini mempunyai arti sebagai berikut green Semua shard primer dan replika aktif.
yellow Semua shard primer arktif tpi replika tidak.
red Tidak semua shard primer & sekunder aktif.
Node
Node yang dimaksud disini adalah instance dari ElasticSearch. Satu cluster mengandung beberapa node elasticsearch yang sama sama berbagi data dan beban kerja. Satu master node elastisearch diperlukan di dalam cluster untuk manajemen node yang lain seperti penambahan dan penghapusan node. Perlu diingat bahwa klien bisa mengakses node elasticsearch manapun dalam cluster.
Untuk penambahan node dengan nama Node-2 anda bisa memakai perintah berikut
$ ./bin/elasticsearch -Des.node.name=Node-2
Shard
Shard yang dimaksud disini adalah kontainer data yang merupakan instance dari Apache Lucene lengkap dengan search engine sendiri. Bisa dikatakan merupakan bagian unit kerja terkecil dari ElasticSearch. Shard terbagi dua yaitu Shard Primer dan Shard Replika. Shard Primer ukurannya terbatasi dengan perangkat keras, kompleksitas dokumen dll sedangkan Shard Replika merupakan copy dari Shard Primer.
Jika anda ingin lebih mendalami scaling secara horizontal silahkan kunjungi website ElasticSearch.
Ok. Cukup sekian dulu untuk hari ini...