Regresi Logistik dengan teknik MSO (Multi Swarm Optimization) 1


Regresi logistik / model logit, dalam statistika digunakan untuk prediksi probabilitas kejadian suatu peristiwa. Contoh yang dibahas kali ini adalah mengenai penentuan penerimaan pengajuan kredit sepeda motor baru berdasarkan kelompok data yang sudah ada.
Algoritma ini adalah variasi lain dari Regresi logistik dengan teknik Newton-Raphson yang sudah pernah dibahas sebelumnya. Pada contoh sebelumnya, teknik pembelajaran yang digunakan adalah teknik Newton-Raphson. Sedangkan pada pembahasan kali ini, teknik MSO (Multi Swarm Optimization) akan digunakan sebagai teknik pembelajaran.



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

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}

Langkah-langkah penggunaan algoritma ini adalah

1. Lakukan normalisasi data untuk kriteria Umur dan Skor Kepribadian
Normalisasi data dihitung dengan rumus (data – (rata-rata kriteria tersebut)) / standar deviasi kriteria tersebut
Rata-rata adalah jumlah semua data dibagi dengan jumlah datanya
Standar deviasi adalah akar dari ((kuadrat dari (jumlah dari (data – rata-rata))) / jumlah data)
Penjelasan lebih lanjut dapat dilihat pada penjelasan skrip dibawah ini

Dim kolom() As Integer = {0, 2}
Dim jumlahBaris As Integer = data.Length
Dim jumlahKolom As Integer = data(0).Length

Dim hasil(1)() As Double ' [0] = rata-rata, [1] = standar deviasi
For i = 0 To 1
	hasil(i) = New Double(jumlahKolom - 1) {}
Next i

For c = 0 To jumlahKolom - 1
	'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

	'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
Next c

For c = 0 To kolom.Length - 1
	Dim j As Integer = kolom(c) ' kolom yang dinormalisasi
	Dim rata2 As Double = hasil(0)(j) ' nilai rata-rata untuk kolom tersebut
	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

2. Tentukan jumlah swarm yang digunakan dalam perhitungan
Diasumsikan dalam kasus ini, jumlah swarm yang digunakan adalah 4 swarm

Const jumlahSwarm As Integer = 4

3. Tentukan jumlah partikel yang digunakan oleh masing-masing swarm
Diasumsikan dalam kasus ini, jumlah partikel yang digunakan adalah 3 partikel

Const jumlahPartikel As Integer = 3

4. Tentukan jumlah perulangan / epoch yang digunakan oleh setiap partikel untuk melakukan proses
Diasumsikan dalam kasus ini, jumlah perulangan / epoch yang digunakan adalah 100 kali

Const maksEpoch As Integer = 100

5. Lakukan proses perhitungan matriks bobot terbaik
Teknik yang digunakan dalam perhitungan ini adalah teknik MSO (Multi Swarm Optimization)
Penjelasan tentang fungsi tersebut akan dibahas pada perhitungan dibawah (poin 5a – 5k)

Dim bobotTerbaik() As Double = rl.prosesPerhitungan(contohData, jumlahSwarm, jumlahPartikel, maksEpoch)

5a. Tentukan dimensi permasalahan
Kolom dimensi akan ditambah dengan 1, karena indeks 0 adalah untuk menghitung b0 atau konstanta
Diasumsikan dalam kasus ini, dimensi bernilai 4 karena ada 3 dimensi yang akan dicari solusinya + 1 untuk menghitung b0

Dim dimensi As Integer = jumlahKriteria + 1

5b. Tentukan batas posisi minimal dan maksimal dari sebuah partikel
Nilai batas ini dimaksudkan agar posisi yang dicari tidak terlalu menyimpang keluar dari jalur
Diasumsikan dalam kasus ini, batas minimal posisi adalah -10 dan batas maksimal posisi adalah +10

Dim minX As Double = -10.0
Dim maksX As Double = 10.0

5c. Tentukan batas kecepatan minimal dan maksimal dari sebuah partikel
Nilai batas ini dimaksudkan agar perpindahan posisi yang dicari tidak terlalu cepat sekali berpindah-pindah
Diasumsikan dalam kasus ini, batas minimal kecepatan adalah -1 dan batas maksimal kecepatan adalah +1

Dim minKecepatan As Double = -1.0
Dim maksKecepatan As Double = 1.0

