Pengenalan Pola (Pattern Recognition) dengan Perceptron


Pengenalan Pola adalah cabang kecerdasan yang menitik-beratkan pada metode pengklasifikasian objek ke dalam kelas – kelas tertentu untuk menyelesaikan masalah tertentu. Contoh yang dibahas kali ini adalah mengenai penentuan pola angka baru berdasarkan pola angka sebelumnya.
Pada Algoritma Perceptron sebelumnya telah dibahas mengenai prediksi nilai hasil data baru berdasarkan data-data yang sudah ada sebelumnya. Pada kali ini algoritma tersebut akan digunakan dalam pemecahan masalah mengenai pengenalan pola sederhana.



Diasumsikan ada 5 pola angka yang diketahui, yaitu pola angka 1 sampai dengan 5
Diasumsikan 5 pola angka tersebut adalah sebagai berikut:

1111111111111111
11111111
111111111111111
11111
1111111111111111111

Contoh data awal adalah sebagai berikut:

Dim contohData As Integer()() = New Integer(4)() {}
'Pola Angka 1
contohData(0) = New Integer() _
	{0, 1, 1, 0, 0, _
	1, 0, 1, 0, 0, _
	0, 0, 1, 0, 0, _
	0, 0, 1, 0, 0, _
	1, 1, 1, 1, 1, _
	0}

'Pola Angka 2
contohData(1) = New Integer() _
	{0, 1, 1, 1, 0, _
	1, 0, 0, 0, 1, _
	0, 0, 1, 1, 0, _
	0, 1, 0, 0, 0, _
	1, 1, 1, 1, 1, _
	0}

'Pola Angka 3
contohData(2) = New Integer() _
	{1, 1, 1, 1, 0, _
	0, 0, 0, 0, 1, _
	1, 1, 1, 1, 0, _
	0, 0, 0, 0, 1, _
	1, 1, 1, 1, 0, _
	0}

'Pola Angka 4
contohData(3) = New Integer() _
	{0, 0, 0, 1, 1, _
	0, 0, 1, 0, 1, _
	0, 1, 1, 1, 1, _
	0, 0, 0, 0, 1, _
	0, 0, 0, 0, 1, _
	1}

'Pola Angka 5
contohData(4) = New Integer() _
	{1, 1, 1, 1, 1, _
	1, 0, 0, 0, 0, _
	1, 1, 1, 1, 0, _
	0, 0, 0, 0, 1, _
	1, 1, 1, 1, 0, _
	0}



Selanjutnya ada pola baru yang ingin diketahui hasilnya
Maka tentukan pola baru ini cocok dengan pola yang mana saja
Diasumsikan pola baru adalah sebagai berikut:

111111
111
1111
11
11111111

Contoh data baru yang akan dihitung adalah sebagai berikut:

Dim dataBaru As Integer()() = New Integer(1)() {}
'Pola Baru 1
dataBaru(0) = New Integer() _
	{0, 1, 1, 1, 0, _
	1, 0, 0, 0, 1, _
	0, 0, 1, 1, 0, _
	0, 1, 0, 0, 0, _
	1, 1, 1, 1, 0}

'Pola Baru 2
dataBaru(1) = New Integer() _
	{0, 1, 1, 1, 0, _
	0, 0, 0, 0, 1, _
	0, 0, 1, 1, 0, _
	0, 1, 0, 0, 0, _
	1, 1, 1, 1, 0}



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

* Tentukan batas nilai kesalahan yang paling rendah
Jika nilai kesalahan yang ditemukan sudah kurang dari nilai ini, maka perhitungan akan dihentikan
Diasumsikan dalam kasus ini, batas nilai kesalahan yang paling rendah adalah 0.00001

Const batasnilaiKesalahanMinimal As Double = 0.00001

Langkah-langkah penggunaan algoritma ini adalah

1. Lakukan proses pencarian matriks bobot terbaik untuk masing-masing pola angka

1a. Tentukan nilai bobot dan bias pada masing-masing pola angka

1a1. Hitung nilai delta yaitu selisih perhitungan antara kolom terakhir pola angka dengan hasil perhitungan kolom akhir pola angka tersebut

Dim hasilData As Integer = contohData(j)(contohData(j).Length - 1)
Dim hasilPerhitungan As Integer = hitungNilaihasilPerhitungan(contohData(j), bobot, bias)
Dim delta As Integer = hasilData - hasilPerhitungan

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

For k As Integer = 0 To bobot.Length - 1
	bobot(k) += (alpha * delta * contohData(j)(k))
Next

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

bias += (alpha * delta)

1b. Setelah menemukan matriks bobot, maka hitung total nilai kesalahan untuk matriks bobot ini

1b1. Hitung nilai delta yaitu selisih perhitungan antara kolom terakhir pola angka dengan hasil perhitungan kolom akhir pola angka tersebut

Dim hasilData As Integer = contohData(j)(contohData(j).Length - 1)
Dim hasilPerhitungan As Integer = hitungNilaihasilPerhitungan(contohData(j), bobot, bias)
Dim delta As Integer = hasilData - hasilPerhitungan

1b2. Hitung nilai total, yaitu jumlah dari delta * delta

total += delta * delta

1b3. Total nilai kesalahan adalah nilai total dibagi 2
Apabila total nilai kesalahan sudah kurang dari batas nilai kesalahan minimal, maka hentikan perhitungan

totalNilaiKesalahan = 0.5 * total

2. Untuk masing-masing pola baru,
Lakukan perhitungan prediksi dari data baru menggunakan nilai bobot dan bias terbaik yang sudah ditemukan pada masing-masing pola angka

Dim prediksi As Integer = hitungNilaihasilPerhitungan(dataBaru(i), bobotTerbaik(j), biasTerbaik(j), True)

* Gunakan fungsi ini untuk menghitung prediksi dari data yang tersedia
Penjelasan lebih detail tentang fungsi ini dapat dilihat pada penjelasan skrip dibawah ini

Public Function hitungNilaihasilPerhitungan(data As Integer(), bobot As Double(), bias As Double, Optional ByVal isPrediksi As Boolean = False) As Integer
	'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 - IIf(isPrediksi, 1, 2)
		dp += (data(j) * bobot(j))
	Next

	'Kemudian tambahkan nilai bias pada nilai tersebut
	dp += bias

	'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
End Function

Hasil akhir adalah: (klik untuk perbesar gambar)

cmd51

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 *