Algoritma Perceptron


Algoritma Perceptron adalah salah satu algoritma berbasis jaringan saraf yang dapat digunakan untuk pengambilan keputusan. Contoh yang dibahas kali ini adalah mengenai penentuan penerimaan pengajuan kredit sepeda motor baru berdasarkan kelompok data yang sudah ada.
Algoritma ini merupakan algoritma pendahulu dari Algoritma JST (Jaringan Saraf Tiruan). Algoritma JST dapat dikatakan sebagai kumpulan dari beberapa Perceptron yang saling terhubung. Sehingga dengan memahami algoritma ini, Anda akan memiliki pengetahuan dasar mengenai jaringan saraf tiruan yang sederhana, sehingga memudahkan untuk mempelajari jaringan saraf tiruan yang sebenarnya.



Diasumsikan ada 8 data pelanggan yang sudah diketahui datanya, yaitu Pelanggan A,B,C,D,E,F,G,H
Masing-masing pelanggan memiliki kriteria, yaitu umur, jenis kelamin, skor kepribadian, dan memiliki nilai hasil yaitu Diterima / Ditolak
Diasumsikan 8 data tersebut adalah sebagai berikut:

PelangganUmurJenis KelaminSkor KepribadianHasil
Pelanggan A44Laki-laki3.55Diterima
Pelanggan B52Perempuan4.71Diterima
Pelanggan C60Perempuan6.56Ditolak
Pelanggan D56Laki-laki6.8Ditolak
Pelanggan E51Laki-laki6.94Ditolak
Pelanggan F46Perempuan6.52Ditolak
Pelanggan G48Laki-laki4.25Diterima
Pelanggan H58Perempuan5.71Diterima

Contoh data awal adalah sebagai berikut:
Untuk Kriteria Jenis Kelamin:
Laki-laki dilambangkan dengan angka -1
Perempuan dilambangkan dengan angka +1
Untuk kriteria Nilai Hasil:
Jika kondisi Diterima, maka inputan data kolom adalah 1
Jika kondisi Ditolak, maka inputan data kolom adalah 0

Dim data(9)() As Double
data(0) = New Double() {44, -1, 3.55, 1}
data(1) = New Double() {52, +1, 4.71, 1}
data(2) = New Double() {60, +1, 6.56, 0}
data(3) = New Double() {56, -1, 6.8 , 0}
data(4) = New Double() {51, -1, 6.94, 0}
data(5) = New Double() {46, +1, 6.52, 0}
data(6) = New Double() {48, -1, 4.25, 1}
data(7) = New Double() {58, +1, 5.71, 1}



Selanjutnya ada 2 orang pelanggan baru yang mengajukan kredit sepeda motor
Maka tentukan pelanggan ini nantinya akan termasuk dalam kelompok Diterima / Ditolak
Diasumsikan data awalnya adalah sebagai berikut:

Pelanggan I47Perempuan6.05
Pelanggan J52Laki-Laki5
Pelanggan K48Perempuan4.5
Pelanggan L42Laki-Laki5.5

Contoh data baru adalah sebagai berikut:
Untuk kriteria Nilai Hasil:
Karena belum diketahui nilai hasilnya, maka semua inputan data adalah -1

data(8) = New Double() {47, +1, 6.05, -1}
data(9) = New Double() {52, -1, 5, -1}



Sebelum masuk kedalam langkah-langkah pembahasan algoritma, ada beberapa konstanta atau parameter yang harus diketahui, yaitu:
* Tentukan jumlah maksimal perulangan / epoch yang digunakan dalam perhitungan
Diasumsikan dalam kasus ini, jumlah maksimal perulangan adalah 100 kali

Const maksEpoch As Integer = 100

* Tentukan nilai alpha sebagai rasio pembelajaran untuk digunakan pada perhitungan matriks bobot
Semakin besar nilainya, maka semakin cepat nilai bobot akan berubah-ubah
Diasumsikan dalam kasus ini, rasio pembelajaran adalah 0.0075

Const alpha As Double = 0.075

Langkah-langkah penggunaan algoritma ini adalah

1. Lakukan normalisasi data untuk kriteria Umur dan Skor Kepribadian
Penjelasan lebih lanjut dapat dilihat pada penjelasan skrip dibawah ini (poin 1a – 1c)