5d. Inisialisasi semua komponen yang dibutuhkan dalam perhitungan, yaitu partikel, swarm, dan multiswarm
Buat matriks Multiswarm sebanyak variabel jumlahSwarm
Buat matriks Swarm sebanyak variabel jumlahPartikel, dan masukkan masing-masing Swarm ke dalam matriks MultiSwarm
Buat partikel sebanyak variabel jumlahSwarm * jumlahPartikel, dan masukkan masing-masing Partikel ke dalam matriks Swarm
Beri nilai posisi partikel awal dengan posisi acak
Kemudian beri nilai kecepatan acak pada partikel tersebut
Penjelasan lebih detail dapat dilihat pada penjelasan skrip Class dibawah ini

Dim ms As New MultiSwarm(jumlahSwarm, jumlahPartikel, dimensi, minX, maksX, minKecepatan, maksKecepatan)

* Agar dapat menjalankan skrip diatas, maka diperlukan 3 Class Tambahan yaitu Class Partikel, Swarm, dan Multiswarm.
Class Partikel berisi data seperti posisi, kecepatan, nilai kesalahan, posisi partikel terbaik, dan nilai kesalahan partikel terbaik.
Class Swarm berisi data seperti daftar partikel, posisi swarm terbaik, dan nilai kesalahan swarm terbaik.
Class Multiswarm berisi data seperti daftar swarm, posisi multiswarm terbaik, dan nilai kesalahan multiswarm terbaik
Deklarasi Ketiga Class diatas adalah sebagai berikut:

Private Class Partikel
	Private Shared rnd As New Random(0)
	Public posisi() As Double
	Public kecepatan() As Double
	Public nilaiKesalahan As Double
	Public posisiTerbaik() As Double
	Public nilaiKesalahanTerbaik As Double

	Public Sub New(ByVal dimensi As Integer, _
				   ByVal minX As Double, ByVal maksX As Double, ByVal minKecepatan As Double, ByVal maksKecepatan As Double)
		posisi = New Double(dimensi - 1) {}
		kecepatan = New Double(dimensi - 1) {}
		posisiTerbaik = New Double(dimensi - 1) {}
		For k = 0 To dimensi - 1
			posisi(k) = (maksX - minX) * rnd.NextDouble + minX
			kecepatan(k) = (maksKecepatan - minKecepatan) * rnd.NextDouble + minKecepatan
		Next k
		nilaiKesalahan = Double.MaxValue
		nilaiKesalahanTerbaik = nilaiKesalahan
		Array.Copy(posisi, posisiTerbaik, dimensi)
	End Sub
End Class

Private Class Swarm
	Public daftarPartikel() As Partikel
	Public posisiSwarmTerbaik() As Double
	Public nilaiKesalahanSwarmTerbaik As Double

	Public Sub New(ByVal jumlahPartikel As Integer, ByVal dimensi As Integer, _
				   ByVal minX As Double, ByVal maksX As Double, ByVal minKecepatan As Double, ByVal maksKecepatan As Double)
		daftarPartikel = New Partikel(jumlahPartikel - 1) {}
		For i = 0 To jumlahPartikel - 1
			daftarPartikel(i) = New Partikel(dimensi, minX, maksX, minKecepatan, maksKecepatan)
		Next i
		posisiSwarmTerbaik = New Double(dimensi - 1) {}
		nilaiKesalahanSwarmTerbaik = Double.MaxValue
	End Sub
End Class

Private Class MultiSwarm
	Public daftarSwarm() As Swarm
	Public posisiMultiSwarmTerbaik() As Double
	Public nilaiKesalahanMultiSwarmTerbaik As Double

	Public Sub New(ByVal jumlahSwarm As Integer, ByVal jumlahPartikel As Integer, ByVal dimensi As Integer, _
				   ByVal minX As Double, ByVal maksX As Double, ByVal minKecepatan As Double, ByVal maksKecepatan As Double)
		daftarSwarm = New Swarm(jumlahSwarm - 1) {}
		For i = 0 To jumlahSwarm - 1
			daftarSwarm(i) = New Swarm(jumlahPartikel, dimensi, minX, maksX, minKecepatan, maksKecepatan)
		Next i
		posisiMultiSwarmTerbaik = New Double(dimensi - 1) {}
		nilaiKesalahanMultiSwarmTerbaik = Double.MaxValue
	End Sub
End Class

