ANN sederhana v2. Lihat cara kerja dengan Keras dan… | by RB Fajriya Hakim | Oct, 2023


Lihat cara kerja dengan Keras dan TensorFlow

Assalamu’alaikum teman-teman yang suka data

Kita coba dari data yang kita punya sebelumnya,

Usia | Penghasilan | Label
-----|-------------|------
25 | 50000 | 1
30 | 60000 | 1
20 | 30000 | 0
35 | 80000 | 1

Kita memiliki dua fitur (usia dan penghasilan) sebagai input dan satu label sebagai output. Pertama, kita perlu membagi dataset menjadi input (X) dan label (y). Di sini, kita perlu mengonversi label menjadi bentuk biner, karena kita melakukan tugas klasifikasi biner, kita dapat menggunakan `to_categorical` dari Keras untuk ini:

import numpy as np
from keras.utils import to_categorical

# Data
X = np.array([[25, 50000], [30, 60000], [20, 30000], [35, 80000]])
y = np.array([1, 1, 0, 1])

# Konversi label menjadi one-hot encoding
y = to_categorical(y, num_classes=2)

Kemudian, kita dapat membuat model Keras dan melatihnya, berikut adalah contoh model ANN sederhana dengan Keras:

from keras.models import Sequential
from keras.layers import Dense

# Membangun model
model = Sequential()
model.add(Dense(3, input_dim=2, activation='relu'))
model.add(Dense(2, activation='softmax'))

# Kompilasi model
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

# Pelatihan model
model.fit(X, y, epochs=100, batch_size=2, verbose=1)

Setelah kita melatih model, kita dapat menggunakannya untuk membuat prediksi seperti ini:

# Data pengujian
X_test = np.array([[28, 55000], [22, 32000]])
y_pred = model.predict(X_test)

print("Hasil Prediksi:")
print(y_pred)

Dalam kode di atas, kita menggunakan model dengan dua lapisan (3 neuron pada lapisan tersembunyi dan 2 neuron pada lapisan output) untuk melakukan klasifikasi. Data output (label) telah dikonversi menjadi one-hot encoding karena ini adalah tugas klasifikasi multikelas. kita dapat menggantinya sesuai dengan jenis tugas klasifikasi yang kita miliki (biner atau multikelas).

sehingga arsitektur jaringan yang terbentuk adalah seperti berikut,

Bagaimana jika label diganti dengan “beli” dan “tidak beli”?

Jika kita ingin menggunakan label “beli” dan “tidak beli” alih-alih representasi numerik, kita perlu mengubah label ini menjadi format yang dapat diterima oleh model Keras. Kita bisa menggunakan pendekatan seperti one-hot encoding untuk label kategori ini.

Berikut adalah kodingnya

import numpy as np
from keras.utils import to_categorical
from sklearn.preprocessing import LabelEncoder

# Data
X = np.array([[25, 50000], [30, 60000], [20, 30000], [35, 80000]])
y = np.array(["beli", "beli", "tidak beli", "beli"])

# Konversi label menjadi numerik dengan LabelEncoder
label_encoder = LabelEncoder()
y = label_encoder.fit_transform(y)

# Konversi label numerik menjadi one-hot encoding
y = to_categorical(y, num_classes=2)

Kemudian, kita dapat membangun dan melatih model Keras seperti yang dijelaskan dalam contoh sebelumnya. Hanya saja dalam kasus ini, label kategori “beli” dan “tidak beli” telah dikonversi menjadi bentuk one-hot encoding.

Jadi, kita akan memiliki dua neuron pada lapisan output dengan aktivasi softmax, yang akan memberikan probabilitas “beli” atau “tidak beli” sebagai hasil prediksi. Seiring dengan pelatihan model, kita juga perlu mengonversi hasil prediksi kembali ke format label “beli” atau “tidak beli” menggunakan invers dari `LabelEncoder` setelah melakukan prediksi.

Bagaimana jika pada lapisan output hanya dibuat tugas klasifikasi biner seperti “beli” atau “tidak beli”?,

Berarti kita hanya memerlukan satu neuron pada lapisan output. Jadi, jika kita ingin mempertahankan format label “beli” atau “tidak beli” alih-alih one-hot encoding, kita dapat menggunakan satu neuron pada lapisan output dengan aktivasi sigmoid. Berikut adalah bagaimana kita bisa melakukannya:

import numpy as np
from keras.models import Sequential
from keras.layers import Dense

# Data
X = np.array([[25, 50000], [30, 60000], [20, 30000], [35, 80000]])
y = np.array(["beli", "beli", "tidak beli", "beli"])

# Membangun model
model = Sequential()
model.add(Dense(8, input_dim=2, activation='relu'))
model.add(Dense(1, activation='sigmoid'))

# Kompilasi model
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

# Konversi label menjadi 0 dan 1
y = np.where(y == "beli", 1, 0)

# Pelatihan model
model.fit(X, y, epochs=100, batch_size=2, verbose=1)

Dalam kode di atas, kita menggunakan satu neuron pada lapisan output dengan aktivasi sigmoid untuk melakukan klasifikasi biner. Kita tidak perlu menggunakan one-hot encoding dalam tugas klasifikasi biner seperti ini. Label “beli” dikonversi menjadi 1 dan label “tidak beli” dikonversi menjadi 0. Model akan memberikan hasil prediksi dalam bentuk probabilitas, yang dapat kita ambil sebagai output akhir.

import numpy as np
from keras.models import Sequential
from keras.layers import Dense

# Data
X = np.array([[25, 50000], [30, 60000], [20, 30000], [35, 80000]])
y = np.array(["beli", "beli", "tidak beli", "beli"])

# Membangun model
model = Sequential()
model.add(Dense(3, input_dim=2, activation='relu'))
model.add(Dense(1, activation='sigmoid'))

# Kompilasi model
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

# Konversi label menjadi 0 dan 1
y = np.where(y == "beli", 1, 0)

# Pelatihan model
model.fit(X, y, epochs=100, batch_size=2, verbose=1)

# Data baru yang akan diprediksi
new_data = np.array([[40, 70000], [28, 55000]])

# Melakukan prediksi
predictions = model.predict(new_data)

# Menginterpretasikan hasil prediksi (misalnya, dengan ambang batas 0.5 untuk klasifikasi biner)
class_predictions = (predictions > 0.5).astype(int)

# Menampilkan hasil prediksi
for i in range(len(new_data)):
print(f"Data: {new_data[i]}, Prediksi: {class_predictions[i]}")

berikut arsitektur jaringan yang dibentuk,

bagaimana menurut anda perbedaan arsitektur jaringan untuk menyelesaikan permasalahan tersebut?

Terimakasih



Source link

Be the first to comment

Leave a Reply

Your email address will not be published.


*