Implementasi Kodingan ANN Pada Python
Artificial Neural Networks (ANN) adalah
bagian dari pembelajaran mesin yang diawasi di mana kita akan memiliki input
serta output yang sesuai yang ada dalam dataset kita. Seluruh tujuan kami
adalah untuk mencari tahu cara memetakan input ini ke output masing-masing. ANN
dapat digunakan untuk memecahkan masalah regresi dan klasifikasi. Berikut ini
adalah perpustakaan dan perangkat lunak yang akan kita butuhkan untuk
mengimplementasikan ANN.
1.
Python – 3.6
atau yang lebih baru
2.
Jupyter Notebook
( Google Colab juga dapat digunakan)
3.
Panda
4.
Numpy
5.
Tensorflow 2. x
6.
Belajar-Scikit
Pada tugas kali ini,
kami akan mengimplimentasi tugas Mata Kuliah Deep Learning dengan dataset dari
domain keuangan. Kami memiliki dataset di mana kami memiliki total 14 dimensi
dan 100.000 catatan. Dimensi yang akan kita hadapi adalah sebagai berikut:
1.
RowNumber:-
Mewakili jumlah baris
2.
CustomerId:-
Mewakili customerId
3.
Nama keluarga:-
Mewakili nama keluarga pelanggan
4.
CreditScore:-
Mewakili skor kredit pelanggan
5.
Geografi: -
Mewakili kota tempat pelanggan berada
6.
Gender: -
Mewakili Jenis Kelamin pelanggan
7.
Usia:- Mewakili
usia pelanggan
8.
Tenor: -
Mewakili masa jabatan pelanggan dengan bank
9.
Saldo:- Mewakili
saldo oleh pelanggan
10. NumOfProducts: - Mewakili jumlah layanan bank yang
digunakan oleh pelanggan
11. HasCrCard: - Mewakili apakah pelanggan memiliki
kartu kredit atau tidak
12. IsActiveMember: - Mewakili apakah pelanggan adalah
anggota aktif atau tidak
13. PerkiraanSalary:- Mewakili perkiraan gaji pelanggan
14. Keluar: - Mewakili apakah pelanggan akan keluar dari
bank atau tidak.
Struktur
himpunan data
Seperti yang dapat kita lihat dari
kamus data di atas, kita berurusan dengan total 14 dimensi. Di sini tujuan
utama kami adalah untuk menciptakan jaringan saraf tiruan yang akan
mempertimbangkan semua variabel independen (pertama 13) dan berdasarkan itu
akan memprediksi apakah pelanggan kami akan keluar dari bank atau tidak (Keluar
adalah variabel dependen di sini). Setelah kita memahami langkah-langkah untuk
membangun jaringan saraf, kita dapat langsung menerapkan langkah-langkah yang
sama ke dataset lain juga. Salah satu cara di mana kita dapat menemukan dataset
tersebut adalah repositori pembelajaran mesin UCI. Himpunan data ini
diklasifikasikan ke dalam masalah regresi dan klasifikasi.
a.
Mengimpor Pustaka yang Diperlukan untuk Jaringan Saraf
Tiruan
Mari kita impor semua pustaka atau librari yang
diperlukan di sini
#Importing
necessary Libraries
import numpy
as np
import pandas
as pd
import
tensorflow as tf
|
b.
Mengimpor Himpunan Data
Pada langkah ini, kita akan mengimpor dataset kita.
Karena himpunan data kami dalam format csv, kami akan menggunakan metode panda
read_csv() untuk memuat himpunan data.
#Loading Dataset data = pd.read_csv("Churn_Modelling.csv") |
c.
Menghasilkan Matriks Fitur (X)
Prinsip dasar saat membuat model pembelajaran mesin
adalah menghasilkan X juga disebut sebagai Matrix of Features. X ini pada
dasarnya berisi semua variabel independen kami. Mari kita buat hal yang sama di
sini.
#Generating Matrix of Features X = data.iloc[:,3:-1].values |
Di sini kami telah menggunakan metode iloc dari bingkai
data Pandas yang memungkinkan kita untuk mengambil nilai yang diinginkan dari
kolom yang diinginkan dalam dataset. Di sini seperti yang kita lihat bahwa kita
mengambil semua data dari kolom ke-3 sampai kolom minus satu kolom terakhir.
Alasan untuk itu adalah 3 kolom pertama yaitu RowNumber, CustomerId, dan
Surname tidak ada hubungannya dengan memutuskan apakah pelanggan akan keluar
atau tidak. Oleh karena itu dalam hal ini kami mulai mengambil semua nilai dari
kolom ke-3 dan seterusnya. Terakhir, karena kolom terakhir kami pada dasarnya
adalah variabel dependen maka kami telah menyebutkan -1 dalam metode iloc yang
memungkinkan kami untuk mengecualikan kolom terakhir agar tidak dimasukkan
dalam matriks fitur X kami.
d.
Menghasilkan Vektor Variabel Dependen(Y)
Dengan cara yang sama di mana kita telah membuat
matriks fitur (X) untuk variabel independen, kita juga harus membuat vektor
variabel dependen (Y) yang hanya akan berisi nilai variabel dependen kita.
#Generating Dependent Variable Vectors Y = data.iloc[:,-1].values |
e.
Pengkodean Jenis Kelamin Variabel Kategoris
Sekarang kami telah mendefinisikan X dan Y kami, mulai
saat ini kami akan mulai dengan salah satu fase yang sangat memakan waktu dalam
pemecahan masalah pembelajaran mesin apa pun. Fase ini dikenal sebagai rekayasa
fitur. Untuk mendefinisikannya dengan cara yang sederhana, rekayasa fitur
adalah fase di mana kita menghasilkan variabel baru dari yang sudah ada atau
memodifikasi variabel yang ada sehingga dapat menggunakannya dalam model
pembelajaran mesin kita. Pada gambar di atas yang menggambarkan struktur
dataset, kita dapat melihat bahwa sebagian besar variabel bersifat numerik
dengan pengecualian beberapa - Gender, Negara. Pada dasarnya, model
pembelajaran mesin adalah rumus matematika yang hanya akan menerima digit
sebagai input. Jadi kami mencoba membuat model ML menggunakan dataset ini yang
berisi campuran data (numerik + string), model kami hanya akan gagal selama
proses pembuatan itu sendiri. Oleh karena itu kita perlu mengubah nilai string
tersebut menjadi setara numerik mereka tanpa kehilangan signifikansinya. Salah
satu cara paling efisien untuk melakukan ini adalah dengan menggunakan teknik
yang disebut encoding. Ini adalah proses yang akan mengubah string atau
kategori langsung menjadi setara numerik mereka tanpa kehilangan signifikansi.
Di sini kolom gender kami hanya memiliki 2 kategori yaitu pria dan wanita, kami
akan menggunakan LabelEncoding. Jenis pengkodean ini hanya akan mengubah kolom
ini menjadi kolom yang memiliki nilai 0 dan 1. Untuk menggunakan Label
Encoding, kita akan menggunakan kelas LabelEncoder dari perpustakaan sklearn.
#Encoding Categorical Variable Gender from sklearn.preprocessing import LabelEncoder LE1 = LabelEncoder() X[:,2] = np.array(LE1.fit_transform(X[:,2])) |
Di sini kami telah menerapkan pengkodean label pada
kolom Gender dari himpunan data kami.
f.
Encoding Negara Variabel Kategoris
Sekarang mari kita berurusan dengan kolom kategoris
lain bernama negara. Kolom ini memiliki kardinalitas 3 yang berarti bahwa ia
memiliki 3 kategori berbeda yang hadir yaitu Prancis, Jerman, Spanyol. Di sini
kita memiliki 2 pilihan: -
1. Kita dapat menggunakan Pengkodean Label di sini dan
langsung mengubah nilai-nilai itu menjadi 0,1,2 seperti itu
2. Kita dapat menggunakan One Hot Encoding di sini yang
akan mengubah string tersebut menjadi aliran vektor biner. Misalnya – Spanyol
akan dikodekan sebagai 001, Prancis akan menjadi 010, dll. Pendekatan pertama
mudah dan lebih cepat diterapkan. Namun, setelah nilai-nilai tersebut
dikodekan, nilai tersebut akan diubah menjadi 0,1,2. Namun, memang ada metode
pengkodean lain yang dikenal sebagai pengkodean satu panas. Dalam satu
pengkodean panas, semua nilai string diubah menjadi aliran biner 0 dan 1.
Pengkodean satu panas memastikan bahwa algoritma pembelajaran mesin tidak
mengasumsikan bahwa angka yang lebih tinggi lebih penting.
#Encoding Categorical variable Geography from sklearn.compose import ColumnTransformer from sklearn.preprocessing import OneHotEncoder ct=ColumnTransformer(transformers=[('encoder',OneHotEncoder(),[1])],remainder="passthrough") X = np.array(ct.fit_transform(X)) |
Di sini kami telah menggunakan kelas OneHotEncoder dari sklearn untuk
melakukan pengkodean satu panas. Sekarang Anda mungkin memiliki pertanyaan di
sini. Gunanya ColumnTransformer adalah kelas lain dalam sklearn yang akan
memungkinkan kita untuk memilih kolom tertentu dari dataset kita di mana kita
dapat menerapkan pengkodean satu-panas.
g.
Memisahkan himpunan data menjadi himpunan data
pelatihan dan pengujian Pada langkah ini, kita akan membagi dataset kita
menjadi dataset pelatihan dan pengujian. Ini adalah salah satu fondasi dari
seluruh proses pembelajaran mesin. Dataset pelatihan adalah salah satu di mana
model kami akan melatih sementara dataset pengujian adalah salah satu di mana
kita akan menguji kinerja model kami.
#Splitting dataset into training and testing dataset from sklearn.model_selection import train_test_split X_train,X_test,Y_train,Y_test = train_test_split(X,Y,test_size=0.2,random_state=0 |
Di sini kita telah menggunakan fungsi train_test_split
dari perpustakaan sklearn. Kami telah membagi dataset kami dalam konfigurasi
sehingga 80 persen data akan ada di sana dalam fase pelatihan dan 20 persen
data akan berada dalam tahap pengujian. Selain itu, bagian terbaik tentang
menggunakan fungsi train_test_split dari sklearn adalah bahwa, sementara
membelah itu juga akan melakukan pengocokan data untuk membuat dataset yang
lebih umum.
h.
Melakukan Penskalaan Fitur
Langkah terakhir dalam fase rekayasa fitur kami adalah
penskalaan fitur. Ini adalah prosedur di mana semua variabel diubah menjadi
skala yang sama. Terkadang dalam himpunan data, variabel tertentu memiliki
nilai yang sangat tinggi sementara variabel tertentu memiliki nilai yang sangat
rendah. Jadi ada kemungkinan bahwa selama pembuatan model, variabel yang
memiliki nilai sangat tinggi mendominasi variabel yang memiliki nilai sangat
rendah. Karena itu, ada kemungkinan bahwa variabel-variabel dengan nilai rendah
mungkin diabaikan oleh model kami, dan karenanya penskalaan fitur diperlukan. Setelah
kita membagi dataset menjadi dataset pelatihan dan pengujian. Alasannya,
dataset pelatihan adalah sesuatu di mana model kami akan melatih atau belajar
sendiri. Sementara dataset pengujian adalah sesuatu di mana model kami akan
dievaluasi. Jika kita melakukan penskalaan fitur sebelum pemisahan uji coba
kereta maka itu akan menyebabkan kebocoran informasi pada dataset pengujian
yang mengabaikan tujuan memiliki dataset pengujian dan karenanya kita harus
selalu melakukan penskalaan fitur setelah pembagian uji coba kereta. Dua teknik
yang paling efisien dalam konteks ini adalah : Standardisasi dan Normalisasi. Setiap
kali standardisasi dilakukan, semua nilai dalam himpunan data akan diubah
menjadi nilai mulai dari -3 hingga +3. Sementara dalam kasus normalisasi, semua
nilai akan diubah menjadi rentang antara -1 hingga +1. Ada beberapa kondisi di
mana teknik untuk digunakan dan kapan. Biasanya, Normalisasi hanya digunakan
ketika dataset kami mengikuti distribusi normal sementara standardisasi adalah
teknik universal yang dapat digunakan untuk dataset apa pun terlepas dari
distribusinya. Di sini kita akan menggunakan standardisasi.
#Performing Feature Scaling from sklearn.preprocessing import StandardScaler sc = StandardScaler() X_train = sc.fit_transform(X_train) X_test = sc.transform(X_test) |
Di sini kami telah menggunakan
kelas StandardScalar dari perpustakaan sklearn untuk melakukan standardisasi. Sekarang
kami telah menyelesaikan fase rekayasa fitur kami. Kita sekarang dapat mulai
dengan penciptaan jaringan saraf tiruan kita dari titik berikutnya dan
seterusnya.
i.
Menginsialisasi Jaringan
Saraf Tiruan Ini adalah langkah pertama saat membuat
ANN. Di sini kita akan membuat objek ann kita dengan menggunakan kelas Keras
tertentu bernama Sequential.
#Initialising ANN ann = tf.keras.models.Sequential() |
Sebagai bagian dari tensorflow 2.0,
Keras sekarang terintegrasi dengan tensorflow dan sekarang dianggap sebagai
sub-library tensorflow. Kelas Sequential adalah bagian dari modul model
perpustakaan Keras yang merupakan bagian dari perpustakaan tensorflow sekarang.
j.
Membuat Lapisan Tersembunyi
Setelah kita menginisialisasi ann kita, kita sekarang
akan membuat lapisan untuk hal yang sama. Di sini kita akan membuat jaringan
yang akan memiliki 2 lapisan tersembunyi, 1 lapisan input, dan 1 lapisan
output. Jadi, mari kita buat lapisan tersembunyi pertama kita
#Adding First Hidden Layer ann.add(tf.keras.layers.Dense(units=6,activation="relu")) |
Di sini kami telah membuat lapisan
tersembunyi pertama kami dengan menggunakan kelas Dense yang merupakan bagian
dari modul lapisan. Kelas ini menerima 2 input: -
1.
unit: - jumlah neuron yang akan hadir di lapisan
masing-masing
2.
aktivasi:- tentukan fungsi aktivasi mana yang akan
digunakan
Untuk input pertama, saya telah menguji dengan banyak nilai di masa lalu
dan nilai optimal yang saya temukan adalah 6. Jelas, kita dapat mencoba dengan
nilai lain karena tidak ada aturan keras tentang jumlah neuron yang harus ada
di lapisan. Untuk input kedua, kita akan selalu menggunakan "relu"
[unit linier yang diperbaiki] sebagai fungsi aktivasi untuk lapisan tersembunyi.
Karena kita akan membuat dua lapisan tersembunyi, langkah yang sama ini akan
kita ulangi untuk pembuatan lapisan tersembunyi kedua juga.
#Adding Second Hidden Layer ann.add(tf.keras.layers.Dense(units=6,activation="relu")) |
Membuat Lapisan Keluaran
Pada langkah ini, kita akan membuat lapisan output kita untuk ann. Lapisan
output akan bertanggung jawab untuk memberikan output.
#Adding Output Layer ann.add(tf.keras.layers.Dense(units=1,activation="sigmoid")) |
Dalam masalah klasifikasi biner (seperti ini) di mana kita hanya akan
memiliki dua kelas sebagai output (1 dan 0), kita hanya akan mengalokasikan
satu neuron untuk menghasilkan hasil ini. Untuk masalah klasifikasi multiclass,
kita harus menggunakan lebih dari satu neuron di lapisan output. Misalnya –
jika output kita berisi 4 kategori maka kita perlu membuat 4 neuron yang berbeda
[satu untuk setiap kategori]. Untuk klasifikasi biner Masalah, fungsi aktivasi
yang harus selalu digunakan adalah sigmoid. Untuk masalah klasifikasi
multiclass, fungsi aktivasi yang harus digunakan adalah softmax. Di sini karena
kita berurusan dengan klasifikasi biner maka kita mengalokasikan hanya satu
neuron di lapisan output dan fungsi aktivasi yang digunakan adalah softmax.
k.
Menyusun Jaringan
Saraf Tiruan Kami sekarang telah membuat lapisan untuk jaringan saraf
kami. Pada langkah ini, kami akan menyusun ANN kami.
#Compiling ANN ann.compile(optimizer="adam",loss="binary_crossentropy",metrics=['accuracy']) |
Kami telah menggunakan metode kompilasi objek ann kami untuk mengkompilasi
jaringan kami. Metode kompilasi menerima input di bawah ini:
1. optimizer: - menentukan pengoptimal mana yang akan
digunakan untuk melakukan penurunan gradien stokastik. Saya telah bereksperimen
dengan berbagai pengoptimal seperti RMSProp, adam dan saya telah menemukan
bahwa adam optimizer adalah yang dapat diandalkan yang dapat digunakan dengan
jaringan saraf apa pun.
2. loss:- menentukan fungsi loss mana yang harus
digunakan. Untuk klasifikasi biner, nilainya harus binary_crossentropy. Untuk
klasifikasi multiclass, itu harus categorical_crossentropy.
3. metrik: - metrik kinerja mana yang akan digunakan untuk
menghitung kinerja. Di sini kami telah menggunakan akurasi sebagai metrik
kinerja.
l.
Pemasangan Jaringan
Saraf Tiruan Ini adalah langkah terakhir dalam proses
pembuatan ann kami. Di sini kita hanya akan melatih ann kami pada dataset
pelatihan.
#Fitting ANN ann.fit(X_train,Y_train,batch_size=32,epochs = 100) |
Di sini kami telah menggunakan metode fit untuk melatih
ann kami. Metode fit adalah menerima 4 input dalam hal ini:
1.
X_train:- Matriks fitur untuk himpunan data pelatihan
2.
Y_train:- Vektor variabel dependen untuk himpunan data
pelatihan
3. batch_size: berapa banyak pengamatan yang harus ada di
batch. Biasanya, nilai untuk parameter ini adalah 32 tetapi kita dapat
bereksperimen dengan nilai lain juga.
4. epochs: Berapa kali jaringan saraf akan dilatih. Di
sini nilai optimal yang saya temukan dari pengalaman saya adalah 100.
Pelatihan Jaringan Saraf Tiruan
Di sini kita dapat melihat bahwa
di setiap zaman kerugian kita menurun dan akurasi kita meningkat. Seperti yang
dapat kita lihat di sini bahwa akurasi akhir kami adalah 86,59 yang cukup luar
biasa untuk jaringan saraf dengan kesederhanaan ini. Kami telah membuat
jaringan saraf tiruan kami dari awal menggunakan Python. Sebagai bonus
tambahan, saya melampirkan kode di bawah ini yang akan memungkinkan kami untuk
melakukan prediksi titik tunggal untuk setiap nilai input khusus.
m.
Memprediksi hasil untuk Pengamatan Titik Tunggal
#Predicting result for Single Observation print(ann.predict(sc.transform([[1, 0, 0, 600, 1, 40, 3, 60000, 2, 1, 1,50000]])) > 0.5) |
Hasil :
Di sini jaringan saraf kami mencoba memprediksi apakah pelanggan kami akan
keluar atau tidak berdasarkan nilai variabel independen. Sekarang di bawah ini
merupakan cara menyimpan jaringan saraf yang sudah buat.
#Saving created neural network ann.save("ANN.h5" |
Menggunakan satu baris kode ini memungkinkan kita untuk menyimpan model ML
kita. Format file h5 adalah format file khusus yang digunakan oleh jaringan
saraf. Dengan menggunakan format ini kita dapat langsung menyimpan jaringan
saraf kita sebagai objek serial. Ini mirip dengan implementasi format file acar
yang kami gunakan untuk menyimpan model pembelajaran mesin tradisional.
Komentar
Posting Komentar