5e. Tentukan nilai kesalahan terendah (terbaik) sementara untuk posisi acak tersebut
Bandingkan semua nilai kesalahan pada masing-masing partikel, ambil nilai kesalahan terendah (terbaik)
Kemudian tentukan nilai kesalahan terendah pada masing-masing swarm
Dan terakhir, bandingkan nilai kesalahan terendah antar swarm untuk mendapatkan nilai kesalahan terendah pada multiswarm

For i = 0 To jumlahSwarm - 1
	For j = 0 To jumlahPartikel - 1
		Dim p As Partikel = ms.daftarSwarm(i).daftarPartikel(j)
		p.nilaiKesalahan = hitungNilaiKesalahan(contohData, p.posisi) ' add error
		p.nilaiKesalahanTerbaik = p.nilaiKesalahan
		Array.Copy(p.posisi, p.posisiTerbaik, dimensi)
		If p.nilaiKesalahan < ms.daftarSwarm(i).nilaiKesalahanSwarmTerbaik Then ' swarm best?
			ms.daftarSwarm(i).nilaiKesalahanSwarmTerbaik = p.nilaiKesalahan
			Array.Copy(p.posisi, ms.daftarSwarm(i).posisiSwarmTerbaik, dimensi)
		End If
		If p.nilaiKesalahan < ms.nilaiKesalahanMultiSwarmTerbaik Then ' global best?
			ms.nilaiKesalahanMultiSwarmTerbaik = p.nilaiKesalahan
			Array.Copy(p.posisi, ms.posisiMultiSwarmTerbaik, dimensi)

			indeksPosisiTerbaik(0) = i
			indeksPosisiTerbaik(1) = j
		End If
	Next j
Next i

* Gunakan Fungsi ini untuk menghitung nilai kesalahan
teknik yang digunakan adalah teknik Mean Squared Error
dihitung dengan rumus jumlah dari (kuadrat dari (nilai jawaban – nilai hasil pada matriks data)) / jumlah data
Nilai jawaban yang baru bisa jadi mengembalikan nilai MSE yang lebih tinggi, sehingga nilai jawaban ini tidak bisa dipakai

Public Function hitungNilaiKesalahan(ByVal contohData As Double()(), ByVal bobot() As Double) As Double
	Dim indeksKriteriaHasil As Integer = contohData(0).Length - 1
	Dim hasil As Double = 0.0
	For i = 0 To contohData.Length - 1
		Dim hasilPerhitungan As Double = hitungNilaiOutput(contohData(i), bobot)
		Dim hasilData As Double = contohData(i)(indeksKriteriaHasil)
		hasil += (hasilPerhitungan - hasilData) * (hasilPerhitungan - hasilData)
	Next i
	Return hasil / contohData.Length
End Function

5f. Tentukan bobot inertia (w), bobot kognitif (c1), bobot sosial (c2), dan bobot global (c3)
Nilai acuan untuk masing-masing variabel dapat dilihat di http://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=00870279
Diasumsikan dalam kasus ini, nilai bobot tersebut akan mengikuti nilai acuan yang sudah ada

Const w As Double = 0.729
Const c1 As Double = 1.49445
Const c2 As Double = 1.49445
Const c3 As Double = 0.3645

5g. Tentukan probabilitas sebuah partikel akan dibuang dan dibuat ulang
Diasumsikan dalam kasus ini, nilai probabilitas tersebut adalah 0.01

Const probBuatBaru As Double = 0.01

5h. Tentukan probabilitas sebuah partikel akan bertukar dengan partikel acak dalam swarm acak
Diasumsikan dalam kasus ini, nilai probabilitas tersebut adalah 0.005

Const probTukarPartikel As Double = 0.005

5i. Lakukan proses pencarian posisi terbaik sebanyak jumlah perulangan (poin 5j dan 5k)

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

5j. Pada setiap kali perhitungan untuk swarm berikutnya, lakukan pengacakan urutan partikel pada masing-masing swarm
Sehingga perhitungan data tidak dimulai dari indeks partikel terendah sampai ke indeks tertinggi

For j = 0 To urutanPartikel.Length - 1
	Dim r As Integer = rnd.Next(j, urutanPartikel.Length)
	Dim tmp As Integer = urutanPartikel(r)
	urutanPartikel(r) = urutanPartikel(j)
	urutanPartikel(j) = tmp
Next j

5k. Lakukan perhitungan pada setiap partikel dalam masing-masing swarm
Perlu diingat bahwa urutan partikel yang dihitung terlebih dahulu adalah sesuai urutan pada pengacakan sebelumnya

