Neural Network
Neural network¶
Multi Layer Perceptron¶
Multi layer perception adalah salah satu jenis neural network yang paling umum digunakan. Multi layer perception terdiri dari 3 layer, yaitu input layer, hidden layer, dan output layer. Input layer merupakan layer pertama yang menerima input dari data. Hidden layer merupakan layer yang berada di tengah-tengah antara input layer dan output layer. Output layer merupakan layer terakhir yang menghasilkan output dari data. Yang perlu diperhatikan adalah setiap node dalam dsatu lapisan akan tersambung secara penuh ke semua node di lapisan berikutnya. Informasi yang mengalir dalam satu arah yaitu dari kiri ke kanan yang disebut dengan jaringan feedforward. Hubungan antara node juga akan diberikan angka bobot masing-masing yang menentukan seberapa penting feature yang bersangkutan. Jika ada 10 feature maka akan ada 10 input node.
Multi Layer Perceptron:
flowchart LR
id1[(Data)] --> id2[Input Layer]
id1 --> id3[Hidden Layer]
id1 --> id4[Output Layer]
subgraph Input Layer
id2((X1))
id3((X2))
id4((X3))
end
id2 --> id5
id2 --> id6
id3 --> id5
id3 --> id6
id4 --> id5
id4 --> id6
subgraph Hidden Layer
id5((H1))
id6((H2))
end
id5 --> id7
id6 --> id7
subgraph Output Layer
id7((Y))
end
id7 --> output Jumlah Hiden Layer bergantung pada seberapa kopmleks pembelajaran yang mau ditentukan. Semakin kompleks pembelajaran maka semakin banyak hidden layer yang dibutuhkan. Jumlah hidden layer juga bergantung pada jumlah node yang ada di dalamnya. Semakin banyak node maka semakin kompleks pembelajaran yang bisa dilakukan. Jumlah node juga bergantung pada jumlah feature yang ada. Semakin banyak feature maka semakin banyak node yang dibutuhkan. Jumlah node juga bergantung pada jumlah output yang diinginkan. Semakin banyak output yang diinginkan maka semakin banyak node yang dibutuhkan.
Deep Learning menggunakan Multi Layer Perceptron dengan jumlah hidden layer yang sangat banyak. Jumlah hidden layer yang banyak akan membuat pembelajaran menjadi lebih kompleks. Semakin kompleks pembelajaran maka semakin baik hasil prediksi yang dihasilkan.
Cara Membangun Model MLP¶
MLP adalah metode supervised learning oleh sebab itu membutuhkan label di training dataset. Langkah selanjutnyta adalah melakukan training dengan mekanisme interatif yang disebut dengan backpropagation, yang bisa dianalogikan proses bejalar dari kesalahan. Proses backpropagation akan menghitung error dari setiap node dan mengubah bobot dari setiap node agar error semakin kecil. Proses backpropagation akan berhenti jika error sudah sangat kecil atau sudah mencapai batas maksimal iterasi yang ditentukan.
Contoh Implementasi MLP¶
Penggunaan MLP dengan menggunakan library scikit-learn. Berikut adalah contoh implementasi MLP dengan menggunakan library scikit-learn.
from sklearn.neural_network import MLPClassifier
from sklearn.model_selection import train_test_split
Metode ini bisa digunakan untuk klasifikasi dan regresi. Untuk klasifikasi, MLPClassifier menggunakan fungsi aktivasi logistic untuk output layer. Untuk regresi, MLPRegressor menggunakan fungsi aktivasi identity untuk output layer. Untuk klasifikasi, MLPClassifier menggunakan fungsi aktivasi logistic untuk output layer. Untuk regresi, MLPRegressor menggunakan fungsi aktivasi identity untuk output layer.

Import semua modul yang kita perlukan seperti Pandaas, Neural Network dan model_selection
import pandas as pd
import sklearn.neural_network as ann
import sklearn.model_selection as ms
df_occupancy = pd.read_csv('datatraining.csv',
header=0, names = ["id", "date", "Temperature",
"Humadity", "Light", "CO2", "HumadityRatio", "Occupancy"])
Kemudian buang id dan date karena tidak diperlukan untuk proses training
kemudian dilakukan profiling singkat dari kelima feature tersebut

Ada 8.143 baris data, perbedaan antara nilai maksimum dan minimum cukup besar, misalnya suhu dari 19 hingga 23, cahaya memiliki jangkauan dari nol hingga 1.546 sehinga perbedaannya cukup besar, sedangkan MLP sangat sensitif terhadap dengan perbedaan seperti ini (lain halnya dengan algoritma Decision Tree atau Naive Bayes). Untuk itu, kita perlu melakukan normalisasi terhadap data-data tersebut.
Split Data¶
Sebelum proses training dilakukan, kita perlu membagi data menjadi dua bagian, yaitu data training dan data testing. Data training digunakan untuk proses training, sedangkan data testing digunakan untuk menguji akurasi dari model yang kita buat. Untuk membagi data, kita bisa menggunakan fungsi train_test_split dari modul model_selection yang sudah kita import sebelumnya.

Normalisasi Data¶
Selanjutnya, kita perlu melakukan normalisasi terhadap data-data tersebut. Scikit menyediakan sklearn.preprocessing.MinMaxScaler untuk melakukan normalisasi. Training dataset sekarang jangkauan angkanya hanya dari sekitar negatif 2 hingga positif 7
Training Model¶
MLPClassifier memerukan dua parameter penting, yaitu hidden layer dan jumlah maksimal iterasi. Untuk parameter hidden layer, kita bisa menentukan sendiri berapa banyak hidden layer yang kita inginkan., jadi diawali dengan angka acat yaitu tida node di hidden layer dan lima kali iterasi maksimal:
Model sudah terbentuk dan bisa diuji dengan data testing. Untuk menguji akurasi dari model, kita bisa menggunakan fungsi score dari model yang sudah kita buat.
Hasil prediksi dari model yang sudah kita buat bisa kita lihat dengan menggunakan fungsi predict dari model yang sudah kita buat.
Dengan menggunakan sklearn.metrics, kita bisa menghitung akurasi dari model yang sudah kita buat.

Dari hasil di atas angka precision class 0 bernilai 0,83 dan clas 1 bernilai 1. Angka precision bisa berbeda-beda ketika dijalankan. Hal ini dikarenakan proses training menggunakan fungsi random. Jika kita ingin mendapatkan hasil yang sama, kita bisa menambahkan parameter random_state pada fungsi train_test_split.
Hasil yang lebih tinggi bisa didapatkan dengan menambahkan hidden layer dan iterasi maksimal. Namun, semakin banyak hidden layer dan iterasi maksimal, maka proses training akan semakin lama. Untuk itu, kita perlu mencari kombinasi yang tepat antara jumlah hidden layer dan iterasi maksimal.
Untuk mengurangi model overvit, kita harus memastikan training dataset kita cukup besar dan membatasi jumlah hidden layer.
Ada beberapa pilihan activation function yang bisa kita gunakan, yaitu identity, logistic, tanh, dan relu. Contohnya:
from sklearn.neural_network import MLPClassifier
mlp = ann.MLPClassifier(hidden_layer_sizes=(3), max_iter=5, activation='logistic')
Setelah model terbentuk, kita bisa mengecek bobot dari setiap hidden layer dan output layer dengan menggunakan fungsi coef.

Kekurangan model MLP adalah sulit untuk membaca hasilnya, angka-angka bobot di atas tidak bisa langsung menunjukan feature mana yang lebih penting dibandingkan dengan feature lainnya.