1a. Hitung nilai rata-rata tiap-tiap kolom
yaitu dengan rumus: jumlah semua data dibagi dengan jumlah datanya

Dim total As Double = 0.0
For r = 0 To jumlahBaris - 1
	total += data(r)(c)
Next r
Dim rata2 As Double = total / jumlahBaris
hasil(0)(c) = rata2

1b. Hitung nilai standar deviasi tiap-tiap kolom
yaitu dengan rumus: akar dari ((kuadrat dari (jumlah dari (data – rata-rata))) / jumlah data)

Dim totalKuadrat As Double = 0.0
For r = 0 To jumlahBaris - 1
	totalKuadrat += (data(r)(c) - rata2) * (data(r)(c) - rata2)
Next r
Dim stdDev As Double = Math.Sqrt(totalKuadrat / jumlahBaris)
hasil(1)(c) = stdDev

1c. Normalisasi data dihitung dengan rumus (data – (rata-rata kriteria tersebut)) / standar deviasi kriteria tersebut

For c = 0 To kolom.Length - 1
	Dim j As Integer = kolom(c)
	Dim rata2 As Double = hasil(0)(j)
	Dim stdDev As Double = hasil(1)(j)

	For i = 0 To jumlahBaris - 1
		data(i)(j) = (data(i)(j) - rata2) / stdDev
	Next i
Next c

* Lakukan proses pencarian matriks bobot terbaik untuk masing-masing pola angka

2. Lakukan perulangan sebanyak jumlah maksimal perulangan yang ada

Dim epoch As Integer = 0
While epoch < maksEpoch
	epoch += 1
	. . .

2a. Lakukan perhitungan pada masing-masing contoh data (poin 2a1 – 2a7)

For i As Integer = 0 To contohData.Length - 1
. . .

2a1. Hitung hasil data apabila dihitung menggunakan matriks bobot
Penjelasan lebih detail tentang fungsi ini akan dijelaskan pada perhitungan dibawah ini

Dim hasilPerhitungan As Integer = hitungNilaiOutput(contohData(i), bobot, bias)

Memasuki perhitungan pada fungsi hitungNilaiOutput

2a1a. Hitung nilai dp, yaitu jumlah dari perkalian antara masing-masing data baru dengan bobot nya

Dim dp As Double = 0.0
For j As Integer = 0 To data.Length - 2
	dp += data(j) * bobot(j)
Next

2a1b. Kemudian tambahkan nilai bias pada nilai tersebut

dp += bias

2a1c. Jika dp bernilai lebih dari 0.5, maka nilai prediksi adalah 1
Jika dp bernilai kurang dari 0.5, maka nilai prediksi adalah 0

If dp > 0.5 Then
	Return 1
Else
	Return 0
End If

2a2. Bandingkan hasil perhitungan dengan hasil data yang sebenarnya
Apabila nilainya tidak sama, maka lakukan perhitungan berikutnya untuk melakukan penyesuaian nilai bobot dan bias

Dim hasilData As Integer = contohData(i)(contohData(i).Length - 1)
If hasilPerhitungan <> hasilData Then
. . .

2a3. Hitung nilai delta yaitu selisih perhitungan antara hasil data dengan hasil perhitungan

Dim delta As Double = hasilData - hasilPerhitungan

2a4. Hitung nilai bobot pada masing-masing data dengan rumus:
bobot = alpha * delta * nilai hasil contoh data (0 atau 1)

For j As Integer = 0 To jumlahBobot
	bobot(j) += (alpha * delta * contohData(i)(j))
Next

2a5. Kemudian tambahkan nilai bias pada nilai bobot tersebut
Nilai bias dihitung dengan rumus:
bias = alpha * delta

bias += (alpha * delta)

2a6. Setelah melakukan penyesuaian matriks bobot, maka hitung total kesalahan untuk matriks bobot ini (poin 2a6a – 2a6c)

Dim nilaiKesalahan As Double = 0.0
For j As Integer = 0 To contohData.Length - 1
. . .

2a6a. Hitung nilai total yaitu jumlah dari perkalian antara masing-masing data dengan bobot nya

Dim total As Double = 0.0
For k As Integer = 0 To contohData(j).Length - 2
	total += contohData(j)(k) * bobot(k)
Next

2a6b. Kemudian tambahkan nilai bias pada nilai tersebut

total += bias