5k1. Cari kecepatan perpindahan posisi yang baru dengan rumus:
v baru = (w * v skrg) + (c1 * r1 * (posisi partikel terbaik – posisi partikel skrg)) + (c2 * r2 * (posisi swarm terbaik – posisi partikel skrg) + (c3 * r3 * (posisi multiswarm terbaik – posisi partikel skrg))
Jika kecepatan yang baru ternyata diluar batas variabel minKecepatan dan maksKecepatan (-1 s/d 1), maka kembalikan kecepatan agar masuk dalam batas

For k = 0 To dimensi - 1
	Dim r1 As Double = rnd.NextDouble
	Dim r2 As Double = rnd.NextDouble
	Dim r3 As Double = rnd.NextDouble

	p.kecepatan(k) = (w * p.kecepatan(k)) + (c1 * r1 * (p.posisiTerbaik(k) - p.posisi(k))) + (c2 * r2 * (ms.daftarSwarm(i).posisiSwarmTerbaik(k) - p.posisi(k))) + (c3 * r3 * (ms.posisiMultiSwarmTerbaik(k) - p.posisi(k)))

	If p.kecepatan(k) < minKecepatan Then
		p.kecepatan(k) = minKecepatan
	ElseIf p.kecepatan(k) > maksKecepatan Then
		p.kecepatan(k) = maksKecepatan
	End If
Next k

5k2. Lakukan update posisi yang baru dengan cara posisi lama + kecepatan baru
Jika posisi yang baru ternyata diluar batas variabel minX dan maksX (-10 s/d 10), maka kembalikan posisinya agar masuk dalam batas

For k = 0 To dimensi - 1
	p.posisi(k) += p.kecepatan(k)
	If p.posisi(k) < minX Then
		p.posisi(k) = minX
	ElseIf p.posisi(k) > maksX Then
		p.posisi(k) = maksX
	End If
Next k

5k3. Hitung nilai kesalahan untuk posisi yang baru

p.nilaiKesalahan = hitungNilaiKesalahan(contohData, p.posisi)

5k4. Jika nilai kesalahan baru lebih rendah dari nilai kesalahan yang diperoleh partikel tersebut sebelumnya, maka ambil posisi yang baru sebagai posisi terbaik partikel tersebut

If p.nilaiKesalahan < p.nilaiKesalahanTerbaik Then
	p.nilaiKesalahanTerbaik = p.nilaiKesalahan
	Array.Copy(p.posisi, p.posisiTerbaik, dimensi)
End If

5k5. Jika nilai kesalahan baru ternyata lebih rendah dari nilai kesalahan swarm partikel tersebut, maka ambil posisi yang baru sebagai posisi terbaik swarm partikel tersebut

If p.nilaiKesalahan < ms.daftarSwarm(i).nilaiKesalahanSwarmTerbaik Then
	ms.daftarSwarm(i).nilaiKesalahanSwarmTerbaik = p.nilaiKesalahan
	Array.Copy(p.posisi, ms.daftarSwarm(i).posisiSwarmTerbaik, dimensi)
End If

5k6. Jika nilai kesalahan baru ternyata lebih rendah dari nilai kesalahan multi swarm, maka ambil posisi yang baru sebagai posisi terbaik multiswarm

If p.nilaiKesalahan < ms.nilaiKesalahanMultiSwarmTerbaik Then
	ms.nilaiKesalahanMultiSwarmTerbaik = p.nilaiKesalahan
	Array.Copy(p.posisi, ms.posisiMultiSwarmTerbaik, dimensi)

	Console.Write("Epoch = " & epoch.ToString.PadRight(3) & ", swarm " & (i + 1).ToString.PadRight(2) & ", partikel " & (j + 1).ToString.PadRight(2) & ", ")
	Console.WriteLine(" nilai fungsi = " & ms.nilaiKesalahanMultiSwarmTerbaik.ToString("F6"))
End If

5k7. Cari angka acak antara 0 sampai dengan 1
Jika angka acak termasuk dalam probabilitas pembuangan partikel, maka lakukan pembuangan dan buat ulang partikel tersebut
Setelah itu hitung nilai kesalahan untuk posisi partikel yang baru dibuat ulang
Dan bandingkan nilai kesalahannya dengan nilai kesalahan partikel, swarm, dan multiswarm

Dim p1 As Double = rnd.NextDouble
If p1 < probBuatBaru Then
	Dim q As New Partikel(dimensi, minX, maksX, minKecepatan, maksKecepatan)
	q.nilaiKesalahan = hitungNilaiKesalahan(contohData, q.posisi)
	Array.Copy(q.posisi, q.posisiTerbaik, dimensi)
	q.nilaiKesalahanTerbaik = q.nilaiKesalahan

	If q.nilaiKesalahan < ms.daftarSwarm(i).nilaiKesalahanSwarmTerbaik Then
		ms.daftarSwarm(i).nilaiKesalahanSwarmTerbaik = q.nilaiKesalahan
		Array.Copy(q.posisi, ms.daftarSwarm(i).posisiSwarmTerbaik, dimensi)

		If q.nilaiKesalahan < ms.nilaiKesalahanMultiSwarmTerbaik Then
			ms.nilaiKesalahanMultiSwarmTerbaik = q.nilaiKesalahan
			Array.Copy(q.posisi, ms.posisiMultiSwarmTerbaik, dimensi)

			Console.Write("Epoch = " & epoch.ToString.PadRight(3) & ", swarm " & (i + 1).ToString.PadRight(2) & ", partikel " & (j + 1).ToString.PadRight(2) & ", ")
			Console.WriteLine(" nilai fungsi = " & ms.nilaiKesalahanMultiSwarmTerbaik.ToString("F6"))
		End If
	End If

	ms.daftarSwarm(i).daftarPartikel(j) = q
End If

5k8. Cari angka acak antara 0 sampai dengan 1
Jika angka acak termasuk dalam probabilitas pertukaran partikel, maka lakukan pertukaran partikel
Partikel akan ditukar dengan partikel acak pada swarm acak
Untuk masing-masing partikel yang telah ditukar posisinya, bandingkan nilai kesalahannya dengan nilai kesalahan swarm pada swarm yang baru

Dim p2 As Double = rnd.NextDouble
If p2 < probTukarPartikel Then
	Dim ii As Integer = rnd.Next(0, jumlahSwarm)
	Dim jj As Integer = rnd.Next(0, jumlahPartikel)
	Dim q As Partikel = ms.daftarSwarm(ii).daftarPartikel(jj)

	ms.daftarSwarm(i).daftarPartikel(j) = q
	ms.daftarSwarm(ii).daftarPartikel(jj) = p

	If q.nilaiKesalahan < ms.daftarSwarm(i).nilaiKesalahanSwarmTerbaik Then
		ms.daftarSwarm(i).nilaiKesalahanSwarmTerbaik = q.nilaiKesalahan
		Array.Copy(q.posisi, ms.daftarSwarm(i).posisiSwarmTerbaik, dimensi)
	End If
	If p.nilaiKesalahan < ms.daftarSwarm(ii).nilaiKesalahanSwarmTerbaik Then
		ms.daftarSwarm(ii).nilaiKesalahanSwarmTerbaik = p.nilaiKesalahan
		Array.Copy(p.posisi, ms.daftarSwarm(ii).posisiSwarmTerbaik, dimensi)
	End If
End If

Setelah melalui perhitungan diatas, maka akan didapatkan bobot dengan nilai fungsi terendah

6. Lakukan perhitungan dari masing-masing data awal menggunakan matriks bobot yang sudah ditemukan

Dim output As Double = rl.hitungNilaiOutput(contohData(i), bobotTerbaik)

* Gunakan fungsi ini untuk menghitung nilai output
nilai output dihitung dengan rumus:
Pertama, tentukan nilai z, yaitu z = b0 + b1(x1) + b2(x2) + b3(x3)
Kemudian tentukan nilai akhir, yaitu Y = 1.0 / (1.0 + e^-z)
Penjelasan mengenai langkah-langkah perhitungan dapat dilihat pada keterangan skrip dibawah ini

Public Function hitungNilaiOutput(ByVal dataItem() As Double, ByVal bobot() As Double) As Double
	Dim z As Double = bobot(0) 'b0 adalah konstanta

	For i = 0 To bobot.Length - 2
		z += (bobot(i + 1) * dataItem(i))
	Next i
	Return 1.0 / (1.0 + Math.Exp(-z))
End Function

7. 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

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

8. 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"))

9. Lakukan perhitungan yang sama (poin 6 dan 7) untuk masing-masing data baru

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

	Dim output As Double = rl.hitungNilaiOutput(dataBaru(i), bobotTerbaik)
	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)

cmd42

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 *

Satu pemikiran di “Regresi Logistik dengan teknik MSO (Multi Swarm Optimization)