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:
Pelanggan | Umur | Jenis Kelamin | Skor Kepribadian | Hasil |
---|---|---|---|---|
Pelanggan A | 44 | Laki-laki | 3.55 | Diterima |
Pelanggan B | 52 | Perempuan | 4.71 | Diterima |
Pelanggan C | 60 | Perempuan | 6.56 | Ditolak |
Pelanggan D | 56 | Laki-laki | 6.8 | Ditolak |
Pelanggan E | 51 | Laki-laki | 6.94 | Ditolak |
Pelanggan F | 46 | Perempuan | 6.52 | Ditolak |
Pelanggan G | 48 | Laki-laki | 4.25 | Diterima |
Pelanggan H | 58 | Perempuan | 5.71 | Diterima |
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 I | 47 | Perempuan | 6.05 |
Pelanggan J | 52 | Laki-Laki | 5 |
Pelanggan K | 48 | Perempuan | 4.5 |
Pelanggan L | 42 | Laki-Laki | 5.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)
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.