2a6c. Nilai kesalahan dihitung dengan rumus
Err = E (0.5 * (total – Y(i)) * (total – Y(i)))
Dimana Y(i) adalah nilai hasil pada masing-masing contoh data

nilaiKesalahan += 0.5 * (total - contohData(j)(contohData(j).Length - 1)) * (total - contohData(j)(contohData(j).Length - 1))

2a7. Apabila nilai kesalahan tersebut kurang dari nilai kesalahan terbaik maka ambil nilai bobot dan bias sebagai nilai terbaik

If nilaiKesalahan < nilaiKesalahanTerbaik Then
	nilaiKesalahanTerbaik = nilaiKesalahan
	Array.Copy(bobot, bobotTerbaik, bobot.Length)
	biasTerbaik = bias
End If

3. Lakukan perhitungan dari masing-masing contoh data menggunakan nilai bobot dan nilai bias yang sudah ditemukan
Penjelasan tentang fungsi ini sudah dijelaskan pada perhitungan sebelumnya

Dim output As Double = hitungNilaiOutput(contohData(i), bobotTerbaik, biasTerbaik)
Console.Write(output.ToString("F4") & " ")

4. Jika nilai output bernilai kurang dari 0.5 maka pelanggan tersebut memiliki nilai hasil Ditolak
Jika nilai output bernilai lebih dari 0.5 maka pelanggan tersebut memiliki nilai hasil Diterima
Kemudian bandingkan nilai output dengan nilai hasil pada contoh data
Jika hasilnya sudah sama, maka catat data ini kedalam jumlah data benar
Jika hasilnya tidak sama, maka catat data ini kedalam jumlah data salah

If output <= 0.5 Then
	Console.Write("-> Ditolak   ")
	If contohData(i)(jumlahKolom - 1) = 0 Then
		jumlahBenar += 1
		Console.WriteLine("Benar")
	ElseIf contohData(i)(jumlahKolom - 1) <> 0 Then
		jumlahSalah += 1
		Console.WriteLine("Salah")
	End If
Else
	Console.Write("-> Diterima  ")
	If contohData(i)(jumlahKolom - 1) = 0 Then
		jumlahSalah += 1
		Console.WriteLine("Salah")
	ElseIf contohData(i)(jumlahKolom - 1) <> 0 Then
		jumlahBenar += 1
		Console.WriteLine("Benar")
	End If
End If

5. Catat tingkat kecocokan perhitungan data dengan hasil awal pada data
Langkah ini tidak wajib, hanya untuk mengetahui seberapa besar tingkat kecocokan perhitungan untuk data baru yang akan dihitung selanjutnya

Console.WriteLine("Jumlah perhitungan benar = " & jumlahBenar & ", jumlah perhitungan salah = " & jumlahSalah)
Console.WriteLine("Tingkat kecocokan perhitungan dengan hasil data adalah " & (jumlahBenar / (jumlahBenar + jumlahSalah)).ToString("F2"))

6. Lakukan perhitungan yang sama (poin 3 dan 4) untuk masing-masing data baru

Console.WriteLine("Pelanggan    Data Normalisasi   Hasil Perhitungan")
For i As Integer = 0 To dataBaru.Length - 1
	Console.Write("Pelanggan " & Chr(i + 65 + 8) & "  ")

	Dim input(jumlahKolom - 2) As Double
	Array.Copy(dataBaru(i), input, jumlahKolom - 1)
	For j = 0 To input.Length - 1
		Console.Write(IIf(input(j) >= 0, " ", "") & input(j).ToString("F2") & " ")
	Next j
	Console.Write(" ")

	Dim output As Double = hitungNilaiOutput(dataBaru(i), bobotTerbaik, biasTerbaik)
	Console.Write(output.ToString("F4") & " ")

	If output <= 0.5 Then
		Console.Write("-> Ditolak ")
	Else
		Console.Write("-> Diterima")
	End If
	Console.WriteLine("")
Next

Hasil akhir adalah: (klik untuk perbesar gambar)

cmd52a

Contoh modul / source code dalam bahasa VB (Visual Basic) dapat didownload disini:



Jika membutuhkan jasa kami dalam pembuatan program, keterangan selanjutnya dapat dilihat di Fasilitas dan Harga
Jika ada yang kurang paham dengan langkah-langkah algoritma diatas, silahkan berikan komentar Anda.
Selamat mencoba.

Tinggalkan sebuah komentar

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *