Javan Cipta Solusi
Published in

Javan Cipta Solusi

Deep Learning Menggunakan Rubix ML

Photo by Josh Riemer on Unsplash

Deep learning merupakan bagian dari machine learning dimana proses pembelajaran dilakukan menggunakan jaringan saraf tiruan (artificial neural network). Deep learning memungkinkan komputer untuk melakukan hal yang sebelumnya tidak mungkin untuk dilakukan seperti mobil tanpa pengemudi (driverless car), chatbot, dan masih banyak lagi. Library Rubix ML menyediakan fungsi untuk membuat model jaringan saraf tiruan sederhana. Artikel ini akan memberikan contoh pembuatan model jaringan saraf tiruan menggunakan rubix ml.

Setup

Proses setup rubix ml sangatlah mudah. Pertama buat folder baru dan jalankan cmd di folder tersebut, lalu ketik perintah di bawah ini.

composer require rubix/ml

Setelah itu buat satu file .php dan isi dengan kode berikut.

require_once __DIR__ . '/vendor/autoload.php';

Data

Daya yang digunakan untuk artikel ini adalah data kesehatan janin yang diambil dari https://www.kaggle.com/andrewmvd/fetal-health-classification. Data tersebut berisi 21 kolom data angka yang mengindikasikan kesehatan janin dan 1 kolom nilai / label kesehatan janin yang terbagi menjadi 3 kelas (normal, suspect, dan pathological). Silahkan download file tersebut dan pindahkan ke folder instalasi rubix ml.

Membaca Data

Membaca file.csv menggunakan rubix ml memerlukan beberapa fungsi, antara lain:

  1. Fungsi CSV untuk membaca file .csv
  2. Objek Dataset untuk mengubah isi file .csv ke objek dataset rubix ml
  3. Fungsi NumericStringConverter untuk mengubah string angka dari .csv ke bentuk integer

Berikut kode untuk membaca file .csv.

use Rubix\ML\Extractors\CSV;
use Rubix\ML\Datasets\Labeled;
use Rubix\ML\Transformers\NumericStringConverter;
$dataset = Labeled::fromIterator(
new CSV('fetal_health.csv', true)
)->apply(new NumericStringConverter());

Preprocessing

Karena bentuk data sudah berupa angka, preprocessing yang diperlukan hanyalah membagi data. Namun saya sarankan anda untuk melakukan preprocessing seperti menggunakan beberapa kolom tertentu untuk proses pelatihan dan feature scaling untuk meningkatkan performa model.

Membagi Data

Pembagian dataset di rubix ml dapat dilakukan menggunakan beberapa fungsi. Saya menggunakan fungsi stratifiedSplit karena fungsi ini membagi data secara proporsional, artinya proporsi jumlah label di data latih dan uji sama. Fungsi ini hanya menerima 1 parameter yaitu rasio pembagian. Berikut kode untuk membagi data menggunakan fungsi stratifiedSplit.

[$training, $testing] = $dataset->stratifiedSplit(0.8);

Training Model

Pembuatan model

Pembuatan model jaringan saraf tiruan di rubix ml dilakukan menggunakan fungsi MultilayerPerceptron. Fungsi ini memiliki 1 parameter wajib, yaitu hidden layers. Hidden layers merupakan inti dari deep learning, di hidden layer kita mendefinisikan jumlah layer jaringan saraf tiruan dan jumlah node / neuron di setiap layer. Berikut kode untuk mendefinisikan model jaringan saraf tiruan menggunakan MultilayerPerceptron.

use Rubix\ML\Classifiers\MultilayerPerceptron;
use Rubix\ML\NeuralNet\Layers\Dense;
use Rubix\ML\NeuralNet\Layers\Activation;
use Rubix\ML\NeuralNet\ActivationFunctions\LeakyReLU;
use Rubix\ML\NeuralNet\Layers\Dropout;
use Rubix\ML\NeuralNet\Layers\PReLU;
$estimator = new MultilayerPerceptron([
new Dense(200),
new Activation(new LeakyReLU()),
new Dropout(0.2),
new Dense(100),
new Activation(new LeakyReLU()),
new Dropout(0.2),
new Dense(50),
new PReLU(),
]);

Model di atas terdiri dari beberapa layer, antara lain:

  1. Dense layer, layer ini merupakan layer yang berisi node sebanyak parameter yang dikirimkan. Setiap node di layer ini terhubung dengan setiap node di layer sebelumnya.
  2. Activation layer, layer ini berfungsi untuk mengolah nilai input dari layer dense untuk diberikan ke layer selanjutnya. Fungsi aktivasi yang digunakan di model ini adalah Leaky ReLU.
  3. Dropout layer, layer ini akan menonaktifkan sebagian node pada layer dense secara acak pada setiap perulangan pada saat pelatihan untuk mencegah overfitting model.
  4. PReLU layer, layer ini merupakan layer aktivasi yang menggunakan metode Parametric Rectified Linear Unit untuk mengolah nilai input.

Training model

Proses pelatihan model dilakukan dengan kode berikut.

$estimator->train($training);

Testing Model

Skenario pengujian

Karena label data bersifat kategori maka satuan yang digunakan untuk mengetahui kualitas model adalah akurasi. Untuk menghitung akurasi digunakan fungsi Accuracy. Berikut kode untuk menguji model.

use Rubix\ML\CrossValidation\Metrics\Accuracy;$predictions = $estimator->predict($testing);$metric = new Accuracy();
$score = $metric->score($predictions, $testing->labels());

Untuk mengetahui perbedaan antara metode machine learning non jaringan saraf tiruan dan jaringan saraf tiruan saya juga melatih model random forest. Karena hasil pembagian stratifiedSplit acak, setiap model saya lakukan pengujian sebanyak 10 kali.

Hasil pengujian

Rata rata akurasi yang saya dapatkan untuk model random forest adalah 0.703… dan 0.765… untuk model jaringan saraf tiruan. Tidak terjadi peningkatan yang signifikan, ini bisa terjadi karena proses preprocessing dan model jaringan saraf tiruan tidak optimal. Anda bisa mencoba coba sendiri untuk mendapatkan hasil yang lebih baik.

Rubix ml sudah mendukung deep learning, namun rubix ml belum menyediakan layer layer seperti LSTM, dan convolution layer. Mungkin rubix ml akan menambah layer lagi, namun saat ini apabila anda ingin menggunakan layer layer tersebut anda bisa menggunakan library keras atau tensorflow di bahasa python.

Cheers.

--

--

Business Process Optimization Partner. Contact us to help you optimize your business using technology.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store